diff --git a/modules/33acrossBidAdapter.js b/modules/33acrossBidAdapter.js index e99aa727a87..26fc0a11fd5 100644 --- a/modules/33acrossBidAdapter.js +++ b/modules/33acrossBidAdapter.js @@ -1,19 +1,19 @@ -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { config } from '../src/config.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {config} from '../src/config.js'; import { deepAccess, - uniques, - isArray, + getWindowSelf, getWindowTop, + isArray, isGptPubadsDefined, isSlotMatchingAdUnitCode, logInfo, logWarn, - getWindowSelf, mergeDeep, - pick + pick, + uniques } from '../src/utils.js'; -import { BANNER, VIDEO } from '../src/mediaTypes.js'; +import {BANNER, VIDEO} from '../src/mediaTypes.js'; // **************************** UTILS *************************** // const BIDDER_CODE = '33across'; @@ -183,7 +183,8 @@ function buildRequests(bidRequests, bidderRequest) { uspConsent, pageUrl, referer, - ttxSettings + ttxSettings, + bidderRequest, }) ) } @@ -246,7 +247,7 @@ function _getMRAKey(bidRequest) { } // Infer the necessary data from valid bid for a minimal ttxRequest and create HTTP request -function _createServerRequest({ bidRequests, gdprConsent = {}, uspConsent, pageUrl, referer, ttxSettings }) { +function _createServerRequest({ bidRequests, gdprConsent = {}, uspConsent, pageUrl, referer, ttxSettings, bidderRequest }) { const ttxRequest = {}; const firstBidRequest = bidRequests[0]; const { siteId, test } = firstBidRequest.params; @@ -271,7 +272,7 @@ function _createServerRequest({ bidRequests, gdprConsent = {}, uspConsent, pageU ttxRequest.site.ref = referer; } - ttxRequest.id = firstBidRequest.auctionId; + ttxRequest.id = bidderRequest?.bidderRequestId; if (gdprConsent.consentString) { ttxRequest.user = setExtensions(ttxRequest.user, { diff --git a/modules/adWMGBidAdapter.js b/modules/adWMGBidAdapter.js index 12dc36d694c..36935e80d3b 100644 --- a/modules/adWMGBidAdapter.js +++ b/modules/adWMGBidAdapter.js @@ -59,11 +59,12 @@ export const spec = { } const request = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidRequest.auctionId, requestId: bidRequest.bidId, bidRequestsCount: bidRequest.bidRequestsCount, bidderRequestId: bidRequest.bidderRequestId, - transactionId: bidRequest.transactionId, + transactionId: bidRequest.ortb2Imp?.ext?.tid, referrer: referrer, timeout: timeout, adUnit: adUnit, diff --git a/modules/adagioBidAdapter.js b/modules/adagioBidAdapter.js index 86021d2a90c..fc3ce0445e5 100644 --- a/modules/adagioBidAdapter.js +++ b/modules/adagioBidAdapter.js @@ -866,6 +866,7 @@ function storeRequestInAdagioNS(bidRequest) { bidder: bidRequest.bidder, params: bidRequest.params // use the updated bid.params object with auto-detected params }], + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidRequest.auctionId, pageviewId: internal.getPageviewId(), printNumber, diff --git a/modules/adbookpspBidAdapter.js b/modules/adbookpspBidAdapter.js index 917d18e9fae..cb03f2ffc17 100644 --- a/modules/adbookpspBidAdapter.js +++ b/modules/adbookpspBidAdapter.js @@ -203,7 +203,7 @@ function buildRegs(bidderRequest) { function buildSource(bidRequests, bidderRequest) { const source = { fd: 1, - tid: bidderRequest.auctionId, + tid: bidderRequest.ortb2.source.tid, }; const schain = deepAccess(bidRequests, '0.schain'); diff --git a/modules/addefendBidAdapter.js b/modules/addefendBidAdapter.js index d73c25935ee..dbb186fdc86 100644 --- a/modules/addefendBidAdapter.js +++ b/modules/addefendBidAdapter.js @@ -30,6 +30,7 @@ export const spec = { for (var i = 0; i < validBidRequests.length; i++) { let vb = validBidRequests[i]; let o = vb.params; + // TODO: fix auctionId/transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 bid.auctionId = vb.auctionId; o.bidId = vb.bidId; o.transactionId = vb.transactionId; diff --git a/modules/adfBidAdapter.js b/modules/adfBidAdapter.js index 82bd7f03ff0..5c4b03c3bb2 100644 --- a/modules/adfBidAdapter.js +++ b/modules/adfBidAdapter.js @@ -3,7 +3,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; -import {deepAccess, deepSetValue, mergeDeep, parseSizesInput, deepClone} from '../src/utils.js'; +import {deepAccess, deepClone, deepSetValue, mergeDeep, parseSizesInput} from '../src/utils.js'; import {config} from '../src/config.js'; import {Renderer} from '../src/Renderer.js'; @@ -58,7 +58,7 @@ export const spec = { const adxDomain = setOnAny(validBidRequests, 'params.adxDomain') || 'adx.adform.net'; const pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net'; - const tid = bidderRequest.auctionId; + const tid = bidderRequest.ortb2?.source?.tid; const test = setOnAny(validBidRequests, 'params.test'); const currency = getConfig('currency.adServerCurrency'); const cur = currency && [ currency ]; @@ -139,7 +139,7 @@ export const spec = { }); const request = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, site, app, user, diff --git a/modules/adgenerationBidAdapter.js b/modules/adgenerationBidAdapter.js index 199dd0955c7..35dd2902b2f 100644 --- a/modules/adgenerationBidAdapter.js +++ b/modules/adgenerationBidAdapter.js @@ -45,7 +45,7 @@ export const spec = { data = tryAppendQueryString(data, 'sdktype', '0'); data = tryAppendQueryString(data, 'hb', 'true'); data = tryAppendQueryString(data, 't', 'json3'); - data = tryAppendQueryString(data, 'transactionid', validReq.transactionId); + data = tryAppendQueryString(data, 'transactionid', validReq.ortb2Imp?.ext?.tid); data = tryAppendQueryString(data, 'sizes', getSizes(validReq)); data = tryAppendQueryString(data, 'currency', getCurrencyType()); data = tryAppendQueryString(data, 'pbver', '$prebid.version$'); diff --git a/modules/adkernelAdnBidAdapter.js b/modules/adkernelAdnBidAdapter.js index 3d26f649601..4db46aca3c6 100644 --- a/modules/adkernelAdnBidAdapter.js +++ b/modules/adkernelAdnBidAdapter.js @@ -1,4 +1,4 @@ -import { deepAccess, parseSizesInput, isArray, deepSetValue, isStr, isNumber, logInfo } from '../src/utils.js'; +import {deepAccess, deepSetValue, isArray, isNumber, isStr, logInfo, parseSizesInput} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; @@ -58,11 +58,11 @@ function canonicalizeSizesArray(sizes) { } function buildRequestParams(tags, bidderRequest) { - let {auctionId, gdprConsent, uspConsent, transactionId, refererInfo} = bidderRequest; + let {gdprConsent, uspConsent, refererInfo, ortb2} = bidderRequest; let req = { - id: auctionId, - // TODO: transactionId is undefined here, should this be auctionId? see #8573 - tid: transactionId, + id: bidderRequest.bidderRequestId, + // TODO: root-level `tid` is not ORTB; is this intentional? + tid: ortb2?.source?.tid, site: buildSite(refererInfo), imp: tags }; diff --git a/modules/adkernelBidAdapter.js b/modules/adkernelBidAdapter.js index d5639f57c10..cbeeaf3e705 100644 --- a/modules/adkernelBidAdapter.js +++ b/modules/adkernelBidAdapter.js @@ -6,6 +6,7 @@ import { deepAccess, deepSetValue, getAdUnitSizes, + getDefinedParams, getDNT, isArray, isArrayOfNums, @@ -14,14 +15,13 @@ import { isPlainObject, isStr, mergeDeep, - parseGPTSingleSizeArrayToRtbSize, - getDefinedParams + parseGPTSingleSizeArrayToRtbSize } from '../src/utils.js'; import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {find} from '../src/polyfill.js'; import {config} from '../src/config.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; /* * In case you're AdKernel whitelable platform's client who needs branded adapter to @@ -490,9 +490,9 @@ function makeRegulations(bidderRequest) { * @returns */ function makeBaseRequest(bidderRequest, imps, fpd) { - let {auctionId, timeout} = bidderRequest; + let {timeout} = bidderRequest; let request = { - 'id': auctionId, + 'id': bidderRequest.bidderRequestId, 'imp': imps, 'at': 1, 'tmax': parseInt(timeout) diff --git a/modules/adqueryBidAdapter.js b/modules/adqueryBidAdapter.js index 63e0c7dbe22..6155459cc8d 100644 --- a/modules/adqueryBidAdapter.js +++ b/modules/adqueryBidAdapter.js @@ -193,6 +193,7 @@ function buildRequest(validBidRequests, bidderRequest) { let bid = validBidRequests; return { placementCode: bid.params.placementId, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bid.auctionId, type: bid.params.type, adUnitCode: bid.adUnitCode, diff --git a/modules/adtrueBidAdapter.js b/modules/adtrueBidAdapter.js index 9bff2c85c57..389986eb586 100644 --- a/modules/adtrueBidAdapter.js +++ b/modules/adtrueBidAdapter.js @@ -469,7 +469,7 @@ export const spec = { conf.zoneId = conf.zoneId || bid.params.zoneId; conf.pubId = conf.pubId || bid.params.publisherId; - conf.transactionId = bid.transactionId; + conf.transactionId = bid.ortb2Imp?.ext?.tid; if (bidCurrency === '') { bidCurrency = bid.params.currency || UNDEFINED; } else if (bid.params.hasOwnProperty('currency') && bidCurrency !== bid.params.currency) { @@ -492,7 +492,7 @@ export const spec = { payload.ext.wrapper = {}; payload.ext.wrapper.transactionId = conf.transactionId; - payload.ext.wrapper.wiid = conf.wiid || bidderRequest.auctionId; + payload.ext.wrapper.wiid = conf.wiid || bidderRequest.ortb2?.ext?.tid; payload.ext.wrapper.wp = 'pbjs'; payload.user.geo = {}; @@ -507,7 +507,7 @@ export const spec = { if (typeof config.getConfig('device') === 'object') { payload.device = Object.assign(payload.device, config.getConfig('device')); } - + deepSetValue(payload, 'source.tid', conf.transactionId); // test bids if (window.location.href.indexOf('adtrueTest=true') !== -1) { payload.test = 1; diff --git a/modules/aduptechBidAdapter.js b/modules/aduptechBidAdapter.js index c7138e43cfe..1ea5f1a0096 100644 --- a/modules/aduptechBidAdapter.js +++ b/modules/aduptechBidAdapter.js @@ -255,6 +255,7 @@ export const spec = { url: internal.buildEndpointUrl(publisher), method: ENDPOINT_METHOD, data: { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: auctionId, pageUrl: pageUrl, referrer: referrer, @@ -271,7 +272,7 @@ export const spec = { groupedBidRequests[publisher].forEach(bidRequest => { const bid = { bidId: bidRequest.bidId, - transactionId: bidRequest.transactionId, + transactionId: bidRequest.ortb2Imp?.ext?.tid, adUnitCode: bidRequest.adUnitCode, params: internal.extractParams(bidRequest) }; diff --git a/modules/adxcgBidAdapter.js b/modules/adxcgBidAdapter.js index 564960cf2c9..5930f3adb67 100644 --- a/modules/adxcgBidAdapter.js +++ b/modules/adxcgBidAdapter.js @@ -98,7 +98,7 @@ export const spec = { device.dnt = getDNT() ? 1 : 0; device.language = (navigator && navigator.language) ? navigator.language.split('-')[0] : ''; - const tid = bidderRequest.auctionId; + const tid = bidderRequest.ortb2?.source?.tid; const test = setOnAny(validBidRequests, 'params.test'); const currency = getConfig('currency.adServerCurrency'); const cur = currency && [ currency ]; diff --git a/modules/adyoulikeBidAdapter.js b/modules/adyoulikeBidAdapter.js index 376d108e980..4080d9f25cd 100644 --- a/modules/adyoulikeBidAdapter.js +++ b/modules/adyoulikeBidAdapter.js @@ -71,7 +71,7 @@ export const spec = { let size = getSize(sizesArray); accumulator[bidReq.bidId] = {}; accumulator[bidReq.bidId].PlacementID = bidReq.params.placement; - accumulator[bidReq.bidId].TransactionID = bidReq.transactionId; + accumulator[bidReq.bidId].TransactionID = bidReq.ortb2Imp?.ext?.tid; accumulator[bidReq.bidId].Width = size.width; accumulator[bidReq.bidId].Height = size.height; accumulator[bidReq.bidId].AvailableSizes = sizesArray.join(','); diff --git a/modules/afpBidAdapter.js b/modules/afpBidAdapter.js index f690b70973d..cec61b29b82 100644 --- a/modules/afpBidAdapter.js +++ b/modules/afpBidAdapter.js @@ -100,13 +100,13 @@ export const spec = { pageUrl: IS_DEV ? TEST_PAGE_URL : refererInfo.page, gdprConsent: gdprConsent, bidRequests: validBidRequests.map(validBidRequest => { - const {bidId, transactionId, sizes, params: { + const {bidId, ortb2Imp, sizes, params: { placeId, placeType, imageUrl, imageWidth, imageHeight }} = validBidRequest bidRequestMap[bidId] = validBidRequest const bidRequest = { bidId, - transactionId, + transactionId: ortb2Imp?.ext?.tid, sizes, placeId, } diff --git a/modules/aidemBidAdapter.js b/modules/aidemBidAdapter.js index d43c07aeece..7469f26156b 100644 --- a/modules/aidemBidAdapter.js +++ b/modules/aidemBidAdapter.js @@ -1,4 +1,15 @@ -import {_each, contains, deepAccess, deepSetValue, getDNT, isBoolean, isStr, isNumber, logError, logInfo} from '../src/utils.js'; +import { + _each, + contains, + deepAccess, + deepSetValue, + getDNT, + isBoolean, + isNumber, + isStr, + logError, + logInfo +} from '../src/utils.js'; import {config} from '../src/config.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; @@ -164,6 +175,7 @@ function buildWinNotice(bid) { impid: deepAccess(bid, 'meta.impid'), dsp_id: deepAccess(bid, 'meta.dsp_id'), adUnitCode: bid.adUnitCode, + // TODO: fix auctionId/transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bid.auctionId, transactionId: bid.transactionId, ttl: bid.ttl, @@ -201,7 +213,7 @@ function getMediaType(bidRequest) { function getPrebidRequestFields(bidderRequest, bidRequests) { const payload = {}; // Base Payload Data - deepSetValue(payload, 'id', bidderRequest.auctionId); + deepSetValue(payload, 'id', bidderRequest.bidderRequestId); // Impressions setPrebidImpressionObject(bidRequests, payload); // Device @@ -231,7 +243,8 @@ function setPrebidImpressionObject(bidRequests, payload) { // Placement or ad tag used to initiate the auction deepSetValue(impressionObject, 'id', bidRequest.bidId); // Transaction id - deepSetValue(impressionObject, 'tid', deepAccess(bidRequest, 'transactionId')); + // TODO: `imp.tid` is not ORTB, is this intentional? + deepSetValue(impressionObject, 'tid', deepAccess(bidRequest, 'ortb2Imp.ext.tid')); // placement id deepSetValue(impressionObject, 'tagid', deepAccess(bidRequest, 'params.placementId', null)); // Publisher id diff --git a/modules/ajaBidAdapter.js b/modules/ajaBidAdapter.js index 133a2fdbadf..ffab41611ef 100644 --- a/modules/ajaBidAdapter.js +++ b/modules/ajaBidAdapter.js @@ -55,7 +55,7 @@ export const spec = { const asi = getBidIdParameter('asi', bidRequest.params); queryString = tryAppendQueryString(queryString, 'asi', asi); queryString = tryAppendQueryString(queryString, 'skt', SDKType); - queryString = tryAppendQueryString(queryString, 'tid', bidRequest.transactionId) + queryString = tryAppendQueryString(queryString, 'tid', bidRequest.ortb2Imp?.ext?.tid) queryString = tryAppendQueryString(queryString, 'prebid_id', bidRequest.bidId); queryString = tryAppendQueryString(queryString, 'prebid_ver', '$prebid.version$'); diff --git a/modules/alkimiBidAdapter.js b/modules/alkimiBidAdapter.js index 69b3fdae3d8..c087b3061a0 100644 --- a/modules/alkimiBidAdapter.js +++ b/modules/alkimiBidAdapter.js @@ -1,5 +1,5 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; -import {deepClone, deepAccess} from '../src/utils.js'; +import {deepAccess, deepClone} from '../src/utils.js'; import {ajax} from '../src/ajax.js'; import {VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; @@ -41,6 +41,7 @@ export const spec = { const alkimiConfig = config.getConfig('alkimi'); let payload = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 requestId: bidderRequest.auctionId, signRequest: {bids, randomUUID: alkimiConfig && alkimiConfig.randomUUID}, bidIds, diff --git a/modules/amxBidAdapter.js b/modules/amxBidAdapter.js index 68a3a370c01..7286001b888 100644 --- a/modules/amxBidAdapter.js +++ b/modules/amxBidAdapter.js @@ -303,6 +303,7 @@ export const spec = { }; const payload = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 a: bidderRequest.auctionId, B: 0, b: loc.host, diff --git a/modules/apacdexBidAdapter.js b/modules/apacdexBidAdapter.js index 10593855c59..94c1e08f6af 100644 --- a/modules/apacdexBidAdapter.js +++ b/modules/apacdexBidAdapter.js @@ -141,7 +141,7 @@ export const spec = { return { params: bid.params, mediaTypes: bid.mediaTypes, - transactionId: bid.transactionId, + transactionId: bid.ortb2Imp?.ext?.tid, sizes: bid.sizes, bidId: bid.bidId, adUnitCode: bid.adUnitCode, diff --git a/modules/appnexusBidAdapter.js b/modules/appnexusBidAdapter.js index 1ab16c5a636..c92b45622b6 100644 --- a/modules/appnexusBidAdapter.js +++ b/modules/appnexusBidAdapter.js @@ -960,6 +960,7 @@ function bidToTag(bid) { tag['banner_frameworks'] = bid.params.frameworks; } + // TODO: why does this need to iterate through every ad unit? let adUnit = find(auctionManager.getAdUnits(), au => bid.transactionId === au.transactionId); if (adUnit && adUnit.mediaTypes && adUnit.mediaTypes.banner) { tag.ad_types.push(BANNER); diff --git a/modules/apstreamBidAdapter.js b/modules/apstreamBidAdapter.js index 871b04442da..2856fb02087 100644 --- a/modules/apstreamBidAdapter.js +++ b/modules/apstreamBidAdapter.js @@ -421,6 +421,7 @@ function buildRequests(bidRequests, bidderRequest) { bidRequests = convertOrtbRequestToProprietaryNative(bidRequests); const data = { med: encodeURIComponent(window.location.href), + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auid: bidderRequest.auctionId, ref: document.referrer, dnt: getDNT() ? 1 : 0, diff --git a/modules/asoBidAdapter.js b/modules/asoBidAdapter.js index 39c42f193b2..d8700ac6c6c 100644 --- a/modules/asoBidAdapter.js +++ b/modules/asoBidAdapter.js @@ -299,7 +299,7 @@ function createBasePayload(bidRequest, bidderRequest) { const urlsInfo = getUrlsInfo(bidderRequest); const payload = { - id: bidRequest.auctionId + '_' + bidRequest.bidId, + id: bidRequest.bidId, at: 1, tmax: bidderRequest.timeout, site: { diff --git a/modules/astraoneBidAdapter.js b/modules/astraoneBidAdapter.js index d6bfa4b93ee..d7f92bb5fac 100644 --- a/modules/astraoneBidAdapter.js +++ b/modules/astraoneBidAdapter.js @@ -11,7 +11,7 @@ function buildBidRequests(validBidRequests) { const params = validBidRequest.params; const bidRequest = { bidId: validBidRequest.bidId, - transactionId: validBidRequest.transactionId, + transactionId: validBidRequest.ortb2Imp?.ext?.tid, sizes: validBidRequest.sizes, placement: params.placement, placeId: params.placeId, diff --git a/modules/audiencerunBidAdapter.js b/modules/audiencerunBidAdapter.js index efd88aa6f58..9beb20d4f77 100644 --- a/modules/audiencerunBidAdapter.js +++ b/modules/audiencerunBidAdapter.js @@ -114,8 +114,9 @@ export const spec = { bidId: bid.bidId, bidderRequestId: getBidIdParameter('bidderRequestId', bid), adUnitCode: getBidIdParameter('adUnitCode', bid), + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: getBidIdParameter('auctionId', bid), - transactionId: getBidIdParameter('transactionId', bid), + transactionId: bid.ortb2Imp?.ext?.tid || '', }; }); diff --git a/modules/automatadBidAdapter.js b/modules/automatadBidAdapter.js index 1174c2a9f38..bea2a9df5b2 100644 --- a/modules/automatadBidAdapter.js +++ b/modules/automatadBidAdapter.js @@ -1,7 +1,7 @@ -import { logInfo } from '../src/utils.js'; -import {registerBidder} from '../src/adapters/bidderFactory.js' -import {BANNER} from '../src/mediaTypes.js' -import {ajax} from '../src/ajax.js' +import {logInfo} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER} from '../src/mediaTypes.js'; +import {ajax} from '../src/ajax.js'; const BIDDER = 'automatad' @@ -57,7 +57,7 @@ export const spec = { // params from bid request const openrtbRequest = { - id: validBidRequests[0].auctionId, + id: bidderRequest.bidderRequestId, imp: impressions, site: { id: siteId, diff --git a/modules/beopBidAdapter.js b/modules/beopBidAdapter.js index 2a0a4c5fd4c..fd41f352cb9 100644 --- a/modules/beopBidAdapter.js +++ b/modules/beopBidAdapter.js @@ -122,6 +122,7 @@ function buildTrackingParams(data, info, value) { nptnid: params.networkPartnerId, bid: data.bidId || data.requestId, sl_n: data.adUnitCode, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 aid: data.auctionId, se_ca: 'bid', se_ac: info, @@ -150,8 +151,9 @@ function beOpRequestSlotsMaker(bid) { bid: getBidIdParameter('bidId', bid), brid: getBidIdParameter('bidderRequestId', bid), name: getBidIdParameter('adUnitCode', bid), + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 aid: getBidIdParameter('auctionId', bid), - tid: getBidIdParameter('transactionId', bid), + tid: bid.ortb2Imp?.ext?.tid || '', brc: getBidIdParameter('bidRequestsCount', bid), bdrc: getBidIdParameter('bidderRequestCount', bid), bwc: getBidIdParameter('bidderWinsCount', bid), diff --git a/modules/betweenBidAdapter.js b/modules/betweenBidAdapter.js index ea28420481d..d615e433cc0 100644 --- a/modules/betweenBidAdapter.js +++ b/modules/betweenBidAdapter.js @@ -43,7 +43,8 @@ export const spec = { rr: getRr(), s: i.params && i.params.s, bidid: i.bidId, - transactionid: i.transactionId, + transactionid: i.ortb2Imp?.ext?.tid, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionid: i.auctionId }; diff --git a/modules/bizzclickBidAdapter.js b/modules/bizzclickBidAdapter.js index 8219a2a41cf..dc7731231ab 100644 --- a/modules/bizzclickBidAdapter.js +++ b/modules/bizzclickBidAdapter.js @@ -1,8 +1,9 @@ -import { logMessage, getDNT, deepSetValue, deepAccess, _map, logWarn } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js'; +import {_map, deepAccess, deepSetValue, getDNT, logMessage, logWarn} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; + const BIDDER_CODE = 'bizzclick'; const ACCOUNTID_MACROS = '[account_id]'; const URL_ENDPOINT = `https://us-e-node1.bizzclick.com/bid?rtb_seat_id=prebidjs&secret_key=${ACCOUNTID_MACROS}`; @@ -92,7 +93,7 @@ export const spec = { host: location.host }, source: { - tid: bidRequest.auctionId, + tid: bidRequest.ortb2Imp?.ext?.tid, ext: { schain: {} } @@ -234,7 +235,9 @@ const prepareImpObject = (bidRequest) => { }; const addNativeParameters = bidRequest => { let impObject = { - id: bidRequest.transactionId, + // TODO: top-level ID is not in ORTB native 1.2, is this intentional? + // (despite the name, this appears to be an ORTB native request - not an imp - object) + id: bidRequest.bidId, ver: NATIVE_VERSION, }; const assets = _map(bidRequest.mediaTypes.native, (bidParams, key) => { diff --git a/modules/bliinkBidAdapter.js b/modules/bliinkBidAdapter.js index ee814807331..9a9d74d14c1 100644 --- a/modules/bliinkBidAdapter.js +++ b/modules/bliinkBidAdapter.js @@ -154,6 +154,7 @@ export const buildRequests = (validBidRequests, bidderRequest) => { return { sizes: bid.sizes.map((size) => ({ w: size[0], h: size[1] })), id: bid.params.tagId, + // TODO: bidId is globally unique, is it a good choice for transaction ID (vs ortb2Imp.ext.tid)? transactionId: bid.bidId, mediaTypes: Object.keys(bid.mediaTypes), imageUrl: deepAccess(bid, 'params.imageUrl', ''), diff --git a/modules/bluebillywigBidAdapter.js b/modules/bluebillywigBidAdapter.js index 9022ca120af..d4bde9b3f2c 100644 --- a/modules/bluebillywigBidAdapter.js +++ b/modules/bluebillywigBidAdapter.js @@ -276,8 +276,8 @@ export const spec = { }); const request = { - id: bidderRequest.auctionId, - source: {tid: bidderRequest.auctionId}, + id: bidderRequest.bidderRequestId, + source: {tid: bidderRequest.ortb2?.source?.tid}, tmax: BB_CONSTANTS.DEFAULT_TIMEOUT, imp: imps, test: DEV_MODE ? 1 : 0, diff --git a/modules/braveBidAdapter.js b/modules/braveBidAdapter.js index ea8b4af690c..d954522ae24 100644 --- a/modules/braveBidAdapter.js +++ b/modules/braveBidAdapter.js @@ -1,8 +1,8 @@ -import { parseUrl, isEmpty, isStr, triggerPixel } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js'; -import { config } from '../src/config.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {isEmpty, isStr, parseUrl, triggerPixel} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; +import {config} from '../src/config.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; const BIDDER_CODE = 'brave'; const DEFAULT_CUR = 'USD'; @@ -58,7 +58,8 @@ export const spec = { impObject.video = createVideoRequest(br); } else if (br.mediaTypes.native) { impObject.native = { - id: br.transactionId, + // TODO: `id` is not part of the ORTB native spec, is this intentional? + id: br.bidId, ver: '1.2', request: createNativeRequest(br) }; @@ -229,7 +230,8 @@ const createBannerRequest = br => { }; const createVideoRequest = br => { - let videoObj = {id: br.transactionId}; + // TODO: `id` is not part of imp.video in ORTB; is this intentional? + let videoObj = {id: br.bidId}; let supportParamsList = ['mimes', 'minduration', 'maxduration', 'protocols', 'startdelay', 'skip', 'minbitrate', 'maxbitrate', 'api', 'linearity']; for (let param of supportParamsList) { diff --git a/modules/browsiBidAdapter.js b/modules/browsiBidAdapter.js index f96b203ca10..03b6b2a8f3d 100644 --- a/modules/browsiBidAdapter.js +++ b/modules/browsiBidAdapter.js @@ -38,7 +38,7 @@ export const spec = { const requests = []; const {refererInfo, bidderRequestId, gdprConsent, uspConsent} = bidderRequest; validBidRequests.forEach(bidRequest => { - const {bidId, adUnitCode, auctionId, transactionId, schain, params} = bidRequest; + const {bidId, adUnitCode, auctionId, ortb2Imp, schain, params} = bidRequest; const video = getVideoMediaType(bidRequest); const request = { @@ -55,8 +55,9 @@ export const spec = { sizes: video.playerSize, video: video, aUCode: adUnitCode, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 aID: auctionId, - tID: transactionId, + tID: ortb2Imp?.ext?.tid, schain: schain, params: params } diff --git a/modules/carodaBidAdapter.js b/modules/carodaBidAdapter.js index 7267452dd4c..cb7b5fbe7c5 100644 --- a/modules/carodaBidAdapter.js +++ b/modules/carodaBidAdapter.js @@ -48,6 +48,7 @@ export const spec = { const eids = getFirstWithKey(validBidRequests, 'userIdAsEids'); const schain = getFirstWithKey(validBidRequests, 'schain'); const request = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidderRequest.auctionId, currency, hb_version: '$prebid.version$', diff --git a/modules/ccxBidAdapter.js b/modules/ccxBidAdapter.js index 28f3fe3a166..b1fcb29e3d0 100644 --- a/modules/ccxBidAdapter.js +++ b/modules/ccxBidAdapter.js @@ -178,7 +178,7 @@ export const spec = { requestBody.imp = [] requestBody.site = _getSiteObj(bidderRequest) requestBody.device = _getDeviceObj() - requestBody.id = bidderRequest.bids[0].auctionId + requestBody.id = bidderRequest.bidderRequestId; requestBody.ext = {'ce': (storage.cookiesAreEnabled() ? 1 : 0)} // Attaching GDPR Consent Params diff --git a/modules/cleanmedianetBidAdapter.js b/modules/cleanmedianetBidAdapter.js index 46253d7af69..601a237baa8 100644 --- a/modules/cleanmedianetBidAdapter.js +++ b/modules/cleanmedianetBidAdapter.js @@ -80,11 +80,11 @@ export const spec = { buildRequests: function (validBidRequests, bidderRequest) { return validBidRequests.map(bidRequest => { - const {adUnitCode, auctionId, mediaTypes, params, sizes, transactionId} = bidRequest; + const {adUnitCode, bidId, mediaTypes, params, sizes} = bidRequest; const baseEndpoint = (params['rtbEndpoint'] || ENDPOINTS['cleanmedianet']).replace(/^http:/, 'https:'); const rtbEndpoint = `${baseEndpoint}/r/${params.supplyPartnerId}/bidr?rformat=open_rtb&reqformat=rtb_json&bidder=prebid` + (params.query ? '&' + params.query : ''); const rtbBidRequest = { - id: auctionId, + id: bidId, site: { domain: bidderRequest.refererInfo.domain, page: bidderRequest.refererInfo.page, @@ -118,7 +118,7 @@ export const spec = { } const imp = { - id: transactionId, + id: bidId, instl: deepAccess(bidderRequest.ortb2Imp, 'instl') === 1 || params.instl === 1 ? 1 : 0, tagid: adUnitCode, bidfloor: helper.getBidFloor(bidRequest) || 0, diff --git a/modules/codefuelBidAdapter.js b/modules/codefuelBidAdapter.js index bde168a79e3..2548b20189b 100644 --- a/modules/codefuelBidAdapter.js +++ b/modules/codefuelBidAdapter.js @@ -58,7 +58,7 @@ export const spec = { }); const request = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, site: { page, domain, publisher }, device: { ua, devicetype }, source: { fd: 1 }, diff --git a/modules/colossussspBidAdapter.js b/modules/colossussspBidAdapter.js index 082fb0ac4db..00d90f62a2c 100644 --- a/modules/colossussspBidAdapter.js +++ b/modules/colossussspBidAdapter.js @@ -125,7 +125,7 @@ export const spec = { placementId: bid.params.placement_id, groupId: bid.params.group_id, bidId: bid.bidId, - tid: bid.transactionId, + tid: bid.ortb2Imp?.ext?.tid, eids: [], floor: {} }; diff --git a/modules/concertBidAdapter.js b/modules/concertBidAdapter.js index a25d9086446..bf4079322ff 100644 --- a/modules/concertBidAdapter.js +++ b/modules/concertBidAdapter.js @@ -66,7 +66,7 @@ export const spec = { let slot = { name: bidRequest.adUnitCode, bidId: bidRequest.bidId, - transactionId: bidRequest.transactionId, + transactionId: bidRequest.ortb2Imp?.ext?.tid, sizes: bidRequest.params.sizes || bidRequest.sizes, partnerId: bidRequest.params.partnerId, slotType: bidRequest.params.slotType, diff --git a/modules/connectadBidAdapter.js b/modules/connectadBidAdapter.js index d53e3b28ab5..d5665b318be 100644 --- a/modules/connectadBidAdapter.js +++ b/modules/connectadBidAdapter.js @@ -77,6 +77,7 @@ export const spec = { validBidRequests.map(bid => { const placement = Object.assign({ + // TODO: fix transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 id: bid.transactionId, divName: bid.bidId, pisze: bid.mediaTypes.banner.sizes[0] || bid.sizes[0], diff --git a/modules/conversantBidAdapter.js b/modules/conversantBidAdapter.js index b5a1424dcba..eb9f13b8f5d 100644 --- a/modules/conversantBidAdapter.js +++ b/modules/conversantBidAdapter.js @@ -1,4 +1,21 @@ -import { logWarn, isStr, deepAccess, isArray, getBidIdParameter, deepSetValue, isEmpty, _each, convertTypes, parseUrl, mergeDeep, buildUrl, _map, logError, isFn, isPlainObject } from '../src/utils.js'; +import { + logWarn, + isStr, + deepAccess, + isArray, + getBidIdParameter, + deepSetValue, + isEmpty, + _each, + convertTypes, + parseUrl, + mergeDeep, + buildUrl, + _map, + logError, + isFn, + isPlainObject, +} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {getStorageManager} from '../src/storageManager.js'; @@ -56,7 +73,6 @@ export const spec = { buildRequests: function(validBidRequests, bidderRequest) { const page = (bidderRequest && bidderRequest.refererInfo) ? bidderRequest.refererInfo.page : ''; let siteId = ''; - let requestId = ''; let pubcid = null; let pubcidName = '_pubcid'; let bidurl = URL; @@ -67,8 +83,6 @@ export const spec = { siteId = getBidIdParameter('site_id', bid.params) || siteId; pubcidName = getBidIdParameter('pubcid_name', bid.params) || pubcidName; - requestId = bid.auctionId; - const imp = { id: bid.bidId, secure: 1, @@ -122,10 +136,10 @@ export const spec = { }); const payload = { - id: requestId, + id: bidderRequest.bidderRequestId, imp: conversantImps, source: { - tid: requestId + tid: bidderRequest.ortb2?.source?.tid, }, site: { id: siteId, diff --git a/modules/craftBidAdapter.js b/modules/craftBidAdapter.js index 8ffdabcb597..d1017e85bc8 100644 --- a/modules/craftBidAdapter.js +++ b/modules/craftBidAdapter.js @@ -207,6 +207,7 @@ function bidToTag(bid) { } tag.keywords = keywords; } + // TODO: why does this need to iterate through every ad unit? let adUnit = find(auctionManager.getAdUnits(), au => bid.transactionId === au.transactionId); if (adUnit && adUnit.mediaTypes && adUnit.mediaTypes.banner) { tag.ad_types.push(BANNER); diff --git a/modules/criteoBidAdapter.js b/modules/criteoBidAdapter.js index 63c4482ab84..bc839de2eb9 100644 --- a/modules/criteoBidAdapter.js +++ b/modules/criteoBidAdapter.js @@ -429,7 +429,8 @@ function buildCdbRequest(context, bidRequests, bidderRequest) { schain = bidRequest.schain || schain; const slot = { impid: bidRequest.adUnitCode, - transactionid: bidRequest.transactionId, + transactionid: bidRequest.ortb2Imp?.ext?.tid, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidRequest.auctionId, }; if (bidRequest.params.zoneId) { diff --git a/modules/dailyhuntBidAdapter.js b/modules/dailyhuntBidAdapter.js index 5ae8ee3ea21..f96e07b71bf 100644 --- a/modules/dailyhuntBidAdapter.js +++ b/modules/dailyhuntBidAdapter.js @@ -4,7 +4,7 @@ import {_map, deepAccess, isEmpty} from '../src/utils.js'; import {ajax} from '../src/ajax.js'; import {find} from '../src/polyfill.js'; import {INSTREAM, OUTSTREAM} from '../src/video.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; const BIDDER_CODE = 'dailyhunt'; const BIDDER_ALIAS = 'dh'; @@ -99,7 +99,7 @@ const createOrtbRequest = (validBidRequests, bidderRequest) => { let user = createOrtbUserObj(validBidRequests) let site = createOrtbSiteObj(validBidRequests, bidderRequest.refererInfo.page) return { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, imp: [], site, device, diff --git a/modules/datablocksBidAdapter.js b/modules/datablocksBidAdapter.js index 4e21e08ba57..11d3ebb1589 100644 --- a/modules/datablocksBidAdapter.js +++ b/modules/datablocksBidAdapter.js @@ -1,10 +1,11 @@ -import { getWindowTop, isGptPubadsDefined, deepAccess, getAdUnitSizes, isEmpty } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { config } from '../src/config.js'; -import { BANNER, NATIVE } from '../src/mediaTypes.js'; -import { getStorageManager } from '../src/storageManager.js'; -import { ajax } from '../src/ajax.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {deepAccess, getAdUnitSizes, getWindowTop, isEmpty, isGptPubadsDefined} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {config} from '../src/config.js'; +import {BANNER, NATIVE} from '../src/mediaTypes.js'; +import {getStorageManager} from '../src/storageManager.js'; +import {ajax} from '../src/ajax.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; + export const storage = getStorageManager({bidderCode: 'datablocks'}); const NATIVE_ID_MAP = {}; @@ -229,6 +230,7 @@ export const spec = { let scope = this; if (isGptPubadsDefined()) { if (typeof window['googletag'].pubads().addEventListener == 'function') { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 window['googletag'].pubads().addEventListener('impressionViewable', function(event) { scope.queue_metric({type: 'slot_view', source_id: scope.db_obj.source_id, auction_id: bid.auctionId, div_id: event.slot.getSlotElementId(), slot_id: event.slot.getSlotId().getAdUnitPath()}); }); @@ -400,7 +402,7 @@ export const spec = { method: 'POST', url: `https://${host}/openrtb/?sid=${sourceId}`, data: { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, imp: imps, site: site, device: device diff --git a/modules/datawrkzBidAdapter.js b/modules/datawrkzBidAdapter.js index 193a1723403..2cf28c36330 100644 --- a/modules/datawrkzBidAdapter.js +++ b/modules/datawrkzBidAdapter.js @@ -414,8 +414,6 @@ function buildBannerResponse(bidRequest, bidResponse) { } let bidSizes = (deepAccess(bidRequest, 'mediaTypes.banner.sizes')) ? deepAccess(bidRequest, 'mediaTypes.banner.sizes') : bidRequest.sizes; bidResponse.requestId = bidRequest.bidId; - bidResponse.auctionId = bidRequest.auctionId; - bidResponse.transactionId = bidRequest.transactionId; bidResponse.placementCode = placementCode; bidResponse.cpm = responseCPM; bidResponse.size = bidSizes; @@ -456,8 +454,6 @@ function buildNativeResponse(bidRequest, response) { return; } bidResponse.requestId = bidRequest.bidId; - bidResponse.auctionId = bidRequest.auctionId; - bidResponse.transactionId = bidRequest.transactionId; bidResponse.placementCode = placementCode; bidResponse.cpm = responseCPM; @@ -509,8 +505,6 @@ function buildVideoResponse(bidRequest, response) { let context = bidRequest.mediaTypes.video.context; bidResponse.requestId = bidRequest.bidId; - bidResponse.auctionId = bidRequest.auctionId; - bidResponse.transactionId = bidRequest.transactionId; bidResponse.placementCode = placementCode; bidResponse.cpm = responseCPM; diff --git a/modules/deltaprojectsBidAdapter.js b/modules/deltaprojectsBidAdapter.js index 92b8d29d209..c66e381b8f1 100644 --- a/modules/deltaprojectsBidAdapter.js +++ b/modules/deltaprojectsBidAdapter.js @@ -1,6 +1,15 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER} from '../src/mediaTypes.js'; -import {_each, _map, createTrackPixelHtml, deepAccess, isFn, isNumber, logError, logWarn} from '../src/utils.js'; +import { + _each, + _map, + createTrackPixelHtml, + deepAccess, + isFn, + isNumber, + logError, + logWarn +} from '../src/utils.js'; import {config} from '../src/config.js'; export const BIDDER_CODE = 'deltaprojects'; @@ -27,7 +36,7 @@ function isBidRequestValid(bid) { function buildRequests(validBidRequests, bidderRequest) { /** == shared ==**/ // -- build id - const id = bidderRequest.auctionId; + const id = bidderRequest.bidderRequestId; // -- build site const publisherId = setOnAny(validBidRequests, 'params.publisherId'); diff --git a/modules/dianomiBidAdapter.js b/modules/dianomiBidAdapter.js index f8f47df1239..d4b2a4a5da5 100644 --- a/modules/dianomiBidAdapter.js +++ b/modules/dianomiBidAdapter.js @@ -112,7 +112,7 @@ export const spec = { setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net'; - const tid = bidderRequest.auctionId; + const tid = bidderRequest.ortb2?.source?.tid; const currency = getConfig('currency.adServerCurrency'); const cur = currency && [currency]; const eids = setOnAny(validBidRequests, 'userIdAsEids'); diff --git a/modules/discoveryBidAdapter.js b/modules/discoveryBidAdapter.js index a0f864d529f..675ede273a6 100644 --- a/modules/discoveryBidAdapter.js +++ b/modules/discoveryBidAdapter.js @@ -301,6 +301,7 @@ function getParam(validBidRequests, bidderRequest) { if (items && items.length) { let c = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 id: 'pp_hbjs_' + auctionId, test: +isTest, at: 1, diff --git a/modules/dspxBidAdapter.js b/modules/dspxBidAdapter.js index 74a93ce086e..b8e812f581a 100644 --- a/modules/dspxBidAdapter.js +++ b/modules/dspxBidAdapter.js @@ -29,6 +29,7 @@ export const spec = { const referrer = bidderRequest.refererInfo.page; const bidId = bidRequest.bidId; const pbcode = bidRequest.adUnitCode || false; // div id + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 const auctionId = bidRequest.auctionId || false; const isDev = params.devMode || false; diff --git a/modules/etargetBidAdapter.js b/modules/etargetBidAdapter.js index b290a62420c..cced180e061 100644 --- a/modules/etargetBidAdapter.js +++ b/modules/etargetBidAdapter.js @@ -35,7 +35,7 @@ export const spec = { lastCountry = countryMap[bid.params.country]; } reqParams = bid.params; - reqParams.transactionId = bid.transactionId; + reqParams.transactionId = bid.ortb2Imp?.ext?.tid; request.push(formRequestUrl(reqParams)); floors[i] = getBidFloor(bid); } @@ -137,7 +137,6 @@ export const spec = { vastXml: data.vast_content, vastUrl: data.vast_link, mediaType: data.response, - transactionId: bid.transactionId }; if (bidRequest.gdpr) { bidObject.gdpr = bidRequest.gdpr.gdpr; diff --git a/modules/feedadBidAdapter.js b/modules/feedadBidAdapter.js index 34e14cd674a..7b41f0fcc03 100644 --- a/modules/feedadBidAdapter.js +++ b/modules/feedadBidAdapter.js @@ -234,7 +234,7 @@ function buildRequests(validBidRequests, bidderRequest) { }); data.bids.forEach(bid => BID_METADATA[bid.bidId] = { referer: data.refererInfo.page, - transactionId: bid.transactionId + transactionId: bid.ortb2Imp?.ext?.tid, }); if (bidderRequest.gdprConsent) { data.consentIabTcf = bidderRequest.gdprConsent.consentString; diff --git a/modules/finativeBidAdapter.js b/modules/finativeBidAdapter.js index ea7d1281872..87580a209bb 100644 --- a/modules/finativeBidAdapter.js +++ b/modules/finativeBidAdapter.js @@ -1,11 +1,11 @@ // jshint esversion: 6, es3: false, node: true 'use strict'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { NATIVE } from '../src/mediaTypes.js'; -import { _map, deepSetValue, isEmpty, deepAccess } from '../src/utils.js'; -import { config } from '../src/config.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {NATIVE} from '../src/mediaTypes.js'; +import {_map, deepAccess, deepSetValue, isEmpty} from '../src/utils.js'; +import {config} from '../src/config.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; const BIDDER_CODE = 'finative'; const DEFAULT_CUR = 'EUR'; @@ -63,7 +63,7 @@ export const spec = { // convert Native ORTB definition to old-style prebid native definition validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests); const pt = setOnAny(validBidRequests, 'params.pt') || setOnAny(validBidRequests, 'params.priceType') || 'net'; - const tid = bidderRequest.auctionId; + const tid = bidderRequest.ortb2?.source?.tid; const cur = [config.getConfig('currency.adServerCurrency') || DEFAULT_CUR]; let url = bidderRequest.refererInfo.referer; @@ -104,6 +104,7 @@ export const spec = { return { id: String(id + 1), tagid: bid.params.adUnitId, + // TODO: `tid` is not under `imp` in ORTB, is this intentional? tid: tid, pt: pt, native: { @@ -115,7 +116,7 @@ export const spec = { }); const request = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, site: { page: url }, diff --git a/modules/fluctBidAdapter.js b/modules/fluctBidAdapter.js index 9286898b44e..edb750a6b90 100644 --- a/modules/fluctBidAdapter.js +++ b/modules/fluctBidAdapter.js @@ -48,7 +48,7 @@ export const spec = { data.page = page; data.adUnitCode = request.adUnitCode; data.bidId = request.bidId; - data.transactionId = request.transactionId; + data.transactionId = request.ortb2Imp?.ext?.tid; data.user = { eids: (request.userIdAsEids || []).filter((eid) => SUPPORTED_USER_ID_SOURCES.indexOf(eid.source) !== -1) }; diff --git a/modules/gamoshiBidAdapter.js b/modules/gamoshiBidAdapter.js index ae320db1251..1c279cdb9b8 100644 --- a/modules/gamoshiBidAdapter.js +++ b/modules/gamoshiBidAdapter.js @@ -80,11 +80,11 @@ export const spec = { buildRequests: function (validBidRequests, bidderRequest) { return validBidRequests.map(bidRequest => { - const {adUnitCode, auctionId, mediaTypes, params, sizes, transactionId} = bidRequest; + const {adUnitCode, mediaTypes, params, sizes, bidId} = bidRequest; const baseEndpoint = params['rtbEndpoint'] || ENDPOINTS['gamoshi']; const rtbEndpoint = `${baseEndpoint}/r/${params.supplyPartnerId}/bidr?rformat=open_rtb&reqformat=rtb_json&bidder=prebid` + (params.query ? '&' + params.query : ''); const rtbBidRequest = { - id: auctionId, + id: bidderRequest.bidderRequestId, site: { domain: bidderRequest.refererInfo.domain, page: bidderRequest.refererInfo.page, @@ -118,7 +118,7 @@ export const spec = { } const imp = { - id: transactionId, + id: bidId, instl: deepAccess(bidderRequest.ortb2Imp, 'instl') === 1 || params.instl === 1 ? 1 : 0, tagid: adUnitCode, bidfloor: helper.getBidFloor(bidRequest) || 0, diff --git a/modules/glomexBidAdapter.js b/modules/glomexBidAdapter.js index 5c9b3c1fa28..10f5593940e 100644 --- a/modules/glomexBidAdapter.js +++ b/modules/glomexBidAdapter.js @@ -26,6 +26,7 @@ export const spec = { method: 'POST', url: `${ENDPOINT}`, data: { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidderRequest.auctionId, refererInfo: { // TODO: this collects everything it finds, except for canonicalUrl diff --git a/modules/gmosspBidAdapter.js b/modules/gmosspBidAdapter.js index 9bc1a15b60b..8c90d0cccfe 100644 --- a/modules/gmosspBidAdapter.js +++ b/modules/gmosspBidAdapter.js @@ -47,7 +47,7 @@ export const spec = { let queryString = ''; const request = validBidRequests[i]; - const tid = request.transactionId; + const tid = request.ortb2Imp?.ext?.tid; const bid = request.bidId; const imuid = deepAccess(request, 'userId.imuid'); const sharedId = deepAccess(request, 'userId.pubcid'); diff --git a/modules/gnetBidAdapter.js b/modules/gnetBidAdapter.js index 0b02a29c0d4..38e96c183b9 100644 --- a/modules/gnetBidAdapter.js +++ b/modules/gnetBidAdapter.js @@ -39,7 +39,7 @@ export const spec = { data.referer = referer; data.adUnitCode = request.adUnitCode; data.bidId = request.bidId; - data.transactionId = request.transactionId; + data.transactionId = request.ortb2Imp?.ext?.tid; data.gftuid = _getCookie(); data.sizes = parseSizesInput(request.sizes); diff --git a/modules/goldbachBidAdapter.js b/modules/goldbachBidAdapter.js index 471586ae795..363adccc01c 100644 --- a/modules/goldbachBidAdapter.js +++ b/modules/goldbachBidAdapter.js @@ -901,6 +901,7 @@ function bidToTag(bid) { tag['banner_frameworks'] = bid.params.frameworks; } + // TODO: why does this need to iterate through every ad unit? let adUnit = find(auctionManager.getAdUnits(), au => bid.transactionId === au.transactionId); if (adUnit && adUnit.mediaTypes && adUnit.mediaTypes.banner) { tag.ad_types.push(BANNER); diff --git a/modules/gothamadsBidAdapter.js b/modules/gothamadsBidAdapter.js index 4e3d9e190c4..9f44a54460f 100644 --- a/modules/gothamadsBidAdapter.js +++ b/modules/gothamadsBidAdapter.js @@ -104,7 +104,7 @@ export const spec = { host: location.host }, source: { - tid: bidRequest.auctionId + tid: bidderRequest?.ortb2?.source?.tid, }, regs: { coppa: config.getConfig('coppa') === true ? 1 : 0, @@ -224,7 +224,7 @@ const parseNative = admObject => { const prepareImpObject = (bidRequest) => { let impObject = { - id: bidRequest.transactionId, + id: bidRequest.bidId, secure: 1, ext: { placementId: bidRequest.params.placementId @@ -247,7 +247,8 @@ const prepareImpObject = (bidRequest) => { const addNativeParameters = bidRequest => { let impObject = { - id: bidRequest.transactionId, + // TODO: this is not an "impObject", and `id` is not part of the ORTB native spec + id: bidRequest.bidId, ver: NATIVE_VERSION, }; diff --git a/modules/gridBidAdapter.js b/modules/gridBidAdapter.js index 130eac9512d..60ae9dbc3a0 100644 --- a/modules/gridBidAdapter.js +++ b/modules/gridBidAdapter.js @@ -98,7 +98,7 @@ export const spec = { let userExt = null; let endpoint = null; let forceBidderName = false; - let {bidderRequestId, auctionId, gdprConsent, uspConsent, timeout, refererInfo, gppConsent} = bidderRequest || {}; + let {bidderRequestId, gdprConsent, uspConsent, timeout, refererInfo, gppConsent} = bidderRequest || {}; const referer = refererInfo ? encodeURIComponent(refererInfo.page) : ''; const tmax = timeout; @@ -122,9 +122,6 @@ export const spec = { if (!bidderRequestId) { bidderRequestId = bid.bidderRequestId; } - if (!auctionId) { - auctionId = bid.auctionId; - } if (!schain) { schain = bid.schain; } @@ -196,7 +193,7 @@ export const spec = { if (impObj.banner || impObj.video) { if (multiRequest) { const reqSource = { - tid: bid.auctionId && bid.auctionId.toString(), + tid: bidderRequest?.ortb2?.source?.tid?.toString?.(), ext: { wrapper: 'Prebid_js', wrapper_version: '$prebid.version$' @@ -247,7 +244,7 @@ export const spec = { } const reqSource = { - tid: auctionId && auctionId.toString(), + tid: bidderRequest?.ortb2?.source?.tid?.toString?.(), ext: { wrapper: 'Prebid_js', wrapper_version: '$prebid.version$' @@ -949,7 +946,8 @@ function buildCdbRequest(context, bidRequests, bidderRequest) { schain = bidRequest.schain || schain; const slot = { impid: bidRequest.adUnitCode, - transactionid: bidRequest.transactionId, + transactionid: bidRequest.ortb2Imp?.ext?.tid, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidRequest.auctionId, }; if (bidRequest.params.zoneId) { diff --git a/modules/gumgumBidAdapter.js b/modules/gumgumBidAdapter.js index fdd3030bb7a..d050af4ac8f 100644 --- a/modules/gumgumBidAdapter.js +++ b/modules/gumgumBidAdapter.js @@ -293,7 +293,6 @@ function buildRequests(validBidRequests, bidderRequest) { mediaTypes = {}, params = {}, schain, - transactionId, userId = {}, ortb2Imp, adUnitCode = '' @@ -404,7 +403,7 @@ function buildRequests(validBidRequests, bidderRequest) { bids.push({ id: bidId, tmax: timeout, - tId: transactionId, + tId: ortb2Imp?.ext?.tid, pi: data.pi, selector: params.selector, sizes, diff --git a/modules/h12mediaBidAdapter.js b/modules/h12mediaBidAdapter.js index c58f15c9a81..7b1ba9ee286 100644 --- a/modules/h12mediaBidAdapter.js +++ b/modules/h12mediaBidAdapter.js @@ -41,7 +41,7 @@ export const spec = { const bidrequest = { bidId: bidRequest.bidId, - transactionId: bidRequest.transactionId, + transactionId: bidRequest.ortb2Imp?.ext?.tid, adunitId: bidRequest.adUnitCode, pubid: bidderParams.pubid, placementid: bidderParams.placementid || '', diff --git a/modules/holidBidAdapter.js b/modules/holidBidAdapter.js index 92b0a1c18db..f41829bd123 100644 --- a/modules/holidBidAdapter.js +++ b/modules/holidBidAdapter.js @@ -1,15 +1,9 @@ -import { - deepAccess, - getBidIdParameter, - isStr, - logMessage, - triggerPixel, -} from '../src/utils.js' -import * as events from '../src/events.js' -import CONSTANTS from '../src/constants.json' -import { BANNER } from '../src/mediaTypes.js' - -import { registerBidder } from '../src/adapters/bidderFactory.js' +import {deepAccess, getBidIdParameter, isStr, logMessage, triggerPixel, } from '../src/utils.js'; +import * as events from '../src/events.js'; +import CONSTANTS from '../src/constants.json'; +import {BANNER} from '../src/mediaTypes.js'; + +import {registerBidder} from '../src/adapters/bidderFactory.js'; const BIDDER_CODE = 'holid' const GVLID = 1177 @@ -33,7 +27,7 @@ export const spec = { return validBidRequests.map((bid) => { const requestData = { ...bid.ortb2, - id: bid.auctionId, + id: _bidderRequest.bidderRequestId, imp: [getImp(bid)], } @@ -56,6 +50,7 @@ export const spec = { serverResponse.body.seatbid.map((response) => { response.bid.map((bid) => { const requestId = bidRequest.bidId + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 const auctionId = bidRequest.auctionId const wurl = deepAccess(bid, 'ext.prebid.events.win') const bidResponse = { diff --git a/modules/hybridBidAdapter.js b/modules/hybridBidAdapter.js index 6cedb094444..f746e69cbba 100644 --- a/modules/hybridBidAdapter.js +++ b/modules/hybridBidAdapter.js @@ -25,7 +25,7 @@ function buildBidRequests(validBidRequests) { const params = validBidRequest.params; const bidRequest = { bidId: validBidRequest.bidId, - transactionId: validBidRequest.transactionId, + transactionId: validBidRequest.ortb2Imp?.ext?.tid, sizes: validBidRequest.sizes, placement: placementTypes[params.placement], placeId: params.placeId, @@ -88,6 +88,7 @@ function buildBid(bidData) { bid.vastXml = bidData.content; bid.mediaType = VIDEO; + // TODO: why does this need to iterate through every ad unit? let adUnit = find(auctionManager.getAdUnits(), function (unit) { return unit.transactionId === bidData.transactionId; }); @@ -244,7 +245,6 @@ export const spec = { return item.bidId === bid.bidId; }); bid.placement = rawBid.placement; - bid.transactionId = rawBid.transactionId; bid.placeId = rawBid.placeId; return buildBid(bid); }); diff --git a/modules/imdsBidAdapter.js b/modules/imdsBidAdapter.js index 141c4d125a7..545a0bd1ac3 100644 --- a/modules/imdsBidAdapter.js +++ b/modules/imdsBidAdapter.js @@ -39,7 +39,7 @@ export const spec = { } const refererInfo = bidderRequest.refererInfo; const openRtbBidRequest = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, site: { // TODO: does the fallback make sense here? domain: refererInfo.domain || location.hostname, diff --git a/modules/impactifyBidAdapter.js b/modules/impactifyBidAdapter.js index d35d4498136..f2bf9aaddcb 100644 --- a/modules/impactifyBidAdapter.js +++ b/modules/impactifyBidAdapter.js @@ -1,7 +1,7 @@ -import { deepAccess, deepSetValue, generateUUID } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { config } from '../src/config.js'; -import { ajax } from '../src/ajax.js'; +import {deepAccess, deepSetValue, generateUUID} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {config} from '../src/config.js'; +import {ajax} from '../src/ajax.js'; const BIDDER_CODE = 'impactify'; const BIDDER_ALIAS = ['imp']; @@ -41,11 +41,11 @@ const getFloor = (bid) => { const createOpenRtbRequest = (validBidRequests, bidderRequest) => { // Create request and set imp bids inside let request = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, validBidRequests, cur: [DEFAULT_CURRENCY], imp: [], - source: {tid: bidderRequest.auctionId} + source: {tid: bidderRequest.ortb2?.source?.tid} }; // Get the url parameters diff --git a/modules/improvedigitalBidAdapter.js b/modules/improvedigitalBidAdapter.js index 24f3b2328b7..b56cc56a186 100644 --- a/modules/improvedigitalBidAdapter.js +++ b/modules/improvedigitalBidAdapter.js @@ -150,8 +150,7 @@ export const CONVERTER = ortbConverter({ mergeDeep(request, { id: getUniqueIdentifierStr(), source: { - // TODO: once https://github.com/prebid/Prebid.js/issues/8573 is resolved, this should be handled by the base ortbConverter logic - tid: context.bidRequests[0].auctionId, + }, ext: { improvedigital: { diff --git a/modules/innityBidAdapter.js b/modules/innityBidAdapter.js index 71fe588441c..99eec210193 100644 --- a/modules/innityBidAdapter.js +++ b/modules/innityBidAdapter.js @@ -30,6 +30,7 @@ export const spec = { vph: window.screen.height, callback: 'json', callback_uid: bidRequest.bidId, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auction: bidRequest.auctionId, }, }; diff --git a/modules/insticatorBidAdapter.js b/modules/insticatorBidAdapter.js index 46ff17d2a5a..c770ac69dbe 100644 --- a/modules/insticatorBidAdapter.js +++ b/modules/insticatorBidAdapter.js @@ -176,7 +176,7 @@ function buildRequest(validBidRequests, bidderRequest) { tmax: bidderRequest.timeout, source: { fd: 1, - tid: bidderRequest.auctionId, + tid: bidderRequest.ortb2?.source?.tid, }, site: { // TODO: are these the right refererInfo values? diff --git a/modules/interactiveOffersBidAdapter.js b/modules/interactiveOffersBidAdapter.js index 1fad231dff2..feb576fbb02 100644 --- a/modules/interactiveOffersBidAdapter.js +++ b/modules/interactiveOffersBidAdapter.js @@ -49,7 +49,7 @@ export const spec = { return ret; }, buildRequests: function(validBidRequests, bidderRequest) { - let aux = parseRequestPrebidjsToOpenRTB(bidderRequest); + let aux = parseRequestPrebidjsToOpenRTB(bidderRequest, bidderRequest); let payload = aux.payload; return { method: 'POST', @@ -71,7 +71,7 @@ export const spec = { } }; -function parseRequestPrebidjsToOpenRTB(prebidRequest) { +function parseRequestPrebidjsToOpenRTB(prebidRequest, bidderRequest) { let ret = { payload: {}, partnerId: null @@ -81,10 +81,11 @@ function parseRequestPrebidjsToOpenRTB(prebidRequest) { let domain = window.location.hostname; let secure = (window.location.protocol == 'https:' ? 1 : 0); let openRTBRequest = JSON.parse(JSON.stringify(DEFAULT['OpenRTBBidRequest'])); - openRTBRequest.id = prebidRequest.auctionId; + openRTBRequest.id = bidderRequest.bidderRequestId; openRTBRequest.ext = { // TODO: please do not send internal data structures over the network refererInfo: prebidRequest.refererInfo.legacy, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: prebidRequest.auctionId }; @@ -105,7 +106,7 @@ function parseRequestPrebidjsToOpenRTB(prebidRequest) { openRTBRequest.source = JSON.parse(JSON.stringify(DEFAULT['OpenRTBBidRequestSource'])); openRTBRequest.source.fd = 0; - openRTBRequest.source.tid = prebidRequest.auctionId; + openRTBRequest.source.tid = prebidRequest.ortb2?.source?.tid; openRTBRequest.source.pchain = ''; openRTBRequest.device = JSON.parse(JSON.stringify(DEFAULT['OpenRTBBidRequestDevice'])); diff --git a/modules/iqmBidAdapter.js b/modules/iqmBidAdapter.js index 51cd8b3bdca..c3808afd225 100644 --- a/modules/iqmBidAdapter.js +++ b/modules/iqmBidAdapter.js @@ -111,6 +111,7 @@ export const spec = { device: device, site: site, imp: imp, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bid.auctionId, adUnitCode: bid.adUnitCode, bidderRequestId: bid.bidderRequestId, diff --git a/modules/ixBidAdapter.js b/modules/ixBidAdapter.js index 505c5cb5b25..ec2b0fff559 100644 --- a/modules/ixBidAdapter.js +++ b/modules/ixBidAdapter.js @@ -638,6 +638,7 @@ function buildRequest(validBidRequests, bidderRequest, impressions, version) { siteID = validBidRequests[0].params.siteId; payload.s = siteID; + // TODO: this logic should stop relying on `transactionId` always being available; see: https://github.com/prebid/Prebid.js/issues/9781 const transactionIds = Object.keys(impressions); let isFpdAdded = false; @@ -776,7 +777,7 @@ function enrichRequest(r, bidderRequest, impressions, validBidRequests, userEids // set source.tid to auctionId for outgoing request to Exchange. r.source = { - tid: validBidRequests[0].auctionId, + tid: bidderRequest?.ortb2?.source?.tid } // if an schain is provided, send it along diff --git a/modules/jixieBidAdapter.js b/modules/jixieBidAdapter.js index 586fce84804..b587011c748 100644 --- a/modules/jixieBidAdapter.js +++ b/modules/jixieBidAdapter.js @@ -201,6 +201,7 @@ export const spec = { } let transformedParams = Object.assign({}, { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionid: bidderRequest.auctionId, timeout: bidderRequest.timeout, currency: currency, diff --git a/modules/kargoBidAdapter.js b/modules/kargoBidAdapter.js index b612c88bb12..806af3311b0 100644 --- a/modules/kargoBidAdapter.js +++ b/modules/kargoBidAdapter.js @@ -82,6 +82,7 @@ function buildRequests(validBidRequests, bidderRequest) { const krakenParams = Object.assign({}, { pbv: PREBID_VERSION, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 aid: firstBidRequest.auctionId, sid: _getSessionId(), url: metadata.pageURL, @@ -438,7 +439,7 @@ function sendTimeoutData(auctionId, auctionTimeout) { function getImpression(bid) { const imp = { id: bid.bidId, - tid: bid.transactionId, + tid: bid.ortb2Imp?.ext?.tid, pid: bid.params.placementId, code: bid.adUnitCode }; diff --git a/modules/koblerBidAdapter.js b/modules/koblerBidAdapter.js index 4eef99024f9..596e5b2695f 100644 --- a/modules/koblerBidAdapter.js +++ b/modules/koblerBidAdapter.js @@ -90,6 +90,7 @@ export const onTimeout = function (timeoutDataArray) { timeoutDataArray.forEach(timeoutData => { const query = parseQueryStringParameters({ ad_unit_code: timeoutData.adUnitCode, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auction_id: timeoutData.auctionId, bid_id: timeoutData.bidId, timeout: timeoutData.timeout, @@ -126,7 +127,7 @@ function buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest) { const timeout = bidderRequest.timeout; const pageUrl = getPageUrlFromRequest(validBidRequests[0], bidderRequest) const request = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, at: 1, tmax: timeout, cur: [SUPPORTED_CURRENCY], diff --git a/modules/kueezBidAdapter.js b/modules/kueezBidAdapter.js index 6efb67ddec8..0a868661310 100644 --- a/modules/kueezBidAdapter.js +++ b/modules/kueezBidAdapter.js @@ -249,7 +249,7 @@ function generateBidParameters(bid, bidderRequest) { floorPrice: Math.max(getFloorPrice(bid, mediaType), paramsFloorPrice), mediaType, sizes: sizesArray, - transactionId: getBidIdParameter('transactionId', bid) + transactionId: bid.ortb2Imp?.ext?.tid || '' }; if (pos) { diff --git a/modules/kueezRtbBidAdapter.js b/modules/kueezRtbBidAdapter.js index 02d98064ca2..bb0534d6372 100644 --- a/modules/kueezRtbBidAdapter.js +++ b/modules/kueezRtbBidAdapter.js @@ -96,6 +96,7 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) { schain: schain, mediaTypes: mediaTypes, gpid: gpid, + // TODO: fix auctionId/transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: auctionId, transactionId: transactionId, bidderRequestId: bidderRequestId, diff --git a/modules/kulturemediaBidAdapter.js b/modules/kulturemediaBidAdapter.js index ef0f41536a9..fb3f6e4e231 100644 --- a/modules/kulturemediaBidAdapter.js +++ b/modules/kulturemediaBidAdapter.js @@ -1,13 +1,14 @@ import { - deepSetValue, - logInfo, deepAccess, - logError, + deepSetValue, + isArray, isFn, + isNumber, isPlainObject, isStr, - isNumber, - isArray, logMessage + logError, + logInfo, + logMessage } from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; @@ -423,7 +424,7 @@ function buildBannerRequestData(bidRequests, bidderRequest) { })); const openrtbRequest = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, imp: impr, site: { domain: bidderRequest.refererInfo?.domain, diff --git a/modules/lassoBidAdapter.js b/modules/lassoBidAdapter.js index ad25cbe1e85..e1f9636e4f1 100644 --- a/modules/lassoBidAdapter.js +++ b/modules/lassoBidAdapter.js @@ -37,9 +37,10 @@ export const spec = { url: encodeURIComponent(window.location.href), bidderRequestId: bidRequest.bidderRequestId, adUnitCode: bidRequest.adUnitCode, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidRequest.auctionId, bidId: bidRequest.bidId, - transactionId: bidRequest.transactionId, + transactionId: bidRequest.ortb2Imp?.ext?.tid, device: encodeURIComponent(JSON.stringify(getDeviceData())), sizes, aimXR, diff --git a/modules/limelightDigitalBidAdapter.js b/modules/limelightDigitalBidAdapter.js index 601d78578b3..c7fbc13a8e1 100644 --- a/modules/limelightDigitalBidAdapter.js +++ b/modules/limelightDigitalBidAdapter.js @@ -148,7 +148,7 @@ function buildPlacement(bidRequest) { adUnit: { id: bidRequest.params.adUnitId, bidId: bidRequest.bidId, - transactionId: bidRequest.transactionId, + transactionId: bidRequest.ortb2Imp?.ext?.tid, sizes: sizes.map(size => { return { width: size[0], diff --git a/modules/livewrappedBidAdapter.js b/modules/livewrappedBidAdapter.js index 4742b4113b5..82affe40e03 100644 --- a/modules/livewrappedBidAdapter.js +++ b/modules/livewrappedBidAdapter.js @@ -77,6 +77,7 @@ export const spec = { } const payload = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: auctionId ? auctionId.auctionId : undefined, publisherId: publisherId ? publisherId.params.publisherId : undefined, userId: userId ? userId.params.userId : (pubcid ? pubcid.crumbs.pubcid : undefined), @@ -230,7 +231,7 @@ function bidToAdRequest(bid, currency) { adUnitId: bid.params.adUnitId, callerAdUnitId: bid.params.adUnitName || bid.adUnitCode || bid.placementCode, bidId: bid.bidId, - transactionId: bid.transactionId, + transactionId: bid.ortb2Imp?.ext?.tid, formats: getSizes(bid).map(sizeToFormat), flr: getBidFloor(bid, currency), options: bid.params.options diff --git a/modules/logicadBidAdapter.js b/modules/logicadBidAdapter.js index 034450c447f..a50af601ae1 100644 --- a/modules/logicadBidAdapter.js +++ b/modules/logicadBidAdapter.js @@ -53,12 +53,13 @@ export const spec = { function newBidRequest(bid, bidderRequest) { return { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bid.auctionId, bidderRequestId: bid.bidderRequestId, bids: [{ adUnitCode: bid.adUnitCode, bidId: bid.bidId, - transactionId: bid.transactionId, + transactionId: bid.ortb2Imp?.ext?.tid, sizes: bid.sizes, params: bid.params, mediaTypes: bid.mediaTypes diff --git a/modules/loglyliftBidAdapter.js b/modules/loglyliftBidAdapter.js index 47f6e54485d..7cd76bb719d 100644 --- a/modules/loglyliftBidAdapter.js +++ b/modules/loglyliftBidAdapter.js @@ -64,9 +64,10 @@ function newBidRequest(bid, bidderRequest) { const currency = (currencyObj && currencyObj.adServerCurrency) || 'USD'; return { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bid.auctionId, bidderRequestId: bid.bidderRequestId, - transactionId: bid.transactionId, + transactionId: bid.ortb2Imp?.ext?.tid, adUnitCode: bid.adUnitCode, bidId: bid.bidId, mediaTypes: bid.mediaTypes, diff --git a/modules/luponmediaBidAdapter.js b/modules/luponmediaBidAdapter.js index 0a4887c007d..20fa601bade 100755 --- a/modules/luponmediaBidAdapter.js +++ b/modules/luponmediaBidAdapter.js @@ -1,8 +1,20 @@ -import {isArray, logMessage, deepAccess, logWarn, parseSizesInput, deepSetValue, generateUUID, isEmpty, logError, _each, isFn} from '../src/utils.js'; +import { + _each, + deepAccess, + deepSetValue, + generateUUID, + isArray, + isEmpty, + isFn, + logError, + logMessage, + logWarn, + parseSizesInput +} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {config} from '../src/config.js'; import {BANNER} from '../src/mediaTypes.js'; -import { ajax } from '../src/ajax.js'; +import {ajax} from '../src/ajax.js'; const BIDDER_CODE = 'luponmedia'; const ENDPOINT_URL = 'https://rtb.adxpremium.services/openrtb2/auction'; @@ -287,10 +299,10 @@ function newOrtbBidRequest(bidRequest, bidderRequest, currentImps) { } const data = { - id: bidRequest.transactionId, + id: bidderRequest.bidderRequestId, test: config.getConfig('debug') ? 1 : 0, source: { - tid: bidRequest.auctionId + tid: bidderRequest.ortb2?.source?.tid, }, tmax: bidderRequest.timeout, imp: currentImps.concat([{ diff --git a/modules/malltvBidAdapter.js b/modules/malltvBidAdapter.js index cee8e888986..5ac50936ed6 100644 --- a/modules/malltvBidAdapter.js +++ b/modules/malltvBidAdapter.js @@ -68,6 +68,7 @@ export const spec = { }); let body = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: auctionId, propertyId: propertyId, pageViewGuid: pageViewGuid, diff --git a/modules/mediaforceBidAdapter.js b/modules/mediaforceBidAdapter.js index 744cf89d655..3d33bbf8c12 100644 --- a/modules/mediaforceBidAdapter.js +++ b/modules/mediaforceBidAdapter.js @@ -137,7 +137,7 @@ export const spec = { bidfloor: bidfloor, ext: { mediaforce: { - transactionId: bid.transactionId + transactionId: bid.ortb2Imp?.ext?.tid, } } @@ -177,6 +177,7 @@ export const spec = { }, ext: { mediaforce: { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 hb_key: auctionId } }, diff --git a/modules/mediafuseBidAdapter.js b/modules/mediafuseBidAdapter.js index 9995f957743..f13c3cf25f9 100644 --- a/modules/mediafuseBidAdapter.js +++ b/modules/mediafuseBidAdapter.js @@ -868,6 +868,7 @@ function bidToTag(bid) { tag['banner_frameworks'] = bid.params.frameworks; } + // TODO: why does this need to iterate through every ad unit? let adUnit = find(auctionManager.getAdUnits(), au => bid.transactionId === au.transactionId); if (adUnit && adUnit.mediaTypes && adUnit.mediaTypes.banner) { tag.ad_types.push(BANNER); diff --git a/modules/mediagoBidAdapter.js b/modules/mediagoBidAdapter.js index df768cebb92..055fef3bb39 100644 --- a/modules/mediagoBidAdapter.js +++ b/modules/mediagoBidAdapter.js @@ -285,6 +285,7 @@ function getParam(validBidRequests, bidderRequest) { if (items && items.length) { let c = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 id: 'mgprebidjs_' + auctionId, test: +isTest, at: 1, diff --git a/modules/mediakeysBidAdapter.js b/modules/mediakeysBidAdapter.js index de86bfa248f..7af43a3c549 100644 --- a/modules/mediakeysBidAdapter.js +++ b/modules/mediakeysBidAdapter.js @@ -20,7 +20,7 @@ import { import {registerBidder} from '../src/adapters/bidderFactory.js'; import {config} from '../src/config.js'; import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; const AUCTION_TYPE = 1; const BIDDER_CODE = 'mediakeys'; @@ -606,10 +606,8 @@ export const spec = { const payload = createOrtbTemplate(); - // Pass the auctionId as ortb2 id - // See https://github.com/prebid/Prebid.js/issues/6563 - deepSetValue(payload, 'id', bidderRequest.auctionId); - deepSetValue(payload, 'source.tid', bidderRequest.auctionId); + deepSetValue(payload, 'id', bidderRequest.bidderRequestId); + deepSetValue(payload, 'source.tid', bidderRequest.ortb2.source?.tid); validBidRequests.forEach(validBid => { let bid = deepClone(validBid); diff --git a/modules/medianetBidAdapter.js b/modules/medianetBidAdapter.js index c398d8fd5db..b9e00f45df9 100644 --- a/modules/medianetBidAdapter.js +++ b/modules/medianetBidAdapter.js @@ -195,7 +195,7 @@ function slotParams(bidRequest) { // check with Media.net Account manager for bid floor and crid parameters let params = { id: bidRequest.bidId, - transactionId: bidRequest.transactionId, + transactionId: bidRequest.ortb2Imp?.ext?.tid, ext: { dfp_id: bidRequest.adUnitCode, display_count: bidRequest.bidRequestsCount @@ -331,6 +331,7 @@ function generatePayload(bidRequests, bidderRequests) { return { site: siteDetails(bidRequests[0].params.site, bidderRequests), ext: extParams(bidRequests[0], bidderRequests), + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 id: bidRequests[0].auctionId, imp: bidRequests.map(request => slotParams(request)), ortb2: bidderRequests.ortb2, diff --git a/modules/mediasniperBidAdapter.js b/modules/mediasniperBidAdapter.js index 71fd270cf8e..378a804487a 100644 --- a/modules/mediasniperBidAdapter.js +++ b/modules/mediasniperBidAdapter.js @@ -59,7 +59,7 @@ export const spec = { buildRequests: function (validBidRequests, bidderRequest) { const payload = createOrtbTemplate(); - deepSetValue(payload, 'id', bidderRequest.auctionId); + deepSetValue(payload, 'id', bidderRequest.bidderRequestId); validBidRequests.forEach((validBid) => { let bid = deepClone(validBid); diff --git a/modules/mediasquareBidAdapter.js b/modules/mediasquareBidAdapter.js index 4076cd6927a..274cbadca06 100644 --- a/modules/mediasquareBidAdapter.js +++ b/modules/mediasquareBidAdapter.js @@ -59,8 +59,9 @@ export const spec = { code: adunitValue.params.code, adunit: adunitValue.adUnitCode, bidId: adunitValue.bidId, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: adunitValue.auctionId, - transactionId: adunitValue.transactionId, + transactionId: adunitValue.ortb2Imp?.ext?.tid, mediatypes: adunitValue.mediaTypes, floor: floor }); diff --git a/modules/microadBidAdapter.js b/modules/microadBidAdapter.js index 13aea0f3f77..d05bc5e3245 100644 --- a/modules/microadBidAdapter.js +++ b/modules/microadBidAdapter.js @@ -73,7 +73,7 @@ export const spec = { url: bidderRequest.refererInfo.page || window.location.href, referrer: bidderRequest.refererInfo.ref, bid_id: bid.bidId, - transaction_id: bid.transactionId, + transaction_id: bid.ortb2Imp?.ext?.tid, media_types: convertMediaTypes(bid), cbt: createCBT() }; diff --git a/modules/minutemediaBidAdapter.js b/modules/minutemediaBidAdapter.js index c19ebbda311..6bf6d5ad863 100644 --- a/modules/minutemediaBidAdapter.js +++ b/modules/minutemediaBidAdapter.js @@ -288,7 +288,7 @@ function generateBidParameters(bid, bidderRequest) { bidId: getBidIdParameter('bidId', bid), loop: getBidIdParameter('bidderRequestsCount', bid), bidderRequestId: getBidIdParameter('bidderRequestId', bid), - transactionId: getBidIdParameter('transactionId', bid), + transactionId: bid.ortb2Imp?.ext?.tid || '', coppa: 0 }; @@ -388,6 +388,7 @@ function generateGeneralParams(generalObject, bidderRequest) { dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0, device_type: getDeviceType(navigator.userAgent), ua: navigator.userAgent, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 session_id: getBidIdParameter('auctionId', generalObject), tmax: timeout } diff --git a/modules/minutemediaplusBidAdapter.js b/modules/minutemediaplusBidAdapter.js index 7e76e1b6a17..33f3634e17f 100644 --- a/modules/minutemediaplusBidAdapter.js +++ b/modules/minutemediaplusBidAdapter.js @@ -53,7 +53,7 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) { schain, mediaTypes, auctionId, - transactionId, + ortb2Imp, bidderRequestId, bidRequestsCount, bidderRequestsCount, @@ -97,8 +97,9 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) { schain: schain, mediaTypes: mediaTypes, gpid: gpid, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: auctionId, - transactionId: transactionId, + transactionId: ortb2Imp?.ext?.tid, bidderRequestId: bidderRequestId, bidRequestsCount: bidRequestsCount, bidderRequestsCount: bidderRequestsCount, diff --git a/modules/newspassidBidAdapter.js b/modules/newspassidBidAdapter.js index ec28a625599..b440edc2beb 100644 --- a/modules/newspassidBidAdapter.js +++ b/modules/newspassidBidAdapter.js @@ -1,9 +1,10 @@ -import { logInfo, logError, deepAccess, logWarn, deepSetValue, isArray, contains, parseUrl } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER, NATIVE } from '../src/mediaTypes.js'; +import {contains, deepAccess, deepSetValue, isArray, logError, logInfo, logWarn, parseUrl} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, NATIVE} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; import {getPriceBucketString} from '../src/cpmBucketManager.js'; import {getRefererInfo} from '../src/refererDetection.js'; + const BIDDER_CODE = 'newspassid'; const ORIGIN = 'https://bidder.newspassid.com' // applies only to auction & cookie const AUCTIONURI = '/openrtb2/auction'; @@ -258,6 +259,7 @@ export const spec = { } if (singleRequest) { logInfo('buildRequests starting to generate response for a single request'); + // TODO: fix auctionId & transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 npRequest.id = bidderRequest.auctionId; // Unique ID of the bid request, provided by the exchange. npRequest.auctionId = bidderRequest.auctionId; // not sure if this should be here? npRequest.imp = tosendtags; diff --git a/modules/nextMillenniumBidAdapter.js b/modules/nextMillenniumBidAdapter.js index 89c6e677007..cb660ad9fd6 100644 --- a/modules/nextMillenniumBidAdapter.js +++ b/modules/nextMillenniumBidAdapter.js @@ -1,25 +1,25 @@ import { - isArray, _each, createTrackPixelHtml, deepAccess, - isStr, - getWindowTop, getBidIdParameter, + getDefinedParams, + getWindowTop, + isArray, + isStr, logMessage, + parseGPTSingleSizeArrayToRtbSize, parseUrl, triggerPixel, - getDefinedParams, - parseGPTSingleSizeArrayToRtbSize, } from '../src/utils.js'; import CONSTANTS from '../src/constants.json'; -import { BANNER, VIDEO } from '../src/mediaTypes.js'; +import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; import * as events from '../src/events.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { getRefererInfo } from '../src/refererDetection.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {getRefererInfo} from '../src/refererDetection.js'; const BIDDER_CODE = 'nextMillennium'; const ENDPOINT = 'https://pbs.nextmillmedia.com/openrtb2/auction'; @@ -69,7 +69,7 @@ export const spec = { const device = getDeviceObj(); const postBody = { - 'id': bid.auctionId, + 'id': bidderRequest?.bidderRequestId, 'ext': { 'prebid': { 'storedrequest': { @@ -174,6 +174,7 @@ export const spec = { const params = bidRequest.params; const auctionId = bidRequest.auctionId; const wurl = deepAccess(bid, 'ext.prebid.events.win'); + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 addWurl({auctionId, requestId, wurl}); const {ad, adUrl, vastUrl, vastXml} = getAd(bid); diff --git a/modules/oguryBidAdapter.js b/modules/oguryBidAdapter.js index d09320c00fe..718ae44c83c 100644 --- a/modules/oguryBidAdapter.js +++ b/modules/oguryBidAdapter.js @@ -1,9 +1,9 @@ 'use strict'; -import { BANNER } from '../src/mediaTypes.js'; -import { getAdUnitSizes, logWarn, isFn, getWindowTop, getWindowSelf } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { ajax } from '../src/ajax.js' +import {BANNER} from '../src/mediaTypes.js'; +import {getAdUnitSizes, getWindowSelf, getWindowTop, isFn, logWarn} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {ajax} from '../src/ajax.js'; const BIDDER_CODE = 'ogury'; const GVLID = 31; @@ -66,7 +66,7 @@ function getUserSyncs(syncOptions, serverResponses, gdprConsent, uspConsent) { function buildRequests(validBidRequests, bidderRequest) { const openRtbBidRequestBanner = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, tmax: DEFAULT_TIMEOUT, at: 1, regs: { diff --git a/modules/onetagBidAdapter.js b/modules/onetagBidAdapter.js index 2ae879cdcbc..724a53a3095 100644 --- a/modules/onetagBidAdapter.js +++ b/modules/onetagBidAdapter.js @@ -264,8 +264,9 @@ function setGeneralInfo(bidRequest) { this['adUnitCode'] = bidRequest.adUnitCode; this['bidId'] = bidRequest.bidId; this['bidderRequestId'] = bidRequest.bidderRequestId; + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 this['auctionId'] = bidRequest.auctionId; - this['transactionId'] = bidRequest.transactionId; + this['transactionId'] = bidRequest.ortb2Imp?.ext?.tid; this['gpid'] = deepAccess(bidRequest, 'ortb2Imp.ext.gpid') || deepAccess(bidRequest, 'ortb2Imp.ext.data.pbadslot'); this['pubId'] = params.pubId; this['ext'] = params.ext; diff --git a/modules/operaadsBidAdapter.js b/modules/operaadsBidAdapter.js index 48c6246ce6b..e721fb85fd7 100644 --- a/modules/operaadsBidAdapter.js +++ b/modules/operaadsBidAdapter.js @@ -16,7 +16,7 @@ import {config} from '../src/config.js'; import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; import {Renderer} from '../src/Renderer.js'; import {OUTSTREAM} from '../src/video.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; const BIDDER_CODE = 'operaads'; @@ -227,7 +227,7 @@ export const spec = { function buildOpenRtbBidRequest(bidRequest, bidderRequest) { // build OpenRTB request body const payload = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, tmax: bidderRequest.timeout, test: config.getConfig('debug') ? 1 : 0, imp: createImp(bidRequest), diff --git a/modules/optidigitalBidAdapter.js b/modules/optidigitalBidAdapter.js index 4372aa830e6..a0fa641a424 100755 --- a/modules/optidigitalBidAdapter.js +++ b/modules/optidigitalBidAdapter.js @@ -46,6 +46,7 @@ export const spec = { referrer: (bidderRequest.refererInfo && bidderRequest.refererInfo.page) ? bidderRequest.refererInfo.page : '', hb_version: '$prebid.version$', deviceWidth: document.documentElement.clientWidth, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: deepAccess(validBidRequests[0], 'auctionId'), bidderRequestId: deepAccess(validBidRequests[0], 'bidderRequestId'), publisherId: deepAccess(validBidRequests[0], 'params.publisherId'), @@ -107,7 +108,6 @@ export const spec = { serverResponse.bids.forEach((bid) => { const bidResponse = { placementId: bid.placementId, - transactionId: bid.transactionId, requestId: bid.bidId, ttl: bid.ttl, creativeId: bid.creativeId, @@ -161,7 +161,7 @@ function buildImp(bidRequest, ortb2) { sizes: parseSizesInput(deepAccess(bidRequest, 'mediaTypes.banner.sizes')), bidId: deepAccess(bidRequest, 'bidId'), adUnitCode: deepAccess(bidRequest, 'adUnitCode'), - transactionId: deepAccess(bidRequest, 'transactionId'), + transactionId: deepAccess(bidRequest, 'ortb2Imp.ext.tid'), placementId: deepAccess(bidRequest, 'params.placementId') }; diff --git a/modules/orbidderBidAdapter.js b/modules/orbidderBidAdapter.js index b84c67ba6d2..f135ebb2bd1 100644 --- a/modules/orbidderBidAdapter.js +++ b/modules/orbidderBidAdapter.js @@ -101,7 +101,8 @@ export const spec = { pageUrl: referer, bidId: bidRequest.bidId, auctionId: bidRequest.auctionId, - transactionId: bidRequest.transactionId, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 + transactionId: bidRequest.ortb2Imp?.ext?.tid, adUnitCode: bidRequest.adUnitCode, bidRequestCount: bidRequest.bidRequestCount, params: bidRequest.params, diff --git a/modules/otmBidAdapter.js b/modules/otmBidAdapter.js index 1230694fc65..6125cee6593 100644 --- a/modules/otmBidAdapter.js +++ b/modules/otmBidAdapter.js @@ -53,7 +53,8 @@ export const spec = { const domain = isStr(bid.params.domain) ? bid.params.domain : topOrigin const cur = getValue(bid.params, 'currency') || DEFAULT_CURRENCY const bidid = getBidIdParameter('bidId', bid) - const transactionid = getBidIdParameter('transactionId', bid) + const transactionid = bid.ortb2Imp?.ext?.tid || ''; + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 const auctionid = getBidIdParameter('auctionId', bid) const bidfloor = _getBidFloor(bid) @@ -112,7 +113,6 @@ export const spec = { netRevenue: true, ad: bid.ad, ttl: bid.ttl, - transactionId: bid.transactionid, meta: { advertiserDomains: bid.adDomain ? [bid.adDomain] : [] } diff --git a/modules/outbrainBidAdapter.js b/modules/outbrainBidAdapter.js index 6bcbc6a1cba..0637d680912 100644 --- a/modules/outbrainBidAdapter.js +++ b/modules/outbrainBidAdapter.js @@ -1,16 +1,14 @@ // jshint esversion: 6, es3: false, node: true 'use strict'; -import { - registerBidder -} from '../src/adapters/bidderFactory.js'; -import { NATIVE, BANNER, VIDEO } from '../src/mediaTypes.js'; -import { OUTSTREAM } from '../src/video.js'; -import { deepAccess, deepSetValue, replaceAuctionPrice, _map, isArray, logWarn } from '../src/utils.js'; -import { ajax } from '../src/ajax.js'; -import { config } from '../src/config.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; -import { Renderer } from '../src/Renderer.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; +import {OUTSTREAM} from '../src/video.js'; +import {_map, deepAccess, deepSetValue, isArray, logWarn, replaceAuctionPrice} from '../src/utils.js'; +import {ajax} from '../src/ajax.js'; +import {config} from '../src/config.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; +import {Renderer} from '../src/Renderer.js'; const BIDDER_CODE = 'outbrain'; const GVLID = 164; @@ -107,7 +105,7 @@ export const spec = { }); const request = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, site: { page, publisher }, device: { ua }, source: { fd: 1 }, diff --git a/modules/ozoneBidAdapter.js b/modules/ozoneBidAdapter.js index 8882859b532..1b725ce3a05 100644 --- a/modules/ozoneBidAdapter.js +++ b/modules/ozoneBidAdapter.js @@ -262,6 +262,7 @@ export const spec = { obj.placementId = placementId; deepSetValue(obj, 'ext.prebid', {'storedrequest': {'id': placementId}}); obj.ext[whitelabelBidder] = {}; + // TODO: fix auctionId/transactionID leak: https://github.com/prebid/Prebid.js/issues/9781 obj.ext[whitelabelBidder].adUnitCode = ozoneBidRequest.adUnitCode; // eg. 'mpu' obj.ext[whitelabelBidder].transactionId = ozoneBidRequest.transactionId; // this is the transactionId PER adUnit, common across bidders for this unit if (ozoneBidRequest.params.hasOwnProperty('customData')) { diff --git a/modules/padsquadBidAdapter.js b/modules/padsquadBidAdapter.js index d5fe37ef34b..48471fc98e3 100644 --- a/modules/padsquadBidAdapter.js +++ b/modules/padsquadBidAdapter.js @@ -1,4 +1,4 @@ -import { logInfo, deepAccess } from '../src/utils.js'; +import {deepAccess, logInfo} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER} from '../src/mediaTypes.js'; @@ -40,7 +40,7 @@ export const spec = { })); const openrtbRequest = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, imp: impressions, site: { domain: bidderRequest?.refererInfo?.domain, diff --git a/modules/pixfutureBidAdapter.js b/modules/pixfutureBidAdapter.js index 5019b31b90b..6fc866b5ff9 100644 --- a/modules/pixfutureBidAdapter.js +++ b/modules/pixfutureBidAdapter.js @@ -136,8 +136,9 @@ export const spec = { v: getGlobal().version, pageUrl: referer, bidId: bidRequest.bidId, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidRequest.auctionId, - transactionId: bidRequest.transactionId, + transactionId: bidRequest.ortb2Imp?.ext?.tid, adUnitCode: bidRequest.adUnitCode, bidRequestCount: bidRequest.bidRequestCount, sizes: bidRequest.sizes, @@ -302,7 +303,7 @@ function bidToTag(bid) { if (bid.params.frameworks && isArray(bid.params.frameworks)) { tag['banner_frameworks'] = bid.params.frameworks; } - + // TODO: why does this need to iterate through every adUnit? let adUnit = find(auctionManager.getAdUnits(), au => bid.transactionId === au.transactionId); if (adUnit && adUnit.mediaTypes && adUnit.mediaTypes.banner) { tag.ad_types.push(BANNER); diff --git a/modules/prismaBidAdapter.js b/modules/prismaBidAdapter.js index 52a8c18a6fd..94e577d75fe 100644 --- a/modules/prismaBidAdapter.js +++ b/modules/prismaBidAdapter.js @@ -70,8 +70,9 @@ export const spec = { tagId: adunitValue.params.tagId, label: adunitValue.adUnitCode, bidId: adunitValue.bidId, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: adunitValue.auctionId, - transactionId: adunitValue.transactionId, + transactionId: adunitValue.ortb2Imp?.ext?.tid, mediatypes: adunitValue.mediaTypes, bidfloor: 0, bidfloorCurrency: 'USD', diff --git a/modules/proxistoreBidAdapter.js b/modules/proxistoreBidAdapter.js index 1f113f9c432..d7661acda07 100644 --- a/modules/proxistoreBidAdapter.js +++ b/modules/proxistoreBidAdapter.js @@ -24,8 +24,9 @@ function _createServerRequest(bidRequests, bidderRequest) { sizeIds.push(sizeId); }); var payload = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidRequests[0].auctionId, - transactionId: bidRequests[0].auctionId, + transactionId: bidRequests[0].ortb2Imp?.ext?.tid, bids: sizeIds, website: bidRequests[0].params.website, language: bidRequests[0].params.language, diff --git a/modules/pubgeniusBidAdapter.js b/modules/pubgeniusBidAdapter.js index 5e7ce6fc9fb..d92a9352cee 100644 --- a/modules/pubgeniusBidAdapter.js +++ b/modules/pubgeniusBidAdapter.js @@ -1,7 +1,7 @@ -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { ajax } from '../src/ajax.js'; -import { config } from '../src/config.js'; -import { BANNER, VIDEO } from '../src/mediaTypes.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {ajax} from '../src/ajax.js'; +import {config} from '../src/config.js'; +import {BANNER, VIDEO} from '../src/mediaTypes.js'; import { deepAccess, deepSetValue, @@ -41,7 +41,7 @@ export const spec = { buildRequests: function (bidRequests, bidderRequest) { const data = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, imp: bidRequests.map(buildImp), tmax: bidderRequest.timeout, ext: { diff --git a/modules/pubmaticBidAdapter.js b/modules/pubmaticBidAdapter.js index 2201945e48a..53504d58f31 100644 --- a/modules/pubmaticBidAdapter.js +++ b/modules/pubmaticBidAdapter.js @@ -1077,7 +1077,7 @@ export const spec = { } conf.pubId = conf.pubId || bid.params.publisherId; conf = _handleCustomParams(bid.params, conf); - conf.transactionId = bid.transactionId; + conf.transactionId = bid.ortb2Imp?.ext?.tid; if (bidCurrency === '') { bidCurrency = bid.params.currency || UNDEFINED; } else if (bid.params.hasOwnProperty('currency') && bidCurrency !== bid.params.currency) { @@ -1109,14 +1109,11 @@ export const spec = { payload.ext.wrapper = {}; payload.ext.wrapper.profile = parseInt(conf.profId) || UNDEFINED; payload.ext.wrapper.version = parseInt(conf.verId) || UNDEFINED; + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 payload.ext.wrapper.wiid = conf.wiid || bidderRequest.auctionId; // eslint-disable-next-line no-undef payload.ext.wrapper.wv = $$REPO_AND_VERSION$$; - - if (bidderRequest) { - payload.ext.wrapper.transactionId = bidderRequest.auctionId; - } - + payload.ext.wrapper.transactionId = conf.transactionId; payload.ext.wrapper.wp = 'pbjs'; const allowAlternateBidder = bidderRequest ? bidderSettings.get(bidderRequest.bidderCode, 'allowAlternateBidderCodes') : undefined; if (allowAlternateBidder !== undefined) { @@ -1155,8 +1152,8 @@ export const spec = { // update device.language to ISO-639-1-alpha-2 (2 character language) payload.device.language = payload.device.language && payload.device.language.split('-')[0]; - // passing auctionId in source.tid - if (bidderRequest) deepSetValue(payload, 'source.tid', bidderRequest.auctionId); + // passing transactionId in source.tid + deepSetValue(payload, 'source.tid', bidderRequest?.ortb2?.source?.tid); // test bids if (window.location.href.indexOf('pubmaticTest=true') !== -1) { diff --git a/modules/pubwiseBidAdapter.js b/modules/pubwiseBidAdapter.js index a7381bb2884..094eff13b36 100644 --- a/modules/pubwiseBidAdapter.js +++ b/modules/pubwiseBidAdapter.js @@ -194,7 +194,7 @@ export const spec = { _parseAdSlot(bid); conf = _handleCustomParams(bid.params, conf); - conf.transactionId = bid.transactionId; + conf.transactionId = bid.ortb2Imp?.ext?.tid; bidCurrency = bid.params.currency || UNDEFINED; bid.params.currency = bidCurrency; @@ -242,7 +242,7 @@ export const spec = { } // passing transactionId in source.tid - deepSetValue(payload, 'source.tid', bidderRequest?.auctionId); + deepSetValue(payload, 'source.tid', bidderRequest?.ortb2?.source?.tid); // schain if (validBidRequests[0].schain) { @@ -528,7 +528,7 @@ function _createImpressionObject(bid, conf) { secure: 1, bidfloorcur: bid.params.currency ? _parseSlotParam('currency', bid.params.currency) : DEFAULT_CURRENCY, // capitalization dicated by 3.2.4 spec ext: { - tid: (bid.transactionId ? bid.transactionId : '') + tid: bid.ortb2Imp?.ext?.tid || '' } }; diff --git a/modules/pxyzBidAdapter.js b/modules/pxyzBidAdapter.js index b40e0c79d6b..1ab432496a3 100644 --- a/modules/pxyzBidAdapter.js +++ b/modules/pxyzBidAdapter.js @@ -1,6 +1,6 @@ -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { BANNER } from '../src/mediaTypes.js'; -import { logInfo, logError, isArray } from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER} from '../src/mediaTypes.js'; +import {isArray, logError, logInfo} from '../src/utils.js'; const BIDDER_CODE = 'pxyz'; const URL = 'https://ads.playground.xyz/host-config/prebid?v=2'; @@ -42,7 +42,7 @@ export const spec = { } const payload = { - id: bidRequests[0].auctionId, + id: bidderRequest.bidderRequestId, site: { domain: protocol + '//' + hostname, name: hostname, diff --git a/modules/readpeakBidAdapter.js b/modules/readpeakBidAdapter.js index 844e287c622..718d6504b56 100644 --- a/modules/readpeakBidAdapter.js +++ b/modules/readpeakBidAdapter.js @@ -41,7 +41,7 @@ export const spec = { cur: [currency], source: { fd: 1, - tid: bidderRequest.auctionId, + tid: bidderRequest.ortb2?.source?.tid, ext: { prebid: '$prebid.version$' } diff --git a/modules/relaidoBidAdapter.js b/modules/relaidoBidAdapter.js index 347cf66ee2b..b2961b09eb5 100644 --- a/modules/relaidoBidAdapter.js +++ b/modules/relaidoBidAdapter.js @@ -85,9 +85,10 @@ function buildRequests(validBidRequests, bidderRequest) { bids.push({ bid_id: bidRequest.bidId, placement_id: getBidIdParameter('placementId', bidRequest.params), - transaction_id: bidRequest.transactionId, + transaction_id: bidRequest.ortb2Imp?.ext?.tid, bidder_request_id: bidRequest.bidderRequestId, ad_unit_code: bidRequest.adUnitCode, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auction_id: bidRequest.auctionId, player: bidRequest.params.player, width: width, diff --git a/modules/resetdigitalBidAdapter.js b/modules/resetdigitalBidAdapter.js index 93846e402e9..8264e0cc9cc 100644 --- a/modules/resetdigitalBidAdapter.js +++ b/modules/resetdigitalBidAdapter.js @@ -105,6 +105,7 @@ export const spec = { keywords: keywords.join(','), zone_id: req.params.zoneId, bid_id: req.bidId, + // TODO: fix transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 imp_id: req.transactionId, sizes: req.sizes, force_bid: req.params.forceBid, diff --git a/modules/revcontentBidAdapter.js b/modules/revcontentBidAdapter.js index c0ed7799204..5bf7dd691e7 100644 --- a/modules/revcontentBidAdapter.js +++ b/modules/revcontentBidAdapter.js @@ -2,10 +2,10 @@ 'use strict'; import {registerBidder} from '../src/adapters/bidderFactory.js'; -import { BANNER, NATIVE } from '../src/mediaTypes.js'; -import { triggerPixel, isFn, deepAccess, getAdUnitSizes, parseGPTSingleSizeArrayToRtbSize, _map } from '../src/utils.js'; +import {BANNER, NATIVE} from '../src/mediaTypes.js'; +import {_map, deepAccess, getAdUnitSizes, isFn, parseGPTSingleSizeArrayToRtbSize, triggerPixel} from '../src/utils.js'; import {parseDomain} from '../src/refererDetection.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; const BIDDER_CODE = 'revcontent'; const NATIVE_PARAMS = { @@ -65,7 +65,7 @@ export const spec = { const imp = validBidRequests.map((bid, id) => buildImp(bid, id)); let data = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, imp: imp, site: { id: widgetId, @@ -215,8 +215,9 @@ function buildImp(bid, id) { id: id + 1, tagid: bid.adUnitCode, bidderRequestId: bid.bidderRequestId, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bid.auctionId, - transactionId: bid.transactionId, + transactionId: bid.ortb2Imp?.ext?.tid, instl: 0, bidfloor: bidfloor, secure: '1' diff --git a/modules/richaudienceBidAdapter.js b/modules/richaudienceBidAdapter.js index 1faed74d84e..56ceaaa7444 100755 --- a/modules/richaudienceBidAdapter.js +++ b/modules/richaudienceBidAdapter.js @@ -36,6 +36,7 @@ export const spec = { pid: bid.params.pid, supplyType: bid.params.supplyType, currencyCode: config.getConfig('currency.adServerCurrency'), + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bid.auctionId, bidId: bid.bidId, BidRequestsCount: bid.bidRequestsCount, @@ -46,7 +47,7 @@ export const spec = { // TODO: is 'page' the right value here? referer: (typeof bidderRequest.refererInfo.page != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.page) : null), numIframes: (typeof bidderRequest.refererInfo.numIframes != 'undefined' ? bidderRequest.refererInfo.numIframes : null), - transactionId: bid.transactionId, + transactionId: bid.ortb2Imp?.ext?.tid, timeout: config.getConfig('bidderTimeout'), user: raiSetEids(bid), demand: raiGetDemandType(bid), diff --git a/modules/riseBidAdapter.js b/modules/riseBidAdapter.js index e0f196fb072..743a3c1cd70 100644 --- a/modules/riseBidAdapter.js +++ b/modules/riseBidAdapter.js @@ -291,7 +291,7 @@ function generateBidParameters(bid, bidderRequest) { bidId: getBidIdParameter('bidId', bid), bidderRequestId: getBidIdParameter('bidderRequestId', bid), loop: getBidIdParameter('bidderRequestsCount', bid), - transactionId: getBidIdParameter('transactionId', bid), + transactionId: bid.ortb2Imp?.ext?.tid, coppa: 0 }; @@ -407,6 +407,7 @@ function generateGeneralParams(generalObject, bidderRequest) { device_type: getDeviceType(navigator.userAgent), ua: navigator.userAgent, is_wrapper: !!generalBidParams.isWrapper, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 session_id: generalBidParams.sessionId || getBidIdParameter('auctionId', generalObject), tmax: timeout }; diff --git a/modules/rtbhouseBidAdapter.js b/modules/rtbhouseBidAdapter.js index 5ebf51b6e0d..5d687552201 100644 --- a/modules/rtbhouseBidAdapter.js +++ b/modules/rtbhouseBidAdapter.js @@ -1,10 +1,10 @@ -import {deepAccess, mergeDeep, isArray, logError, logInfo} from '../src/utils.js'; -import { getOrigin } from '../libraries/getOrigin/index.js'; +import {deepAccess, isArray, logError, logInfo, mergeDeep} from '../src/utils.js'; +import {getOrigin} from '../libraries/getOrigin/index.js'; import {BANNER, NATIVE} from '../src/mediaTypes.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {includes} from '../src/polyfill.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; -import { config } from '../src/config.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; +import {config} from '../src/config.js'; const BIDDER_CODE = 'rtbhouse'; const REGIONS = ['prebid-eu', 'prebid-us', 'prebid-asia']; @@ -51,7 +51,7 @@ export const spec = { validBidRequests = convertOrtbRequestToProprietaryNative(validBidRequests); const request = { - id: validBidRequests[0].auctionId, + id: bidderRequest.bidderRequestId, imp: validBidRequests.map(slot => mapImpression(slot, bidderRequest)), site: mapSite(validBidRequests, bidderRequest), cur: DEFAULT_CURRENCY_ARR, diff --git a/modules/rtbsapeBidAdapter.js b/modules/rtbsapeBidAdapter.js index cf3d79eb377..5b1a92b02a0 100644 --- a/modules/rtbsapeBidAdapter.js +++ b/modules/rtbsapeBidAdapter.js @@ -39,6 +39,7 @@ export const spec = { url: ENDPOINT, method: 'POST', data: { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidderRequest.auctionId, requestId: bidderRequest.bidderRequestId, bids: validBidRequests, diff --git a/modules/rubiconBidAdapter.js b/modules/rubiconBidAdapter.js index 1e407d0bc0b..20dbf1e4995 100644 --- a/modules/rubiconBidAdapter.js +++ b/modules/rubiconBidAdapter.js @@ -468,8 +468,8 @@ export const spec = { 'rp_floor': (params.floor = parseFloat(params.floor)) >= 0.01 ? params.floor : undefined, 'rp_secure': '1', 'tk_flint': `${rubiConf.int_type || DEFAULT_INTEGRATION}_v$prebid.version$`, - 'x_source.tid': deepAccess(bidderRequest, 'ortb2.source.tid'), - 'x_imp.ext.tid': bidRequest.transactionId, + 'x_source.tid': bidderRequest.ortb2?.source?.tid, + 'x_imp.ext.tid': bidRequest.ortb2Imp?.ext?.tid, 'l_pb_bid_id': bidRequest.bidId, 'p_screen_res': _getScreenResolution(), 'tk_user_key': params.userId, diff --git a/modules/seedingAllianceBidAdapter.js b/modules/seedingAllianceBidAdapter.js index 79c15f306cd..e287ea7ff78 100755 --- a/modules/seedingAllianceBidAdapter.js +++ b/modules/seedingAllianceBidAdapter.js @@ -1,11 +1,11 @@ // jshint esversion: 6, es3: false, node: true 'use strict'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; -import { NATIVE, BANNER } from '../src/mediaTypes.js'; -import { _map, isArray, isEmpty, deepSetValue, replaceAuctionPrice } from '../src/utils.js'; -import { config } from '../src/config.js'; -import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, NATIVE} from '../src/mediaTypes.js'; +import {_map, deepSetValue, isArray, isEmpty, replaceAuctionPrice} from '../src/utils.js'; +import {config} from '../src/config.js'; +import {convertOrtbRequestToProprietaryNative} from '../src/native.js'; const GVL_ID = 371; const BIDDER_CODE = 'seedingAlliance'; @@ -110,7 +110,7 @@ export const spec = { }); const request = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, site: { page: url }, diff --git a/modules/seedtagBidAdapter.js b/modules/seedtagBidAdapter.js index f54245a41ab..7ac7d048c50 100644 --- a/modules/seedtagBidAdapter.js +++ b/modules/seedtagBidAdapter.js @@ -110,7 +110,7 @@ function buildBidRequest(validBidRequest) { const bidRequest = { id: validBidRequest.bidId, - transactionId: validBidRequest.transactionId, + transactionId: validBidRequest.ortb2Imp?.ext?.tid, sizes: validBidRequest.sizes, supplyTypes: mediaTypes, adUnitId: params.adUnitId, diff --git a/modules/sharethroughBidAdapter.js b/modules/sharethroughBidAdapter.js index 9c91af8b130..acaeb41f527 100644 --- a/modules/sharethroughBidAdapter.js +++ b/modules/sharethroughBidAdapter.js @@ -51,7 +51,7 @@ export const sharethroughAdapterSpec = { ext: {}, }, source: { - tid: bidderRequest.auctionId, + tid: bidderRequest.ortb2?.source?.tid, ext: { version: '$prebid.version$', str: VERSION, diff --git a/modules/shinezBidAdapter.js b/modules/shinezBidAdapter.js index f93736894f5..96b6d281fdc 100644 --- a/modules/shinezBidAdapter.js +++ b/modules/shinezBidAdapter.js @@ -1,435 +1,435 @@ -import { logWarn, logInfo, isArray, isFn, deepAccess, isEmpty, contains, timestamp, getBidIdParameter, triggerPixel, isInteger } from '../src/utils.js'; -import {registerBidder} from '../src/adapters/bidderFactory.js'; -import {BANNER, VIDEO} from '../src/mediaTypes.js'; -import {config} from '../src/config.js'; - -const SUPPORTED_AD_TYPES = [BANNER, VIDEO]; -const BIDDER_CODE = 'shinez'; -const ADAPTER_VERSION = '1.0.0'; -const TTL = 360; -const CURRENCY = 'USD'; -const SELLER_ENDPOINT = 'https://hb.sweetgum.io/'; -const MODES = { - PRODUCTION: 'hb-sz-multi', - TEST: 'hb-multi-sz-test' -} -const SUPPORTED_SYNC_METHODS = { - IFRAME: 'iframe', - PIXEL: 'pixel' -} - -export const spec = { - code: BIDDER_CODE, - version: ADAPTER_VERSION, - supportedMediaTypes: SUPPORTED_AD_TYPES, - isBidRequestValid: function (bidRequest) { - if (!bidRequest.params) { - logWarn('no params have been set to Shinez adapter'); - return false; - } - - if (!bidRequest.params.org) { - logWarn('org is a mandatory param for Shinez adapter'); - return false; - } - - return true; - }, - buildRequests: function (validBidRequests, bidderRequest) { - const combinedRequestsObject = {}; - - // use data from the first bid, to create the general params for all bids - const generalObject = validBidRequests[0]; - const testMode = generalObject.params.testMode; - - combinedRequestsObject.params = generateGeneralParams(generalObject, bidderRequest); - combinedRequestsObject.bids = generateBidsParams(validBidRequests, bidderRequest); - - return { - method: 'POST', - url: getEndpoint(testMode), - data: combinedRequestsObject - } - }, - interpretResponse: function ({body}) { - const bidResponses = []; - - if (body.bids) { - body.bids.forEach(adUnit => { - const bidResponse = { - requestId: adUnit.requestId, - cpm: adUnit.cpm, - currency: adUnit.currency || CURRENCY, - width: adUnit.width, - height: adUnit.height, - ttl: adUnit.ttl || TTL, - creativeId: adUnit.requestId, - netRevenue: adUnit.netRevenue || true, - nurl: adUnit.nurl, - mediaType: adUnit.mediaType, - meta: { - mediaType: adUnit.mediaType - } - }; - - if (adUnit.mediaType === VIDEO) { - bidResponse.vastXml = adUnit.vastXml; - } else if (adUnit.mediaType === BANNER) { - bidResponse.ad = adUnit.ad; - } - - if (adUnit.adomain && adUnit.adomain.length) { - bidResponse.meta.advertiserDomains = adUnit.adomain; - } - - bidResponses.push(bidResponse); - }); - } - - return bidResponses; - }, - getUserSyncs: function (syncOptions, serverResponses) { - const syncs = []; - for (const response of serverResponses) { - if (syncOptions.iframeEnabled && response.body.params.userSyncURL) { - syncs.push({ - type: 'iframe', - url: response.body.params.userSyncURL - }); - } - if (syncOptions.pixelEnabled && isArray(response.body.params.userSyncPixels)) { - const pixels = response.body.params.userSyncPixels.map(pixel => { - return { - type: 'image', - url: pixel - } - }) - syncs.push(...pixels) - } - } - return syncs; - }, - onBidWon: function (bid) { - if (bid == null) { - return; - } - - logInfo('onBidWon:', bid); - if (bid.hasOwnProperty('nurl') && bid.nurl.length > 0) { - triggerPixel(bid.nurl); - } - } -}; - -registerBidder(spec); - -/** - * Get floor price - * @param bid {bid} - * @returns {Number} - */ -function getFloor(bid, mediaType) { - if (!isFn(bid.getFloor)) { - return 0; - } - let floorResult = bid.getFloor({ - currency: CURRENCY, - mediaType: mediaType, - size: '*' - }); - return floorResult.currency === CURRENCY && floorResult.floor ? floorResult.floor : 0; -} - -/** - * Get the the ad sizes array from the bid - * @param bid {bid} - * @returns {Array} - */ -function getSizesArray(bid, mediaType) { - let sizesArray = [] - - if (deepAccess(bid, `mediaTypes.${mediaType}.sizes`)) { - sizesArray = bid.mediaTypes[mediaType].sizes; - } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) { - sizesArray = bid.sizes; - } - - return sizesArray; -} - -/** - * Get schain string value - * @param schainObject {Object} - * @returns {string} - */ -function getSupplyChain(schainObject) { - if (isEmpty(schainObject)) { - return ''; - } - let scStr = `${schainObject.ver},${schainObject.complete}`; - schainObject.nodes.forEach((node) => { - scStr += '!'; - scStr += `${getEncodedValIfNotEmpty(node.asi)},`; - scStr += `${getEncodedValIfNotEmpty(node.sid)},`; - scStr += `${node.hp ? encodeURIComponent(node.hp) : ''},`; - scStr += `${getEncodedValIfNotEmpty(node.rid)},`; - scStr += `${getEncodedValIfNotEmpty(node.name)},`; - scStr += `${getEncodedValIfNotEmpty(node.domain)}`; - }); - return scStr; -} - -/** - * Get encoded node value - * @param val {string} - * @returns {string} - */ -function getEncodedValIfNotEmpty(val) { - return !isEmpty(val) ? encodeURIComponent(val) : ''; -} - -/** - * Get preferred user-sync method based on publisher configuration - * @param bidderCode {string} - * @returns {string} - */ -function getAllowedSyncMethod(filterSettings, bidderCode) { - const iframeConfigsToCheck = ['all', 'iframe']; - const pixelConfigToCheck = 'image'; - if (filterSettings && iframeConfigsToCheck.some(config => isSyncMethodAllowed(filterSettings[config], bidderCode))) { - return SUPPORTED_SYNC_METHODS.IFRAME; - } - if (!filterSettings || !filterSettings[pixelConfigToCheck] || isSyncMethodAllowed(filterSettings[pixelConfigToCheck], bidderCode)) { - return SUPPORTED_SYNC_METHODS.PIXEL; - } -} - -/** - * Check if sync rule is supported - * @param syncRule {Object} - * @param bidderCode {string} - * @returns {boolean} - */ -function isSyncMethodAllowed(syncRule, bidderCode) { - if (!syncRule) { - return false; - } - const isInclude = syncRule.filter === 'include'; - const bidders = isArray(syncRule.bidders) ? syncRule.bidders : [bidderCode]; - return isInclude && contains(bidders, bidderCode); -} - -/** - * Get the seller endpoint - * @param testMode {boolean} - * @returns {string} - */ -function getEndpoint(testMode) { - return testMode - ? SELLER_ENDPOINT + MODES.TEST - : SELLER_ENDPOINT + MODES.PRODUCTION; -} - -/** - * get device type - * @param uad {ua} - * @returns {string} - */ -function getDeviceType(ua) { - if (/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i - .test(ua.toLowerCase())) { - return '5'; - } - if (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i - .test(ua.toLowerCase())) { - return '4'; - } - if (/smart[-_\s]?tv|hbbtv|appletv|googletv|hdmi|netcast|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b/i - .test(ua.toLowerCase())) { - return '3'; - } - return '1'; -} - -function generateBidsParams(validBidRequests, bidderRequest) { - const bidsArray = []; - - if (validBidRequests.length) { - validBidRequests.forEach(bid => { - bidsArray.push(generateBidParameters(bid, bidderRequest)); - }); - } - - return bidsArray; -} - -/** - * Generate bid specific parameters - * @param {bid} bid - * @param {bidderRequest} bidderRequest - * @returns {Object} bid specific params object - */ -function generateBidParameters(bid, bidderRequest) { - const {params} = bid; - const mediaType = isBanner(bid) ? BANNER : VIDEO; - const sizesArray = getSizesArray(bid, mediaType); - - // fix floor price in case of NAN - if (isNaN(params.floorPrice)) { - params.floorPrice = 0; - } - - const bidObject = { - mediaType, - adUnitCode: getBidIdParameter('adUnitCode', bid), - sizes: sizesArray, - floorPrice: Math.max(getFloor(bid, mediaType), params.floorPrice), - bidId: getBidIdParameter('bidId', bid), - bidderRequestId: getBidIdParameter('bidderRequestId', bid), - transactionId: getBidIdParameter('transactionId', bid), - }; - - const pos = deepAccess(bid, `mediaTypes.${mediaType}.pos`); - if (pos) { - bidObject.pos = pos; - } - - const gpid = deepAccess(bid, `ortb2Imp.ext.gpid`); - if (gpid) { - bidObject.gpid = gpid; - } - - const placementId = params.placementId || deepAccess(bid, `mediaTypes.${mediaType}.name`); - if (placementId) { - bidObject.placementId = placementId; - } - - if (mediaType === VIDEO) { - const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`); - let playbackMethodValue; - - // verify playbackMethod is of type integer array, or integer only. - if (Array.isArray(playbackMethod) && isInteger(playbackMethod[0])) { - // only the first playbackMethod in the array will be used, according to OpenRTB 2.5 recommendation - playbackMethodValue = playbackMethod[0]; - } else if (isInteger(playbackMethod)) { - playbackMethodValue = playbackMethod; - } - - if (playbackMethodValue) { - bidObject.playbackMethod = playbackMethodValue; - } - - const placement = deepAccess(bid, `mediaTypes.video.placement`); - if (placement) { - bidObject.placement = placement; - } - - const minDuration = deepAccess(bid, `mediaTypes.video.minduration`); - if (minDuration) { - bidObject.minDuration = minDuration; - } - - const maxDuration = deepAccess(bid, `mediaTypes.video.maxduration`); - if (maxDuration) { - bidObject.maxDuration = maxDuration; - } - - const skip = deepAccess(bid, `mediaTypes.video.skip`); - if (skip) { - bidObject.skip = skip; - } - - const linearity = deepAccess(bid, `mediaTypes.video.linearity`); - if (linearity) { - bidObject.linearity = linearity; - } - } - - return bidObject; -} - -function isBanner(bid) { - return bid.mediaTypes && bid.mediaTypes.banner; -} - -/** - * Generate params that are common between all bids - * @param {single bid object} generalObject - * @param {bidderRequest} bidderRequest - * @returns {object} the common params object - */ -function generateGeneralParams(generalObject, bidderRequest) { - const domain = window.location.hostname; - const {syncEnabled, filterSettings} = config.getConfig('userSync') || {}; - const {bidderCode} = bidderRequest; - const generalBidParams = generalObject.params; - const timeout = bidderRequest.timeout; - - // these params are snake_case instead of camelCase to allow backwards compatability on the server. - // in the future, these will be converted to camelCase to match our convention. - const generalParams = { - wrapper_type: 'prebidjs', - wrapper_vendor: '$$PREBID_GLOBAL$$', - wrapper_version: '$prebid.version$', - adapter_version: ADAPTER_VERSION, - auction_start: timestamp(), - publisher_id: generalBidParams.org, - publisher_name: domain, - site_domain: domain, - dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0, - device_type: getDeviceType(navigator.userAgent), - ua: navigator.userAgent, - session_id: getBidIdParameter('auctionId', generalObject), - tmax: timeout - }; - - const userIdsParam = getBidIdParameter('userId', generalObject); - if (userIdsParam) { - generalParams.userIds = JSON.stringify(userIdsParam); - } - - const ortb2Metadata = bidderRequest.ortb2 || {}; - if (ortb2Metadata.site) { - generalParams.site_metadata = JSON.stringify(ortb2Metadata.site); - } - if (ortb2Metadata.user) { - generalParams.user_metadata = JSON.stringify(ortb2Metadata.user); - } - - if (syncEnabled) { - const allowedSyncMethod = getAllowedSyncMethod(filterSettings, bidderCode); - if (allowedSyncMethod) { - generalParams.cs_method = allowedSyncMethod; - } - } - - if (bidderRequest.uspConsent) { - generalParams.us_privacy = bidderRequest.uspConsent; - } - - if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) { - generalParams.gdpr = bidderRequest.gdprConsent.gdprApplies; - generalParams.gdpr_consent = bidderRequest.gdprConsent.consentString; - } - - if (generalBidParams.ifa) { - generalParams.ifa = generalBidParams.ifa; - } - - if (generalObject.schain) { - generalParams.schain = getSupplyChain(generalObject.schain); - } - - if (bidderRequest.ortb2 && bidderRequest.ortb2.site) { - generalParams.referrer = bidderRequest.ortb2.site.ref; - generalParams.page_url = bidderRequest.ortb2.site.page; - } - - if (bidderRequest && bidderRequest.refererInfo) { - generalParams.referrer = generalParams.referrer || deepAccess(bidderRequest, 'refererInfo.referer'); - generalParams.page_url = generalParams.page_url || config.getConfig('pageUrl') || deepAccess(window, 'location.href'); - } - - return generalParams; -} +import { logWarn, logInfo, isArray, isFn, deepAccess, isEmpty, contains, timestamp, getBidIdParameter, triggerPixel, isInteger } from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; +import {BANNER, VIDEO} from '../src/mediaTypes.js'; +import {config} from '../src/config.js'; + +const SUPPORTED_AD_TYPES = [BANNER, VIDEO]; +const BIDDER_CODE = 'shinez'; +const ADAPTER_VERSION = '1.0.0'; +const TTL = 360; +const CURRENCY = 'USD'; +const SELLER_ENDPOINT = 'https://hb.sweetgum.io/'; +const MODES = { + PRODUCTION: 'hb-sz-multi', + TEST: 'hb-multi-sz-test' +} +const SUPPORTED_SYNC_METHODS = { + IFRAME: 'iframe', + PIXEL: 'pixel' +} + +export const spec = { + code: BIDDER_CODE, + version: ADAPTER_VERSION, + supportedMediaTypes: SUPPORTED_AD_TYPES, + isBidRequestValid: function (bidRequest) { + if (!bidRequest.params) { + logWarn('no params have been set to Shinez adapter'); + return false; + } + + if (!bidRequest.params.org) { + logWarn('org is a mandatory param for Shinez adapter'); + return false; + } + + return true; + }, + buildRequests: function (validBidRequests, bidderRequest) { + const combinedRequestsObject = {}; + + // use data from the first bid, to create the general params for all bids + const generalObject = validBidRequests[0]; + const testMode = generalObject.params.testMode; + + combinedRequestsObject.params = generateGeneralParams(generalObject, bidderRequest); + combinedRequestsObject.bids = generateBidsParams(validBidRequests, bidderRequest); + + return { + method: 'POST', + url: getEndpoint(testMode), + data: combinedRequestsObject + } + }, + interpretResponse: function ({body}) { + const bidResponses = []; + + if (body.bids) { + body.bids.forEach(adUnit => { + const bidResponse = { + requestId: adUnit.requestId, + cpm: adUnit.cpm, + currency: adUnit.currency || CURRENCY, + width: adUnit.width, + height: adUnit.height, + ttl: adUnit.ttl || TTL, + creativeId: adUnit.requestId, + netRevenue: adUnit.netRevenue || true, + nurl: adUnit.nurl, + mediaType: adUnit.mediaType, + meta: { + mediaType: adUnit.mediaType + } + }; + + if (adUnit.mediaType === VIDEO) { + bidResponse.vastXml = adUnit.vastXml; + } else if (adUnit.mediaType === BANNER) { + bidResponse.ad = adUnit.ad; + } + + if (adUnit.adomain && adUnit.adomain.length) { + bidResponse.meta.advertiserDomains = adUnit.adomain; + } + + bidResponses.push(bidResponse); + }); + } + + return bidResponses; + }, + getUserSyncs: function (syncOptions, serverResponses) { + const syncs = []; + for (const response of serverResponses) { + if (syncOptions.iframeEnabled && response.body.params.userSyncURL) { + syncs.push({ + type: 'iframe', + url: response.body.params.userSyncURL + }); + } + if (syncOptions.pixelEnabled && isArray(response.body.params.userSyncPixels)) { + const pixels = response.body.params.userSyncPixels.map(pixel => { + return { + type: 'image', + url: pixel + } + }) + syncs.push(...pixels) + } + } + return syncs; + }, + onBidWon: function (bid) { + if (bid == null) { + return; + } + + logInfo('onBidWon:', bid); + if (bid.hasOwnProperty('nurl') && bid.nurl.length > 0) { + triggerPixel(bid.nurl); + } + } +}; + +registerBidder(spec); + +/** + * Get floor price + * @param bid {bid} + * @returns {Number} + */ +function getFloor(bid, mediaType) { + if (!isFn(bid.getFloor)) { + return 0; + } + let floorResult = bid.getFloor({ + currency: CURRENCY, + mediaType: mediaType, + size: '*' + }); + return floorResult.currency === CURRENCY && floorResult.floor ? floorResult.floor : 0; +} + +/** + * Get the the ad sizes array from the bid + * @param bid {bid} + * @returns {Array} + */ +function getSizesArray(bid, mediaType) { + let sizesArray = [] + + if (deepAccess(bid, `mediaTypes.${mediaType}.sizes`)) { + sizesArray = bid.mediaTypes[mediaType].sizes; + } else if (Array.isArray(bid.sizes) && bid.sizes.length > 0) { + sizesArray = bid.sizes; + } + + return sizesArray; +} + +/** + * Get schain string value + * @param schainObject {Object} + * @returns {string} + */ +function getSupplyChain(schainObject) { + if (isEmpty(schainObject)) { + return ''; + } + let scStr = `${schainObject.ver},${schainObject.complete}`; + schainObject.nodes.forEach((node) => { + scStr += '!'; + scStr += `${getEncodedValIfNotEmpty(node.asi)},`; + scStr += `${getEncodedValIfNotEmpty(node.sid)},`; + scStr += `${node.hp ? encodeURIComponent(node.hp) : ''},`; + scStr += `${getEncodedValIfNotEmpty(node.rid)},`; + scStr += `${getEncodedValIfNotEmpty(node.name)},`; + scStr += `${getEncodedValIfNotEmpty(node.domain)}`; + }); + return scStr; +} + +/** + * Get encoded node value + * @param val {string} + * @returns {string} + */ +function getEncodedValIfNotEmpty(val) { + return !isEmpty(val) ? encodeURIComponent(val) : ''; +} + +/** + * Get preferred user-sync method based on publisher configuration + * @param bidderCode {string} + * @returns {string} + */ +function getAllowedSyncMethod(filterSettings, bidderCode) { + const iframeConfigsToCheck = ['all', 'iframe']; + const pixelConfigToCheck = 'image'; + if (filterSettings && iframeConfigsToCheck.some(config => isSyncMethodAllowed(filterSettings[config], bidderCode))) { + return SUPPORTED_SYNC_METHODS.IFRAME; + } + if (!filterSettings || !filterSettings[pixelConfigToCheck] || isSyncMethodAllowed(filterSettings[pixelConfigToCheck], bidderCode)) { + return SUPPORTED_SYNC_METHODS.PIXEL; + } +} + +/** + * Check if sync rule is supported + * @param syncRule {Object} + * @param bidderCode {string} + * @returns {boolean} + */ +function isSyncMethodAllowed(syncRule, bidderCode) { + if (!syncRule) { + return false; + } + const isInclude = syncRule.filter === 'include'; + const bidders = isArray(syncRule.bidders) ? syncRule.bidders : [bidderCode]; + return isInclude && contains(bidders, bidderCode); +} + +/** + * Get the seller endpoint + * @param testMode {boolean} + * @returns {string} + */ +function getEndpoint(testMode) { + return testMode + ? SELLER_ENDPOINT + MODES.TEST + : SELLER_ENDPOINT + MODES.PRODUCTION; +} + +/** + * get device type + * @param uad {ua} + * @returns {string} + */ +function getDeviceType(ua) { + if (/ipad|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i + .test(ua.toLowerCase())) { + return '5'; + } + if (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i + .test(ua.toLowerCase())) { + return '4'; + } + if (/smart[-_\s]?tv|hbbtv|appletv|googletv|hdmi|netcast|viera|nettv|roku|\bdtv\b|sonydtv|inettvbrowser|\btv\b/i + .test(ua.toLowerCase())) { + return '3'; + } + return '1'; +} + +function generateBidsParams(validBidRequests, bidderRequest) { + const bidsArray = []; + + if (validBidRequests.length) { + validBidRequests.forEach(bid => { + bidsArray.push(generateBidParameters(bid, bidderRequest)); + }); + } + + return bidsArray; +} + +/** + * Generate bid specific parameters + * @param {bid} bid + * @param {bidderRequest} bidderRequest + * @returns {Object} bid specific params object + */ +function generateBidParameters(bid, bidderRequest) { + const {params} = bid; + const mediaType = isBanner(bid) ? BANNER : VIDEO; + const sizesArray = getSizesArray(bid, mediaType); + + // fix floor price in case of NAN + if (isNaN(params.floorPrice)) { + params.floorPrice = 0; + } + + const bidObject = { + mediaType, + adUnitCode: getBidIdParameter('adUnitCode', bid), + sizes: sizesArray, + floorPrice: Math.max(getFloor(bid, mediaType), params.floorPrice), + bidId: getBidIdParameter('bidId', bid), + bidderRequestId: getBidIdParameter('bidderRequestId', bid), + transactionId: bid.ortb2Imp?.ext?.tid || '', + }; + + const pos = deepAccess(bid, `mediaTypes.${mediaType}.pos`); + if (pos) { + bidObject.pos = pos; + } + + const gpid = deepAccess(bid, `ortb2Imp.ext.gpid`); + if (gpid) { + bidObject.gpid = gpid; + } + + const placementId = params.placementId || deepAccess(bid, `mediaTypes.${mediaType}.name`); + if (placementId) { + bidObject.placementId = placementId; + } + + if (mediaType === VIDEO) { + const playbackMethod = deepAccess(bid, `mediaTypes.video.playbackmethod`); + let playbackMethodValue; + + // verify playbackMethod is of type integer array, or integer only. + if (Array.isArray(playbackMethod) && isInteger(playbackMethod[0])) { + // only the first playbackMethod in the array will be used, according to OpenRTB 2.5 recommendation + playbackMethodValue = playbackMethod[0]; + } else if (isInteger(playbackMethod)) { + playbackMethodValue = playbackMethod; + } + + if (playbackMethodValue) { + bidObject.playbackMethod = playbackMethodValue; + } + + const placement = deepAccess(bid, `mediaTypes.video.placement`); + if (placement) { + bidObject.placement = placement; + } + + const minDuration = deepAccess(bid, `mediaTypes.video.minduration`); + if (minDuration) { + bidObject.minDuration = minDuration; + } + + const maxDuration = deepAccess(bid, `mediaTypes.video.maxduration`); + if (maxDuration) { + bidObject.maxDuration = maxDuration; + } + + const skip = deepAccess(bid, `mediaTypes.video.skip`); + if (skip) { + bidObject.skip = skip; + } + + const linearity = deepAccess(bid, `mediaTypes.video.linearity`); + if (linearity) { + bidObject.linearity = linearity; + } + } + + return bidObject; +} + +function isBanner(bid) { + return bid.mediaTypes && bid.mediaTypes.banner; +} + +/** + * Generate params that are common between all bids + * @param {single bid object} generalObject + * @param {bidderRequest} bidderRequest + * @returns {object} the common params object + */ +function generateGeneralParams(generalObject, bidderRequest) { + const domain = window.location.hostname; + const {syncEnabled, filterSettings} = config.getConfig('userSync') || {}; + const {bidderCode} = bidderRequest; + const generalBidParams = generalObject.params; + const timeout = bidderRequest.timeout; + + // these params are snake_case instead of camelCase to allow backwards compatability on the server. + // in the future, these will be converted to camelCase to match our convention. + const generalParams = { + wrapper_type: 'prebidjs', + wrapper_vendor: '$$PREBID_GLOBAL$$', + wrapper_version: '$prebid.version$', + adapter_version: ADAPTER_VERSION, + auction_start: timestamp(), + publisher_id: generalBidParams.org, + publisher_name: domain, + site_domain: domain, + dnt: (navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') ? 1 : 0, + device_type: getDeviceType(navigator.userAgent), + ua: navigator.userAgent, + session_id: getBidIdParameter('auctionId', generalObject), + tmax: timeout + }; + + const userIdsParam = getBidIdParameter('userId', generalObject); + if (userIdsParam) { + generalParams.userIds = JSON.stringify(userIdsParam); + } + + const ortb2Metadata = bidderRequest.ortb2 || {}; + if (ortb2Metadata.site) { + generalParams.site_metadata = JSON.stringify(ortb2Metadata.site); + } + if (ortb2Metadata.user) { + generalParams.user_metadata = JSON.stringify(ortb2Metadata.user); + } + + if (syncEnabled) { + const allowedSyncMethod = getAllowedSyncMethod(filterSettings, bidderCode); + if (allowedSyncMethod) { + generalParams.cs_method = allowedSyncMethod; + } + } + + if (bidderRequest.uspConsent) { + generalParams.us_privacy = bidderRequest.uspConsent; + } + + if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) { + generalParams.gdpr = bidderRequest.gdprConsent.gdprApplies; + generalParams.gdpr_consent = bidderRequest.gdprConsent.consentString; + } + + if (generalBidParams.ifa) { + generalParams.ifa = generalBidParams.ifa; + } + + if (generalObject.schain) { + generalParams.schain = getSupplyChain(generalObject.schain); + } + + if (bidderRequest.ortb2 && bidderRequest.ortb2.site) { + generalParams.referrer = bidderRequest.ortb2.site.ref; + generalParams.page_url = bidderRequest.ortb2.site.page; + } + + if (bidderRequest && bidderRequest.refererInfo) { + generalParams.referrer = generalParams.referrer || deepAccess(bidderRequest, 'refererInfo.referer'); + generalParams.page_url = generalParams.page_url || config.getConfig('pageUrl') || deepAccess(window, 'location.href'); + } + + return generalParams; +} diff --git a/modules/showheroes-bsBidAdapter.js b/modules/showheroes-bsBidAdapter.js index 734512ee3c4..a241cb71a5d 100644 --- a/modules/showheroes-bsBidAdapter.js +++ b/modules/showheroes-bsBidAdapter.js @@ -85,6 +85,7 @@ export const spec = { adUnitCode: bid.adUnitCode, bidId: bid.bidId, context: context, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidderRequest.auctionId, start: +new Date(), timeout: 3000, diff --git a/modules/slimcutBidAdapter.js b/modules/slimcutBidAdapter.js index a04a2fda89a..447e314958f 100644 --- a/modules/slimcutBidAdapter.js +++ b/modules/slimcutBidAdapter.js @@ -75,7 +75,6 @@ export const spec = { ad: bid.ad, requestId: bid.requestId, creativeId: bid.creativeId, - transactionId: bid.tranactionId, winUrl: bid.winUrl, meta: { advertiserDomains: bid.adomain || [] @@ -107,8 +106,9 @@ function buildRequestObject(bid) { reqObj.bidderRequestId = getBidIdParameter('bidderRequestId', bid); reqObj.placementId = parseInt(placementId); reqObj.adUnitCode = getBidIdParameter('adUnitCode', bid); + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 reqObj.auctionId = getBidIdParameter('auctionId', bid); - reqObj.transactionId = getBidIdParameter('transactionId', bid); + reqObj.transactionId = bid.ortb2Imp?.ext?.tid || ''; return reqObj; } function getReferrerInfo(bidderRequest) { diff --git a/modules/smaatoBidAdapter.js b/modules/smaatoBidAdapter.js index c1eb1bb8489..1b50e033074 100644 --- a/modules/smaatoBidAdapter.js +++ b/modules/smaatoBidAdapter.js @@ -1,8 +1,21 @@ -import { deepAccess, isNumber, getDNT, deepSetValue, logInfo, logError, isEmpty, getAdUnitSizes, fill, chunk, getMaxValueFromArray, getMinValueFromArray } from '../src/utils.js'; +import { + chunk, + deepAccess, + deepSetValue, + fill, + getAdUnitSizes, + getDNT, + getMaxValueFromArray, + getMinValueFromArray, + isEmpty, + isNumber, + logError, + logInfo +} from '../src/utils.js'; import {find} from '../src/polyfill.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {config} from '../src/config.js'; -import {ADPOD, BANNER, VIDEO, NATIVE} from '../src/mediaTypes.js'; +import {ADPOD, BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; import CONSTANTS from '../src/constants.json'; const { NATIVE_IMAGE_TYPES } = CONSTANTS; @@ -13,7 +26,7 @@ const CURRENCY = 'USD'; const buildOpenRtbBidRequest = (bidRequest, bidderRequest) => { const requestTemplate = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, at: 1, cur: [CURRENCY], tmax: bidderRequest.timeout, diff --git a/modules/smartadserverBidAdapter.js b/modules/smartadserverBidAdapter.js index fd2d6e16463..8158ade3591 100644 --- a/modules/smartadserverBidAdapter.js +++ b/modules/smartadserverBidAdapter.js @@ -150,7 +150,7 @@ export const spec = { tagId: bid.adUnitCode, // TODO: is 'page' the right value here? pageDomain: bidderRequest && bidderRequest.refererInfo && bidderRequest.refererInfo.page ? bidderRequest.refererInfo.page : undefined, - transactionId: bid.transactionId, + transactionId: bid.ortb2Imp?.ext?.tid, timeout: config.getConfig('bidderTimeout'), bidId: bid.bidId, prebidVersion: '$prebid.version$', diff --git a/modules/smarticoBidAdapter.js b/modules/smarticoBidAdapter.js index edb774f812f..26ecc0f55e3 100644 --- a/modules/smarticoBidAdapter.js +++ b/modules/smarticoBidAdapter.js @@ -66,6 +66,7 @@ export const spec = { method: SMARTICO_CONFIG.method, url: SMARTICO_CONFIG.bidRequestUrl, bids: validBidRequests, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 data: {bidParams: bidParams, auctionId: bidderRequest.auctionId} } return ServerRequestObjects; diff --git a/modules/smilewantedBidAdapter.js b/modules/smilewantedBidAdapter.js index fe14c57d641..b7a25ba58df 100644 --- a/modules/smilewantedBidAdapter.js +++ b/modules/smilewantedBidAdapter.js @@ -34,8 +34,8 @@ export const spec = { w: size[0], h: size[1] })), - transactionId: bid.transactionId, - timeout: config.getConfig('bidderTimeout'), + transactionId: bid.ortb2Imp?.ext?.tid, + timeout: bidderRequest?.timeout, bidId: bid.bidId, /** positionType is undocumented It is unclear what this parameter means. diff --git a/modules/sspBCBidAdapter.js b/modules/sspBCBidAdapter.js index 2ba5ff4b8b7..93ce26e7a48 100644 --- a/modules/sspBCBidAdapter.js +++ b/modules/sspBCBidAdapter.js @@ -104,6 +104,7 @@ const getNotificationPayload = bidData => { // basic notification data const bidBasicData = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 requestId: auctionId || result.requestId, timeout: timeout || result.timeout, pvid: pageView.id, diff --git a/modules/stroeerCoreBidAdapter.js b/modules/stroeerCoreBidAdapter.js index e579b1f94de..15c15a89609 100644 --- a/modules/stroeerCoreBidAdapter.js +++ b/modules/stroeerCoreBidAdapter.js @@ -49,6 +49,7 @@ export const spec = { const refererInfo = bidderRequest.refererInfo; const basePayload = { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 id: bidderRequest.auctionId, ref: refererInfo.ref, ssl: isSecureWindow(), diff --git a/modules/sublimeBidAdapter.js b/modules/sublimeBidAdapter.js index 2d177fbe6eb..db2b02aaef1 100644 --- a/modules/sublimeBidAdapter.js +++ b/modules/sublimeBidAdapter.js @@ -179,6 +179,7 @@ function buildRequests(validBidRequests, bidderRequest) { const bidPayload = { adUnitCode: bid.adUnitCode, + // TODO: fix auctionId/transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bid.auctionId, bidder: bid.bidder, bidderRequestId: bid.bidderRequestId, diff --git a/modules/taboolaBidAdapter.js b/modules/taboolaBidAdapter.js index 49ca8da71c8..8a42013b0be 100644 --- a/modules/taboolaBidAdapter.js +++ b/modules/taboolaBidAdapter.js @@ -3,9 +3,9 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; -import {deepAccess, getWindowSelf, replaceAuctionPrice} from '../src/utils.js' +import {deepAccess, getWindowSelf, replaceAuctionPrice} from '../src/utils.js'; import {getStorageManager} from '../src/storageManager.js'; -import { ajax } from '../src/ajax.js'; +import {ajax} from '../src/ajax.js'; const BIDDER_CODE = 'taboola'; const GVLID = 42; @@ -120,7 +120,7 @@ export const spec = { }; const request = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, imp: imps, site, device, diff --git a/modules/talkadsBidAdapter.js b/modules/talkadsBidAdapter.js index 9c3e13bae47..7d5cd7ec144 100644 --- a/modules/talkadsBidAdapter.js +++ b/modules/talkadsBidAdapter.js @@ -62,6 +62,7 @@ export const spec = { const loServerRequest = { cur: CURRENCY, timeout: poBidderRequest.timeout, + // TODO: fix auctionId/transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 auction_id: paValidBidRequests[0].auctionId, // TODO: should this use auctionId? see #8573 transaction_id: paValidBidRequests[0].transactionId, diff --git a/modules/tappxBidAdapter.js b/modules/tappxBidAdapter.js index a9d08415090..13a16224a79 100644 --- a/modules/tappxBidAdapter.js +++ b/modules/tappxBidAdapter.js @@ -461,7 +461,7 @@ function buildOneRequest(validBidRequests, bidderRequest) { // < Payload Ext // > Payload - payload.id = validBidRequests.auctionId; + payload.id = bidderRequest.bidderRequestId; payload.test = deepAccess(validBidRequests, 'params.test') ? 1 : 0; payload.at = 1; payload.tmax = bidderRequest.timeout ? bidderRequest.timeout : 600; diff --git a/modules/teadsBidAdapter.js b/modules/teadsBidAdapter.js index f750af0f64d..bd498b14629 100644 --- a/modules/teadsBidAdapter.js +++ b/modules/teadsBidAdapter.js @@ -227,8 +227,9 @@ function buildRequestObject(bid) { reqObj.placementId = parseInt(placementId, 10); reqObj.pageId = parseInt(pageId, 10); reqObj.adUnitCode = getBidIdParameter('adUnitCode', bid); + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 reqObj.auctionId = getBidIdParameter('auctionId', bid); - reqObj.transactionId = getBidIdParameter('transactionId', bid); + reqObj.transactionId = bid.ortb2Imp?.ext?.tid || ''; if (gpid) { reqObj.gpid = gpid; } return reqObj; } diff --git a/modules/telariaBidAdapter.js b/modules/telariaBidAdapter.js index 5fb71d1d627..38eefd447a8 100644 --- a/modules/telariaBidAdapter.js +++ b/modules/telariaBidAdapter.js @@ -235,7 +235,7 @@ function generateUrl(bid, bidderRequest) { url += `${getUrlParams(params, bid.schain)}`; - url += (`&transactionId=${bid.transactionId}`); + url += (`&transactionId=${bid.ortb2Imp?.ext?.tid}`); if (bidderRequest) { if (bidderRequest.gdprConsent) { diff --git a/modules/theAdxBidAdapter.js b/modules/theAdxBidAdapter.js index 49d45196d9d..03f303498a1 100644 --- a/modules/theAdxBidAdapter.js +++ b/modules/theAdxBidAdapter.js @@ -166,6 +166,7 @@ export const spec = { requestId: bidderRequest.bidderRequestId, bidId: bidRequest.bidId, adUnitCode: bidRequest['adUnitCode'], + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidRequest['auctionId'], }; } diff --git a/modules/tpmnBidAdapter.js b/modules/tpmnBidAdapter.js index 4dcdf1ef529..bac99d578c5 100644 --- a/modules/tpmnBidAdapter.js +++ b/modules/tpmnBidAdapter.js @@ -157,6 +157,7 @@ function bidToRequest(bid) { bidObj.publisherId = bid.params.publisherId; bidObj.bidId = bid.bidId; bidObj.adUnitCode = bid.adUnitCode; + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 bidObj.auctionId = bid.auctionId; return bidObj; diff --git a/modules/truereachBidAdapter.js b/modules/truereachBidAdapter.js index 13bb558fbf6..8b1656ec7a2 100755 --- a/modules/truereachBidAdapter.js +++ b/modules/truereachBidAdapter.js @@ -25,6 +25,7 @@ export const spec = { let siteId = deepAccess(validBidRequests[0], 'params.site_id'); // TODO: should this use auctionId? see #8573 + // TODO: fix transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 let url = BIDDER_URL + siteId + '?hb=1&transactionId=' + validBidRequests[0].transactionId; return { diff --git a/modules/ttdBidAdapter.js b/modules/ttdBidAdapter.js index 48fda2abc8e..bbe207abc9e 100644 --- a/modules/ttdBidAdapter.js +++ b/modules/ttdBidAdapter.js @@ -66,9 +66,9 @@ function getBidFloor(bid) { return null; } -function getSource(validBidRequests) { +function getSource(validBidRequests, bidderRequest) { let source = { - tid: validBidRequests[0].auctionId + tid: bidderRequest?.ortb2?.source?.tid, }; if (validBidRequests[0].schain) { utils.deepSetValue(source, 'ext.schain', validBidRequests[0].schain); @@ -414,7 +414,7 @@ export const spec = { at: 1, cur: ['USD'], regs: getRegs(bidderRequest), - source: getSource(validBidRequests), + source: getSource(validBidRequests, bidderRequest), ext: getExt(firstPartyData) } diff --git a/modules/unicornBidAdapter.js b/modules/unicornBidAdapter.js index 9cbc79f3e61..66aaf4a17e5 100644 --- a/modules/unicornBidAdapter.js +++ b/modules/unicornBidAdapter.js @@ -55,7 +55,7 @@ function buildOpenRtbBidRequestPayload(validBidRequests, bidderRequest) { }; }); const request = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, at: 1, imp, cur: [UNICORN_DEFAULT_CURRENCY], diff --git a/modules/unrulyBidAdapter.js b/modules/unrulyBidAdapter.js index 77160bb01e6..d893bfd3038 100644 --- a/modules/unrulyBidAdapter.js +++ b/modules/unrulyBidAdapter.js @@ -57,7 +57,7 @@ const RemoveDuplicateSizes = (validBid) => { }; const getRequests = (conf, validBidRequests, bidderRequest) => { - const {bids, bidderRequestId, auctionId, bidderCode, ...bidderRequestData} = bidderRequest; + const {bids, bidderRequestId, bidderCode, ...bidderRequestData} = bidderRequest; const invalidBidsCount = bidderRequest.bids.length - validBidRequests.length; let requestBySiteId = {}; diff --git a/modules/vdoaiBidAdapter.js b/modules/vdoaiBidAdapter.js index 167c378ac6d..fa1e2898a4a 100644 --- a/modules/vdoaiBidAdapter.js +++ b/modules/vdoaiBidAdapter.js @@ -38,6 +38,7 @@ export const spec = { bidId: bidRequest.bidId, // TODO: is 'page' the right value here? referer: bidderRequest.refererInfo.page, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 id: bidRequest.auctionId, mediaType: bidRequest.mediaTypes.video ? 'video' : 'banner' }; diff --git a/modules/vibrantmediaBidAdapter.js b/modules/vibrantmediaBidAdapter.js index 371b70448e5..7368967ff3f 100644 --- a/modules/vibrantmediaBidAdapter.js +++ b/modules/vibrantmediaBidAdapter.js @@ -72,7 +72,7 @@ const transformBidRequests = function(bidRequests) { const transformedBidRequest = { code: bidRequest.adUnitCode || bidRequest.code, id: bidRequest.placementId || params.placementId || params.invCode, - requestId: bidRequest.bidId || bidRequest.transactionId, + requestId: bidRequest.bidId, bidder: bidRequest.bidder, mediaTypes: bidRequest.mediaTypes, bids: bidRequest.bids, diff --git a/modules/vidazooBidAdapter.js b/modules/vidazooBidAdapter.js index 9e7376f18df..8341eb332d2 100644 --- a/modules/vidazooBidAdapter.js +++ b/modules/vidazooBidAdapter.js @@ -57,7 +57,7 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) { schain, mediaTypes, auctionId, - transactionId, + ortb2Imp, bidderRequestId, bidRequestsCount, bidderRequestsCount, @@ -114,8 +114,9 @@ function buildRequest(bid, topWindowUrl, sizes, bidderRequest, bidderTimeout) { gpid: gpid, cat: cat, pagecat: pagecat, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: auctionId, - transactionId: transactionId, + transactionId: ortb2Imp?.ext?.tid, bidderRequestId: bidderRequestId, bidRequestsCount: bidRequestsCount, bidderRequestsCount: bidderRequestsCount, diff --git a/modules/videoheroesBidAdapter.js b/modules/videoheroesBidAdapter.js index e992fae1d06..2f02734a31f 100644 --- a/modules/videoheroesBidAdapter.js +++ b/modules/videoheroesBidAdapter.js @@ -57,6 +57,8 @@ export const spec = { impObject.video = createVideoRequest(br); } else if (br.mediaTypes.native) { impObject.native = { + // TODO: fix transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 + // Also, `id` is not in the ORTB native spec id: br.transactionId, ver: '1.2', request: createNativeRequest(br) diff --git a/modules/videoreachBidAdapter.js b/modules/videoreachBidAdapter.js index 1fc38066407..9fd5853c75e 100644 --- a/modules/videoreachBidAdapter.js +++ b/modules/videoreachBidAdapter.js @@ -21,8 +21,9 @@ export const spec = { adUnitCode: getBidIdParameter('adUnitCode', bid), bidId: getBidIdParameter('bidId', bid), bidderRequestId: getBidIdParameter('bidderRequestId', bid), + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: getBidIdParameter('auctionId', bid), - transactionId: getBidIdParameter('transactionId', bid) + transactionId: bid.ortb2Imp?.ext?.tid, } }) }; diff --git a/modules/vlybyBidAdapter.js b/modules/vlybyBidAdapter.js index 10352179044..08ab415e8ae 100644 --- a/modules/vlybyBidAdapter.js +++ b/modules/vlybyBidAdapter.js @@ -23,6 +23,7 @@ export const spec = { url: `${ENDPOINT}`, data: { request: { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidderRequest.auctionId }, gdprConsent: { diff --git a/modules/voxBidAdapter.js b/modules/voxBidAdapter.js index 7b8cb42bb0a..acf1cc9579c 100644 --- a/modules/voxBidAdapter.js +++ b/modules/voxBidAdapter.js @@ -15,6 +15,7 @@ function buildBidRequests(validBidRequests) { const params = validBidRequest.params; const bidRequest = { bidId: validBidRequest.bidId, + // TODO: fix transactionId leak: https://github.com/prebid/Prebid.js/issues/9781 transactionId: validBidRequest.transactionId, sizes: validBidRequest.sizes, placement: params.placement, @@ -80,6 +81,7 @@ function buildBid(bidData) { bid.vastXml = bidData.content; bid.mediaType = VIDEO; + // TODO: why does this need to iterate through every ad unit? let adUnit = find(auctionManager.getAdUnits(), function (unit) { return unit.transactionId === bidData.transactionId; }); diff --git a/modules/vrtcalBidAdapter.js b/modules/vrtcalBidAdapter.js index e41a5da50cd..0ea52da5814 100644 --- a/modules/vrtcalBidAdapter.js +++ b/modules/vrtcalBidAdapter.js @@ -8,7 +8,7 @@ export const spec = { code: 'vrtcal', supportedMediaTypes: [BANNER], isBidRequestValid: function (bid) { - if (bid.bidId == '' || bid.auctionId == '') { return false; } else { return true; }// No extras params required + return true; }, buildRequests: function (bidRequests) { const requests = bidRequests.map(function (bid) { diff --git a/modules/winrBidAdapter.js b/modules/winrBidAdapter.js index cd807917944..28f2ddb7c6d 100644 --- a/modules/winrBidAdapter.js +++ b/modules/winrBidAdapter.js @@ -402,6 +402,7 @@ function newBid(serverBid, rtbBid, bidderRequest) { const bid = { adType: rtbBid.ad_type, requestId: serverBid.uuid, + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 auctionId: bidRequest.auctionId, cpm: rtbBid.cpm, creativeId: rtbBid.creative_id, diff --git a/modules/xeBidAdapter.js b/modules/xeBidAdapter.js index e7a251008bf..94a66e9980e 100644 --- a/modules/xeBidAdapter.js +++ b/modules/xeBidAdapter.js @@ -44,8 +44,9 @@ function buildRequests(validBidRequests, bidderRequest) { const request = {}; request.bidId = req.bidId; request.banner = deepAccess(req, 'mediaTypes.banner'); + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 request.auctionId = req.auctionId; - request.transactionId = req.transactionId; + request.transactionId = req.ortb2Imp?.ext?.tid; request.sizes = parseSizesInput(getAdUnitSizes(req)); request.schain = req.schain; request.location = { diff --git a/modules/yieldliftBidAdapter.js b/modules/yieldliftBidAdapter.js index 6e4bce15187..d4cafd77c2d 100644 --- a/modules/yieldliftBidAdapter.js +++ b/modules/yieldliftBidAdapter.js @@ -1,4 +1,4 @@ -import {deepSetValue, logInfo, deepAccess} from '../src/utils.js'; +import {deepAccess, deepSetValue, logInfo} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER} from '../src/mediaTypes.js'; @@ -41,7 +41,7 @@ export const spec = { })); const openrtbRequest = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, imp: impressions, site: { domain: bidderRequest.refererInfo?.domain, diff --git a/modules/yieldmoBidAdapter.js b/modules/yieldmoBidAdapter.js index bef453cb4ad..40276aa7a6c 100644 --- a/modules/yieldmoBidAdapter.js +++ b/modules/yieldmoBidAdapter.js @@ -258,6 +258,7 @@ function addPlacement(request) { placementInfo.tid = transactionId; } if (request.auctionId) { + // TODO: fix auctionId leak: https://github.com/prebid/Prebid.js/issues/9781 placementInfo.auctionId = request.auctionId; } return JSON.stringify(placementInfo); diff --git a/modules/yieldoneBidAdapter.js b/modules/yieldoneBidAdapter.js index 2ff747a238a..8ad7e69aa6e 100644 --- a/modules/yieldoneBidAdapter.js +++ b/modules/yieldoneBidAdapter.js @@ -50,7 +50,7 @@ export const spec = { // TODO: is 'page' the right value here? const referrer = bidderRequest.refererInfo.page; const bidId = bidRequest.bidId; - const transactionId = bidRequest.transactionId; + const transactionId = bidRequest.ortb2Imp?.ext?.tid; const unitCode = bidRequest.adUnitCode; const timeout = bidderRequest.timeout; const language = window.navigator.language; diff --git a/modules/zetaBidAdapter.js b/modules/zetaBidAdapter.js index 159ea42cead..710bf0fb567 100644 --- a/modules/zetaBidAdapter.js +++ b/modules/zetaBidAdapter.js @@ -1,6 +1,7 @@ -import { logWarn, deepAccess } from '../src/utils.js'; -import { registerBidder } from '../src/adapters/bidderFactory.js'; +import {deepAccess, logWarn} from '../src/utils.js'; +import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER} from '../src/mediaTypes.js'; + const BIDDER_CODE = 'zeta_global'; const PREBID_DEFINER_ID = '44253' const ENDPOINT_URL = 'https://prebid.rfihub.com/prebid'; @@ -71,7 +72,7 @@ export const spec = { banner: buildBanner(request) }; let payload = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, imp: [impData], site: params.site ? params.site : {}, app: params.app ? params.app : {}, diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index 531384b9f27..aca577ecff2 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -114,7 +114,7 @@ export const spec = { }); let payload = { - id: bidderRequest.auctionId, + id: bidderRequest.bidderRequestId, cur: [DEFAULT_CUR], imp: imps, site: params.site ? params.site : {}, diff --git a/test/spec/modules/33acrossBidAdapter_spec.js b/test/spec/modules/33acrossBidAdapter_spec.js index 252b749597d..aa2621f1fa0 100644 --- a/test/spec/modules/33acrossBidAdapter_spec.js +++ b/test/spec/modules/33acrossBidAdapter_spec.js @@ -423,6 +423,8 @@ describe('33acrossBidAdapter:', function () { this.build = () => bidRequests; } + let bidderRequest; + beforeEach(function() { element = { x: 0, @@ -476,12 +478,12 @@ describe('33acrossBidAdapter:', function () { sandbox.stub(document, 'getElementById').returns(element); sandbox.stub(utils, 'getWindowTop').returns(win); sandbox.stub(utils, 'getWindowSelf').returns(win); + bidderRequest = {bidderRequestId: 'r1'}; }); afterEach(function() { sandbox.restore(); }); - describe('isBidRequestValid:', function() { context('basic validation', function() { it('returns true for valid bidder name values', function() { @@ -770,7 +772,7 @@ describe('33acrossBidAdapter:', function () { Object.assign(element, { width: 600, height: 400 }); - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(buildRequest, serverRequest); }); }); @@ -788,7 +790,7 @@ describe('33acrossBidAdapter:', function () { Object.assign(element, { x: -300, y: 0, width: 207, height: 320 }); - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(buildRequest, serverRequest); }); }); @@ -806,7 +808,7 @@ describe('33acrossBidAdapter:', function () { Object.assign(element, { width: 800, height: 800 }); - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(buildRequest, serverRequest); }); }); @@ -826,7 +828,7 @@ describe('33acrossBidAdapter:', function () { Object.assign(element, { width: 0, height: 0 }); bidRequests[0].mediaTypes.banner.sizes = [[800, 2400]]; - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(buildRequest, serverRequest); }); }); @@ -849,7 +851,7 @@ describe('33acrossBidAdapter:', function () { sandbox.stub(utils, 'getWindowTop').returns({}); sandbox.stub(utils, 'getWindowSelf').returns(win); - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(buildRequest, serverRequest); }); @@ -890,7 +892,7 @@ describe('33acrossBidAdapter:', function () { } }); - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(buildRequest, serverRequest); }); }); @@ -938,7 +940,7 @@ describe('33acrossBidAdapter:', function () { } }); - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(buildRequest, serverRequest); }); }); @@ -964,7 +966,7 @@ describe('33acrossBidAdapter:', function () { win.screen.width = 1024; win.screen.height = 728; - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, {bidderRequestId: 'r1'}); validateBuiltServerRequest(buildRequest, serverRequest); }); @@ -993,7 +995,7 @@ describe('33acrossBidAdapter:', function () { win.innerHeight = 728; win.innerWidth = 727; - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(buildRequest, serverRequest); }); @@ -1016,16 +1018,15 @@ describe('33acrossBidAdapter:', function () { win.document.visibilityState = 'hidden'; sandbox.stub(utils, 'getWindowTop').returns(win); - const [ buildRequest ] = spec.buildRequests(bidRequests); + const [ buildRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(buildRequest, serverRequest); }); }); context('when gdpr consent data exists', function() { - let bidderRequest; - beforeEach(function() { bidderRequest = { + ...bidderRequest, gdprConsent: { consentString: 'foobarMyPreference', gdprApplies: true @@ -1070,12 +1071,6 @@ describe('33acrossBidAdapter:', function () { }); context('when gdpr consent data does not exist', function() { - let bidderRequest; - - beforeEach(function() { - bidderRequest = {}; - }); - it('returns corresponding server requests with default gdpr consent data', function() { const ttxRequest = new TtxRequestBuilder() .withBanner() @@ -1111,10 +1106,9 @@ describe('33acrossBidAdapter:', function () { }); context('when us_privacy consent data exists', function() { - let bidderRequest; - beforeEach(function() { bidderRequest = { + ...bidderRequest, uspConsent: 'foo' } }); @@ -1156,12 +1150,6 @@ describe('33acrossBidAdapter:', function () { }); context('when us_privacy consent data does not exist', function() { - let bidderRequest; - - beforeEach(function() { - bidderRequest = {}; - }); - it('returns corresponding server requests with default us_privacy data', function() { const ttxRequest = new TtxRequestBuilder() .withBanner() @@ -1199,7 +1187,8 @@ describe('33acrossBidAdapter:', function () { context('when refererInfo values are available', function() { context('when refererInfo.page is defined', function() { it('returns corresponding server requests with site.page set', function() { - const bidderRequest = { + bidderRequest = { + ...bidderRequest, refererInfo: { page: 'http://foo.com/bar' } @@ -1222,7 +1211,8 @@ describe('33acrossBidAdapter:', function () { context('when refererInfo.ref is defined', function() { it('returns corresponding server requests with site.ref set', function() { - const bidderRequest = { + bidderRequest = { + ...bidderRequest, refererInfo: { ref: 'google.com' } @@ -1245,12 +1235,6 @@ describe('33acrossBidAdapter:', function () { }); context('when Global Placement ID (gpid) is defined', function() { - let bidderRequest; - - beforeEach(function() { - bidderRequest = {}; - }); - it('passes the Global Placement ID (gpid) in the request', function() { const ttxRequest = new TtxRequestBuilder() .withBanner() @@ -1281,9 +1265,7 @@ describe('33acrossBidAdapter:', function () { context('when referer value is not available', function() { it('returns corresponding server requests without site.page and site.ref set', function() { - const bidderRequest = { - refererInfo: {} - }; + bidderRequest.refererInfo = {}; const ttxRequest = new TtxRequestBuilder() .withBanner() @@ -1347,7 +1329,7 @@ describe('33acrossBidAdapter:', function () { .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1365,7 +1347,7 @@ describe('33acrossBidAdapter:', function () { .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1380,7 +1362,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1397,7 +1379,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1422,7 +1404,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1447,7 +1429,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1464,7 +1446,7 @@ describe('33acrossBidAdapter:', function () { .withProduct('instream') .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); expect(JSON.parse(builtServerRequest.data)).to.deep.equal(ttxRequest); }); @@ -1488,7 +1470,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1508,7 +1490,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1530,7 +1512,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1551,7 +1533,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1575,7 +1557,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1599,7 +1581,7 @@ describe('33acrossBidAdapter:', function () { const serverRequest = new ServerRequestBuilder() .withData(ttxRequest) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); validateBuiltServerRequest(builtServerRequest, serverRequest); }); @@ -1620,7 +1602,7 @@ describe('33acrossBidAdapter:', function () { .withProduct() .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); expect(JSON.parse(builtServerRequest.data)).to.deep.equal(ttxRequest); }); @@ -1648,7 +1630,7 @@ describe('33acrossBidAdapter:', function () { .withFloors('video', [ 1.0 ]) .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); expect(JSON.parse(builtServerRequest.data)).to.deep.equal(ttxRequest); }); @@ -1690,7 +1672,7 @@ describe('33acrossBidAdapter:', function () { .withProduct() .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); expect(JSON.parse(builtServerRequest.data)).to.deep.equal(ttxRequest); }); @@ -1709,7 +1691,7 @@ describe('33acrossBidAdapter:', function () { .withProduct() .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); expect(JSON.parse(builtServerRequest.data)).to.deep.equal(ttxRequest); }); @@ -1756,7 +1738,7 @@ describe('33acrossBidAdapter:', function () { .withProduct() .build(); - const [ builtServerRequest ] = spec.buildRequests(bidRequests, {}); + const [ builtServerRequest ] = spec.buildRequests(bidRequests, bidderRequest); expect(JSON.parse(builtServerRequest.data)).to.deep.equal(ttxRequest); }); @@ -1830,7 +1812,7 @@ describe('33acrossBidAdapter:', function () { .withUrl('https://ssc.33across.com/api/v1/hb?guid=sample33xGUID123456780') .build(); - const builtServerRequests = spec.buildRequests(bidRequests, {}); + const builtServerRequests = spec.buildRequests(bidRequests, bidderRequest); expect(builtServerRequests).to.deep.equal([serverReq1, serverReq2, serverReq3]); }); @@ -1887,7 +1869,7 @@ describe('33acrossBidAdapter:', function () { .withUrl('https://ssc.33across.com/api/v1/hb?guid=sample33xGUID123456780') .build(); - const builtServerRequests = spec.buildRequests(bidRequests, {}); + const builtServerRequests = spec.buildRequests(bidRequests, bidderRequest); expect(builtServerRequests) .to.deep.equal([ @@ -2219,7 +2201,7 @@ describe('33acrossBidAdapter:', function () { expect(spec.getUserSyncs(syncOptions)).to.deep.equal([]); }); - }); + }, bidderRequest); context('when iframe is enabled', function() { let syncOptions; @@ -2231,7 +2213,7 @@ describe('33acrossBidAdapter:', function () { context('when there is no gdpr consent data', function() { it('returns sync urls with undefined consent string as param', function() { - spec.buildRequests(bidRequests); + spec.buildRequests(bidRequests, bidderRequest); const syncResults = spec.getUserSyncs(syncOptions, {}, undefined); const expectedSyncs = [ @@ -2251,7 +2233,7 @@ describe('33acrossBidAdapter:', function () { context('when gdpr applies but there is no consent string', function() { it('returns sync urls with undefined consent string as param and gdpr=1', function() { - spec.buildRequests(bidRequests); + spec.buildRequests(bidRequests, bidderRequest); const syncResults = spec.getUserSyncs(syncOptions, {}, {gdprApplies: true}); const expectedSyncs = [ @@ -2271,7 +2253,7 @@ describe('33acrossBidAdapter:', function () { context('when gdpr applies and there is consent string', function() { it('returns sync urls with gdpr_consent=consent string as param and gdpr=1', function() { - spec.buildRequests(bidRequests); + spec.buildRequests(bidRequests, bidderRequest); const syncResults = spec.getUserSyncs(syncOptions, {}, {gdprApplies: true, consentString: 'consent123A'}); const expectedSyncs = [ @@ -2291,7 +2273,7 @@ describe('33acrossBidAdapter:', function () { context('when gdpr does not apply and there is no consent string', function() { it('returns sync urls with undefined consent string as param and gdpr=0', function() { - spec.buildRequests(bidRequests); + spec.buildRequests(bidRequests, bidderRequest); const syncResults = spec.getUserSyncs(syncOptions, {}, {gdprApplies: false}); const expectedSyncs = [ @@ -2310,7 +2292,7 @@ describe('33acrossBidAdapter:', function () { context('when gdpr is unknown and there is consent string', function() { it('returns sync urls with only consent string as param', function() { - spec.buildRequests(bidRequests); + spec.buildRequests(bidRequests, bidderRequest); const syncResults = spec.getUserSyncs(syncOptions, {}, {consentString: 'consent123A'}); const expectedSyncs = [ @@ -2329,7 +2311,7 @@ describe('33acrossBidAdapter:', function () { context('when gdpr does not apply and there is consent string (yikes!)', function() { it('returns sync urls with consent string as param and gdpr=0', function() { - spec.buildRequests(bidRequests); + spec.buildRequests(bidRequests, bidderRequest); const syncResults = spec.getUserSyncs(syncOptions, {}, {gdprApplies: false, consentString: 'consent123A'}); const expectedSyncs = [ @@ -2348,7 +2330,7 @@ describe('33acrossBidAdapter:', function () { context('when there is no usPrivacy data', function() { it('returns sync urls with undefined consent string as param', function() { - spec.buildRequests(bidRequests); + spec.buildRequests(bidRequests, bidderRequest); const syncResults = spec.getUserSyncs(syncOptions, {}); const expectedSyncs = [ @@ -2368,7 +2350,7 @@ describe('33acrossBidAdapter:', function () { context('when there is usPrivacy data', function() { it('returns sync urls with consent string as param', function() { - spec.buildRequests(bidRequests); + spec.buildRequests(bidRequests, bidderRequest); const syncResults = spec.getUserSyncs(syncOptions, {}, {}, 'foo'); const expectedSyncs = [ diff --git a/test/spec/modules/adbookpspBidAdapter_spec.js b/test/spec/modules/adbookpspBidAdapter_spec.js index f7e401fefbd..3f26cd7749f 100755 --- a/test/spec/modules/adbookpspBidAdapter_spec.js +++ b/test/spec/modules/adbookpspBidAdapter_spec.js @@ -960,6 +960,11 @@ const bidderRequest = { consentString: 'gdprConsentString', }, uspConsent: 'uspConsentString', + ortb2: { + source: { + tid: 'aaccee333311' + } + } }; const bannerBid = { diff --git a/test/spec/modules/adfBidAdapter_spec.js b/test/spec/modules/adfBidAdapter_spec.js index 574f559e994..88f595b6c00 100644 --- a/test/spec/modules/adfBidAdapter_spec.js +++ b/test/spec/modules/adfBidAdapter_spec.js @@ -171,7 +171,10 @@ describe('Adf adapter', function () { bidId: 'bidId', params: { siteId: 'siteId' }, }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' }, auctionId: 'tid' }).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { + refererInfo: {page: 'page'}, + ortb2: {source: {tid: 'tid'}} + }).data); assert.equal(request.source.tid, 'tid'); assert.equal(request.source.fd, 1); diff --git a/test/spec/modules/adkernelAdnBidAdapter_spec.js b/test/spec/modules/adkernelAdnBidAdapter_spec.js index b9b31ab5ebf..ff7ed9f145d 100644 --- a/test/spec/modules/adkernelAdnBidAdapter_spec.js +++ b/test/spec/modules/adkernelAdnBidAdapter_spec.js @@ -220,7 +220,7 @@ describe('AdkernelAdn adapter', function () { } describe('banner request building', function () { - let [_, tagRequests] = buildRequest([bid1_pub1]); + let [_, tagRequests] = buildRequest([bid1_pub1], {ortb2: {source: {tid: 'mock-tid'}}}); let tagRequest = tagRequests[0]; it('should have request id', function () { diff --git a/test/spec/modules/adtrueBidAdapter_spec.js b/test/spec/modules/adtrueBidAdapter_spec.js index 1daf8b645c7..df8f9013534 100644 --- a/test/spec/modules/adtrueBidAdapter_spec.js +++ b/test/spec/modules/adtrueBidAdapter_spec.js @@ -28,7 +28,11 @@ describe('AdTrueBidAdapter', function () { bidId: '23acc48ad47af5', requestId: '0fb4905b-9456-4152-86be-c6f6d259ba99', bidderRequestId: '1c56ad30b9b8ca8', - transactionId: '92489f71-1bf2-49a0-adf9-000cea934729', + ortb2Imp: { + ext: { + tid: '92489f71-1bf2-49a0-adf9-000cea934729', + } + }, schain: { 'ver': '1.0', 'complete': 1, @@ -280,7 +284,8 @@ describe('AdTrueBidAdapter', function () { expect(data.cur[0]).to.equal('USD'); // currency expect(data.site.domain).to.be.a('string'); // domain should be set expect(data.site.publisher.id).to.equal(bidRequests[0].params.publisherId); // publisher Id - expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].transactionId); // Prebid TransactionId + expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId + expect(data.source.tid).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId expect(data.imp[0].id).to.equal(bidRequests[0].bidId); // Prebid bid id is passed as id expect(data.imp[0].bidfloor).to.equal(bidRequests[0].params.reserve); // reverse expect(data.imp[0].tagid).to.equal(bidRequests[0].params.zoneId); // zoneId @@ -302,7 +307,8 @@ describe('AdTrueBidAdapter', function () { expect(data.cur[0]).to.equal('USD'); // currency expect(data.site.domain).to.be.a('string'); // domain should be set expect(data.site.publisher.id).to.equal(bidRequests[0].params.publisherId); // publisher Id - expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].transactionId); // Prebid TransactionId + expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId + expect(data.source.tid).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId expect(data.imp[0].id).to.equal(bidRequests[0].bidId); // Prebid bid id is passed as id expect(data.imp[0].bidfloor).to.equal(parseFloat(bidRequests[0].params.reserve)); // reverse expect(data.imp[0].tagid).to.equal(bidRequests[0].params.zoneId); // zoneId @@ -321,7 +327,8 @@ describe('AdTrueBidAdapter', function () { expect(data.cur[0]).to.equal('USD'); // currency expect(data.site.domain).to.be.a('string'); // domain should be set expect(data.site.publisher.id).to.equal(bidRequests[0].params.publisherId); // publisher Id - expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].transactionId); // Prebid TransactionId + expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId + expect(data.source.tid).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId expect(data.imp[0].id).to.equal(bidRequests[0].bidId); // Prebid bid id is passed as id expect(data.imp[0].bidfloor).to.equal(parseFloat(bidRequests[0].params.reserve)); // reverse expect(data.imp[0].tagid).to.equal(bidRequests[0].params.zoneId); // zoneId diff --git a/test/spec/modules/aduptechBidAdapter_spec.js b/test/spec/modules/aduptechBidAdapter_spec.js index 8dbdbbfeab5..2b909ebe20d 100644 --- a/test/spec/modules/aduptechBidAdapter_spec.js +++ b/test/spec/modules/aduptechBidAdapter_spec.js @@ -469,7 +469,11 @@ describe('AduptechBidAdapter', () => { { bidId: 'bidId1', adUnitCode: 'adUnitCode1', - transactionId: 'transactionId1', + ortb2Imp: { + ext: { + tid: 'transactionId1', + } + }, mediaTypes: { banner: { sizes: [[100, 200], [300, 400]] @@ -483,7 +487,11 @@ describe('AduptechBidAdapter', () => { { bidId: 'bidId2', adUnitCode: 'adUnitCode2', - transactionId: 'transactionId2', + ortb2Imp: { + ext: { + tid: 'transactionId2', + } + }, mediaTypes: { banner: { sizes: [[100, 200]] @@ -497,7 +505,13 @@ describe('AduptechBidAdapter', () => { { bidId: 'bidId3', adUnitCode: 'adUnitCode3', - transactionId: 'transactionId3', + ortb2Imp: { + ext: { + tid: { + transactionId: 'transactionId3', + } + } + }, mediaTypes: { native: { image: { @@ -536,14 +550,14 @@ describe('AduptechBidAdapter', () => { imp: [ { bidId: validBidRequests[0].bidId, - transactionId: validBidRequests[0].transactionId, + transactionId: validBidRequests[0].ortb2Imp.ext.tid, adUnitCode: validBidRequests[0].adUnitCode, params: validBidRequests[0].params, banner: validBidRequests[0].mediaTypes.banner }, { bidId: validBidRequests[1].bidId, - transactionId: validBidRequests[1].transactionId, + transactionId: validBidRequests[1].ortb2Imp.ext.tid, adUnitCode: validBidRequests[1].adUnitCode, params: validBidRequests[1].params, banner: validBidRequests[1].mediaTypes.banner @@ -565,7 +579,7 @@ describe('AduptechBidAdapter', () => { imp: [ { bidId: validBidRequests[2].bidId, - transactionId: validBidRequests[2].transactionId, + transactionId: validBidRequests[2].ortb2Imp.ext.tid, adUnitCode: validBidRequests[2].adUnitCode, params: validBidRequests[2].params, native: validBidRequests[2].mediaTypes.native @@ -592,7 +606,11 @@ describe('AduptechBidAdapter', () => { const bidRequest = { bidId: 'bidId1', adUnitCode: 'adUnitCode1', - transactionId: 'transactionId1', + ortb2Imp: { + ext: { + tid: 'transactionId1', + } + }, mediaTypes: { banner: { sizes: [[100, 200], [300, 400]] @@ -630,7 +648,7 @@ describe('AduptechBidAdapter', () => { imp: [ { bidId: bidRequest.bidId, - transactionId: bidRequest.transactionId, + transactionId: bidRequest.ortb2Imp.ext.tid, adUnitCode: bidRequest.adUnitCode, params: bidRequest.params, banner: { diff --git a/test/spec/modules/adxcgBidAdapter_spec.js b/test/spec/modules/adxcgBidAdapter_spec.js index e2d9e2a15e4..65c7584b428 100644 --- a/test/spec/modules/adxcgBidAdapter_spec.js +++ b/test/spec/modules/adxcgBidAdapter_spec.js @@ -165,7 +165,10 @@ describe('Adxcg adapter', function () { bidId: 'bidId', params: {siteId: 'siteId'}, }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, {refererInfo: {referer: 'page'}, auctionId: 'tid'}).data); + let request = JSON.parse(spec.buildRequests(validBidRequests, { + refererInfo: {referer: 'page'}, + ortb2: {source: {tid: 'tid'}} + }).data); assert.equal(request.source.tid, 'tid'); assert.equal(request.source.fd, 1); diff --git a/test/spec/modules/adyoulikeBidAdapter_spec.js b/test/spec/modules/adyoulikeBidAdapter_spec.js index c69d31d1bbd..7310f736f7e 100644 --- a/test/spec/modules/adyoulikeBidAdapter_spec.js +++ b/test/spec/modules/adyoulikeBidAdapter_spec.js @@ -44,7 +44,11 @@ describe('Adyoulike Adapter', function () { 'params': { 'placement': 'placement_0' }, - 'transactionId': 'bid_id_0_transaction_id' + 'ortb2Imp': { + 'ext': { + 'tid': 'bid_id_0_transaction_id' + } + }, } ], }; @@ -108,7 +112,11 @@ describe('Adyoulike Adapter', function () { ] } }, - 'transactionId': 'bid_id_0_transaction_id' + ortb2Imp: { + ext: { + tid: 'bid_id_0_transaction_id' + } + } } ]; @@ -142,7 +150,11 @@ describe('Adyoulike Adapter', function () { }, } }, - 'transactionId': 'bid_id_0_transaction_id' + ortb2Imp: { + ext: { + tid: 'bid_id_0_transaction_id' + } + }, } ]; @@ -162,7 +174,11 @@ describe('Adyoulike Adapter', function () { 'playerSize': [[ 640, 480 ]] } }, - 'transactionId': 'bid_id_0_transaction_id' + ortb2Imp: { + ext: { + tid: 'bid_id_0_transaction_id' + } + }, } ]; @@ -185,7 +201,11 @@ describe('Adyoulike Adapter', function () { } }, }, - 'transactionId': 'bid_id_0_transaction_id' + ortb2Imp: { + ext: { + tid: 'bid_id_0_transaction_id' + } + }, } ]; @@ -286,7 +306,11 @@ describe('Adyoulike Adapter', function () { {'sizes': ['300x250'] } }, - 'transactionId': 'bid_id_0_transaction_id' + ortb2Imp: { + ext: { + tid: 'bid_id_0_transaction_id' + } + }, } ]; @@ -304,7 +328,11 @@ describe('Adyoulike Adapter', function () { {'sizes': ['300x250'] } }, - 'transactionId': 'bid_id_0_transaction_id' + ortb2Imp: { + ext: { + tid: 'bid_id_0_transaction_id' + } + }, }, { 'bidId': 'bid_id_1', @@ -319,7 +347,11 @@ describe('Adyoulike Adapter', function () { {'sizes': ['300x600'] } }, - 'transactionId': 'bid_id_1_transaction_id' + ortb2Imp: { + ext: { + tid: 'bid_id_1_transaction_id' + } + }, }, { 'bidId': 'bid_id_2', @@ -327,7 +359,11 @@ describe('Adyoulike Adapter', function () { 'placementCode': 'adunit/hb-2', 'params': {}, 'sizes': '300x400', - 'transactionId': 'bid_id_2_transaction_id' + ortb2Imp: { + ext: { + tid: 'bid_id_2_transaction_id' + } + }, }, { 'bidId': 'bid_id_3', @@ -336,7 +372,11 @@ describe('Adyoulike Adapter', function () { 'params': { 'placement': 'placement_3' }, - 'transactionId': 'bid_id_3_transaction_id' + ortb2Imp: { + ext: { + tid: 'bid_id_3_transaction_id' + } + }, } ]; diff --git a/test/spec/modules/afpBidAdapter_spec.js b/test/spec/modules/afpBidAdapter_spec.js index 5b658a66351..12bd19da9ca 100644 --- a/test/spec/modules/afpBidAdapter_spec.js +++ b/test/spec/modules/afpBidAdapter_spec.js @@ -125,7 +125,11 @@ const getTransformedConfig = ({mediaTypes, params}) => { bidId, bidder: BIDDER_CODE, mediaTypes: mediaTypes, - transactionId, + ortb2Imp: { + ext: { + tid: transactionId + } + } } } const validBidRequests = Object.keys(configByPlaceType).map(key => getTransformedConfig(configByPlaceType[key])) diff --git a/test/spec/modules/aidemBidAdapter_spec.js b/test/spec/modules/aidemBidAdapter_spec.js index 8268efde2a1..8b401491ba0 100644 --- a/test/spec/modules/aidemBidAdapter_spec.js +++ b/test/spec/modules/aidemBidAdapter_spec.js @@ -171,7 +171,11 @@ const DEFAULT_VALID_BANNER_REQUESTS = [ placementId: '13144370' }, src: 'client', - transactionId: '54a58774-7a41-494e-9aaf-fa7b79164f0c' + ortb2Imp: { + ext: { + tid: '54a58774-7a41-494e-9aaf-fa7b79164f0c', + }, + }, } ]; @@ -196,7 +200,11 @@ const DEFAULT_VALID_VIDEO_REQUESTS = [ placementId: '13144370' }, src: 'client', - transactionId: '54a58774-7a41-494e-9aaf-fa7b79164f0c' + ortb2Imp: { + ext: { + tid: '54a58774-7a41-494e-9aaf-fa7b79164f0c', + } + }, } ]; diff --git a/test/spec/modules/astraoneBidAdapter_spec.js b/test/spec/modules/astraoneBidAdapter_spec.js index 0e545081869..80d6dcdf627 100644 --- a/test/spec/modules/astraoneBidAdapter_spec.js +++ b/test/spec/modules/astraoneBidAdapter_spec.js @@ -8,7 +8,11 @@ function getSlotConfigs(mediaTypes, params) { bidId: '2df8c0733f284e', bidder: 'astraone', mediaTypes: mediaTypes, - transactionId: '31a58515-3634-4e90-9c96-f86196db1459' + ortb2Imp: { + ext: { + tid: '31a58515-3634-4e90-9c96-f86196db1459' + } + } } } diff --git a/test/spec/modules/bluebillywigBidAdapter_spec.js b/test/spec/modules/bluebillywigBidAdapter_spec.js index 0826acc7f29..4b58e3507db 100644 --- a/test/spec/modules/bluebillywigBidAdapter_spec.js +++ b/test/spec/modules/bluebillywigBidAdapter_spec.js @@ -1,10 +1,8 @@ -import { expect } from 'chai'; -import { spec } from 'modules/bluebillywigBidAdapter.js'; -import * as bidderFactory from 'src/adapters/bidderFactory.js'; -import { auctionManager } from 'src/auctionManager.js'; -import { deepClone, deepAccess } from 'src/utils.js'; -import { config } from 'src/config.js'; -import { VIDEO } from 'src/mediaTypes.js'; +import {expect} from 'chai'; +import {spec} from 'modules/bluebillywigBidAdapter.js'; +import {deepAccess, deepClone} from 'src/utils.js'; +import {config} from 'src/config.js'; +import {VIDEO} from 'src/mediaTypes.js'; const BB_CONSTANTS = { BIDDER_CODE: 'bluebillywig', @@ -254,7 +252,11 @@ describe('BlueBillywigAdapter', () => { const baseValidBidRequests = [baseValidBid]; const validBidderRequest = { - auctionId: '12abc345-67d8-9012-e345-6f78901a2b34', + ortb2: { + source: { + tid: '12abc345-67d8-9012-e345-6f78901a2b34', + } + }, auctionStart: 1585918458868, bidderCode: BB_CONSTANTS.BIDDER_CODE, bidderRequestId: '1a2345b67c8d9e0', @@ -293,9 +295,9 @@ describe('BlueBillywigAdapter', () => { const request = spec.buildRequests(baseValidBidRequests, validBidderRequest); const payload = JSON.parse(request.data); - expect(payload.id).to.equal(validBidderRequest.auctionId); + expect(payload.id).to.exist; expect(payload.source).to.be.an('object'); - expect(payload.source.tid).to.equal(validBidderRequest.auctionId); + expect(payload.source.tid).to.equal(validBidderRequest.ortb2.source.tid); expect(payload.tmax).to.equal(BB_CONSTANTS.DEFAULT_TIMEOUT); expect(payload.imp).to.be.an('array'); expect(payload.test).to.be.a('number'); diff --git a/test/spec/modules/browsiBidAdapter_spec.js b/test/spec/modules/browsiBidAdapter_spec.js index 2879a60cbcf..9693972fd7f 100644 --- a/test/spec/modules/browsiBidAdapter_spec.js +++ b/test/spec/modules/browsiBidAdapter_spec.js @@ -64,7 +64,11 @@ describe('browsi Bid Adapter Test', function () { 'sizes': [640, 480], 'bidId': '12345678', 'requestId': '1234567-3456-4562-7689-98765434A', - 'transactionId': '1234567-3456-4562-7689-98765434B', + ortb2Imp: { + ext: { + tid: '1234567-3456-4562-7689-98765434B', + } + }, 'schain': {}, 'mediaTypes': {video: {playerSize: [640, 480]}} } @@ -112,7 +116,7 @@ describe('browsi Bid Adapter Test', function () { video: {playerSize: [640, 480]}, aUCode: inputRequest.adUnitCode, aID: inputRequest.auctionId, - tID: inputRequest.transactionId, + tID: inputRequest.ortb2Imp.ext.tid, schain: inputRequest.schain, params: inputRequest.params } diff --git a/test/spec/modules/ccxBidAdapter_spec.js b/test/spec/modules/ccxBidAdapter_spec.js index d346a14d38a..cbae441e7e7 100644 --- a/test/spec/modules/ccxBidAdapter_spec.js +++ b/test/spec/modules/ccxBidAdapter_spec.js @@ -81,7 +81,7 @@ describe('ccxAdapter', function () { }); it('Valid bid request - default', function () { - let response = spec.buildRequests(bids, {bids}); + let response = spec.buildRequests(bids, {bids, bidderRequestId: 'id'}); expect(response).to.be.not.empty; expect(response.data).to.be.not.empty; diff --git a/test/spec/modules/cleanmedianetBidAdapter_spec.js b/test/spec/modules/cleanmedianetBidAdapter_spec.js index a19cdf7fd35..3c73dac07de 100644 --- a/test/spec/modules/cleanmedianetBidAdapter_spec.js +++ b/test/spec/modules/cleanmedianetBidAdapter_spec.js @@ -310,7 +310,7 @@ describe('CleanmedianetAdapter', () => { response = spec.buildRequests([bidRequest], bidRequest)[0]; expect(response.method).to.equal('POST'); expect(response.url).to.match(new RegExp(`^https://bidder\\.cleanmediaads\\.com/r/${supplyPartnerId}/bidr\\?rformat=open_rtb&reqformat=rtb_json&bidder=prebid$`, 'g')); - expect(response.data.id).to.equal(bidRequest.auctionId); + expect(response.data.id).to.equal(bidRequest.bidId); const bidRequestWithEndpoint = utils.deepClone(bidRequest); bidRequestWithEndpoint.params.rtbEndpoint = 'https://bidder.cleanmediaads.com/a12'; response = spec.buildRequests([bidRequestWithEndpoint], bidRequest)[0]; @@ -330,7 +330,7 @@ describe('CleanmedianetAdapter', () => { expect(response.data.site.page).to.equal('http://www.test.com/page.html'); expect(response.data.site.ref).to.equal('http://referrer.com'); expect(response.data.imp.length).to.equal(1); - expect(response.data.imp[0].id).to.equal(bidRequest.transactionId); + expect(response.data.imp[0].id).to.equal(bidRequest.bidId); expect(response.data.imp[0].instl).to.equal(0); expect(response.data.imp[0].tagid).to.equal(bidRequest.adUnitCode); expect(response.data.imp[0].bidfloor).to.equal(0); diff --git a/test/spec/modules/codefuelBidAdapter_spec.js b/test/spec/modules/codefuelBidAdapter_spec.js index 354cbe63ffa..6123f768d88 100644 --- a/test/spec/modules/codefuelBidAdapter_spec.js +++ b/test/spec/modules/codefuelBidAdapter_spec.js @@ -1,6 +1,7 @@ import {expect} from 'chai'; import {spec} from 'modules/codefuelBidAdapter.js'; import {config} from 'src/config.js'; +import * as utils from 'src/utils.js'; import {server} from 'test/mocks/xhr'; const USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/92.0.4515.159 Safari/537.36'; @@ -9,6 +10,13 @@ const setUADefault = () => { window.navigator.__defineGetter__('userAgent', func const setUAMock = () => { window.navigator.__defineGetter__('userAgent', function () { return USER_AGENT }) }; describe('Codefuel Adapter', function () { + let sandbox; + beforeEach(() => { + sandbox = sinon.sandbox.create(); + }); + afterEach(() => { + sandbox.restore(); + }) describe('Bid request and response', function () { const commonBidRequest = { bidder: 'codefuel', @@ -137,6 +145,7 @@ describe('Codefuel Adapter', function () { const commonBidderRequest = { timeout: 500, + bidderRequestId: 'mock-uuid', auctionId: '12043683-3254-4f74-8934-f941b085579e', refererInfo: { page: 'https://example.com/', @@ -157,7 +166,7 @@ describe('Codefuel Adapter', function () { devicetype: 2, ua: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/92.0.4515.159 Safari/537.36' }, - id: '12043683-3254-4f74-8934-f941b085579e', + id: 'mock-uuid', imp: [ { banner: { diff --git a/test/spec/modules/colossussspBidAdapter_spec.js b/test/spec/modules/colossussspBidAdapter_spec.js index adb9137d892..0d16f9897fa 100644 --- a/test/spec/modules/colossussspBidAdapter_spec.js +++ b/test/spec/modules/colossussspBidAdapter_spec.js @@ -19,12 +19,12 @@ describe('ColossussspAdapter', function () { }, ortb2Imp: { ext: { + tid: '3bb2f6da-87a6-4029-aeb0-bfe951372e62', data: { pbadslot: '/19968336/prebid_cache_video_adunit' } } }, - transactionId: '3bb2f6da-87a6-4029-aeb0-bfe951372e62', schain: { ver: '1.0', complete: 1, diff --git a/test/spec/modules/concertBidAdapter_spec.js b/test/spec/modules/concertBidAdapter_spec.js index f5c807b4703..96c98e5e5a2 100644 --- a/test/spec/modules/concertBidAdapter_spec.js +++ b/test/spec/modules/concertBidAdapter_spec.js @@ -48,7 +48,11 @@ describe('ConcertAdapter', function () { }, adUnitCode: 'desktop_leaderboard_variable', bidId: 'foo', - transactionId: '', + ortb2Imp: { + ext: { + tid: '' + } + }, sizes: [[1030, 590]] } ]; diff --git a/test/spec/modules/conversantBidAdapter_spec.js b/test/spec/modules/conversantBidAdapter_spec.js index bf02a2893f0..59ebefa2d60 100644 --- a/test/spec/modules/conversantBidAdapter_spec.js +++ b/test/spec/modules/conversantBidAdapter_spec.js @@ -256,6 +256,11 @@ describe('Conversant adapter tests', function() { const bidderRequest = { refererInfo: { page: page + }, + ortb2: { + source: { + tid: 'tid000' + } } }; const request = spec.buildRequests(bidRequests, bidderRequest); @@ -263,8 +268,8 @@ describe('Conversant adapter tests', function() { expect(request.url).to.equal('https://web.hb.ad.cpe.dotomi.com/cvx/client/hb/ortb/25'); const payload = request.data; - expect(payload).to.have.property('id', 'req000'); - expect(payload.source).to.have.property('tid', 'req000'); + expect(payload).to.have.property('id'); + expect(payload.source).to.have.property('tid', 'tid000'); expect(payload).to.have.property('at', 1); expect(payload).to.have.property('imp'); expect(payload.imp).to.be.an('array').with.lengthOf(8); diff --git a/test/spec/modules/criteoBidAdapter_spec.js b/test/spec/modules/criteoBidAdapter_spec.js index 17527eb42c7..05bdd73ac86 100755 --- a/test/spec/modules/criteoBidAdapter_spec.js +++ b/test/spec/modules/criteoBidAdapter_spec.js @@ -609,7 +609,11 @@ describe('The Criteo bidding adapter', function () { { bidder: 'criteo', adUnitCode: 'bid-123', - transactionId: 'transaction-123', + ortb2Imp: { + ext: { + tid: 'transaction-123', + }, + }, mediaTypes: { banner: { sizes: [[728, 90]] @@ -628,7 +632,11 @@ describe('The Criteo bidding adapter', function () { { bidder: 'criteo', adUnitCode: 'bid-123', - transactionId: 'transaction-123', + ortb2Imp: { + ext: { + tid: 'transaction-123', + }, + }, mediaTypes: { banner: { sizes: [[728, 90]] @@ -841,7 +849,11 @@ describe('The Criteo bidding adapter', function () { { bidder: 'criteo', adUnitCode: 'bid-123', - transactionId: 'transaction-123', + ortb2Imp: { + ext: { + tid: 'transaction-123', + }, + }, mediaTypes: { banner: { sizes: [[300, 250], [728, 90]] @@ -880,7 +892,11 @@ describe('The Criteo bidding adapter', function () { { bidder: 'criteo', adUnitCode: 'bid-123', - transactionId: 'transaction-123', + ortb2Imp: { + ext: { + tid: 'transaction-123', + }, + }, mediaTypes: { banner: { sizes: [[728, 90]] @@ -893,7 +909,11 @@ describe('The Criteo bidding adapter', function () { { bidder: 'criteo', adUnitCode: 'bid-234', - transactionId: 'transaction-234', + ortb2Imp: { + ext: { + tid: 'transaction-234', + }, + }, mediaTypes: { banner: { sizes: [[300, 250], [728, 90]] diff --git a/test/spec/modules/datawrkzBidAdapter_spec.js b/test/spec/modules/datawrkzBidAdapter_spec.js index 3ddc2bad1cf..5524e318600 100644 --- a/test/spec/modules/datawrkzBidAdapter_spec.js +++ b/test/spec/modules/datawrkzBidAdapter_spec.js @@ -462,7 +462,6 @@ describe('datawrkzAdapterTests', function () { expect(result[0].ad).to.equal(decodeURIComponent(serverResponse.body.seatbid[0].bid[0].adm + '')); expect(result[0].creativeId).to.equal('1'); expect(result[0].bidderCode).to.equal(request.bidRequest.bidder); - expect(result[0].transactionId).to.equal(request.bidRequest.transactionId); expect(result[0].mediaType).to.equal('banner'); }); @@ -540,7 +539,6 @@ describe('datawrkzAdapterTests', function () { expect(result[0].native.desc).to.equal('Test body'); expect(result[0].creativeId).to.equal('1'); expect(result[0].bidderCode).to.equal(request.bidRequest.bidder); - expect(result[0].transactionId).to.equal(request.bidRequest.transactionId); expect(result[0].mediaType).to.equal('native'); }); @@ -610,7 +608,6 @@ describe('datawrkzAdapterTests', function () { expect(result[0].adserverTargeting.hb_protocol).to.equal('3'); expect(result[0].creativeId).to.equal('1'); expect(result[0].bidderCode).to.equal(request.bidRequest.bidder); - expect(result[0].transactionId).to.equal(request.bidRequest.transactionId); expect(result[0].mediaType).to.equal('video'); }); @@ -649,7 +646,6 @@ describe('datawrkzAdapterTests', function () { expect(result[0].renderer).to.exist; expect(result[0].creativeId).to.equal('1'); expect(result[0].bidderCode).to.equal(request.bidRequest.bidder); - expect(result[0].transactionId).to.equal(request.bidRequest.transactionId); expect(result[0].mediaType).to.equal('video'); }); }); diff --git a/test/spec/modules/dianomiBidAdapter_spec.js b/test/spec/modules/dianomiBidAdapter_spec.js index 61509913c41..0838762d750 100644 --- a/test/spec/modules/dianomiBidAdapter_spec.js +++ b/test/spec/modules/dianomiBidAdapter_spec.js @@ -162,7 +162,7 @@ describe('Dianomi adapter', () => { }, ]; let request = JSON.parse( - spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' }, auctionId: 'tid' }).data + spec.buildRequests(validBidRequests, {refererInfo: {page: 'page'}, ortb2: {source: {tid: 'tid'}}}).data ); assert.equal(request.source.tid, 'tid'); diff --git a/test/spec/modules/etargetBidAdapter_spec.js b/test/spec/modules/etargetBidAdapter_spec.js index 55394dcdeea..a950100d612 100644 --- a/test/spec/modules/etargetBidAdapter_spec.js +++ b/test/spec/modules/etargetBidAdapter_spec.js @@ -173,7 +173,6 @@ describe('etarget adapter', function () { assert.isNotNull(result.reason); assert.equal(result.ttl, 360); assert.equal(result.ad, ''); - assert.equal(result.transactionId, '5f33781f-9552-4ca1'); }); it('should set correct netRevenue', function () { @@ -296,7 +295,11 @@ describe('etarget adapter', function () { tid: 45, placementCode: placementCode[0], sizes: [[300, 250], [250, 300], [300, 600], [600, 300]], - transactionId: '5f33781f-9552-4ca1' + ortb2Imp: { + ext: { + tid: '5f33781f-9552-4ca1' + } + } }, { adUnitCode: placementCode[1], @@ -307,7 +310,11 @@ describe('etarget adapter', function () { params: params[1], placementCode: placementCode[1], sizes: [[300, 250], [250, 300], [300, 600], [600, 300]], - transactionId: '5f33781f-9552-4iuy' + ortb2Imp: { + ext: { + tid: '5f33781f-9552-4iuy' + } + } }, { adUnitCode: placementCode[2], @@ -318,7 +325,11 @@ describe('etarget adapter', function () { params: params[2], placementCode: placementCode[2], sizes: [[300, 250], [250, 300], [300, 600], [600, 300]], - transactionId: '5f33781f-9552-7ev3' + ortb2Imp: { + ext: { + tid: '5f33781f-9552-7ev3' + } + } }, { adUnitCode: placementCode[3], @@ -329,7 +340,11 @@ describe('etarget adapter', function () { params: params[2], placementCode: placementCode[2], sizes: [], - transactionId: '5f33781f-9552-7ev3' + ortb2Imp: { + ext: { + tid: '5f33781f-9552-7ev3' + } + } }, { adUnitCode: placementCode[4], @@ -340,7 +355,11 @@ describe('etarget adapter', function () { params: params[2], placementCode: placementCode[2], sizes: [], - transactionId: '5f33781f-9552-7ev3' + ortb2Imp: { + ext: { + tid: '5f33781f-9552-7ev3' + } + } }, { adUnitCode: placementCode[4], @@ -351,7 +370,11 @@ describe('etarget adapter', function () { params: params[3], placementCode: placementCode[2], sizes: [], - transactionId: '5f33781f-9552-7ev3' + ortb2Imp: { + ext: { + tid: '5f33781f-9552-7ev3' + } + } }, { adUnitCode: placementCode[4], @@ -362,7 +385,11 @@ describe('etarget adapter', function () { params: params[4], placementCode: placementCode[2], sizes: [], - transactionId: '5f33781f-9552-7ev3' + ortb2Imp: { + ext: { + tid: '5f33781f-9552-7ev3' + } + } } ]; serverResponse = { diff --git a/test/spec/modules/feedadBidAdapter_spec.js b/test/spec/modules/feedadBidAdapter_spec.js index 5789361d2a1..152adba9d00 100644 --- a/test/spec/modules/feedadBidAdapter_spec.js +++ b/test/spec/modules/feedadBidAdapter_spec.js @@ -508,7 +508,11 @@ describe('FeedAdAdapter', function () { } }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': transactionId, + ortb2Imp: { + ext: { + tid: transactionId + } + }, 'sizes': [ [ 300, diff --git a/test/spec/modules/finativeBidAdapter_spec.js b/test/spec/modules/finativeBidAdapter_spec.js index 86d56d9c3e1..d5c56aca65d 100644 --- a/test/spec/modules/finativeBidAdapter_spec.js +++ b/test/spec/modules/finativeBidAdapter_spec.js @@ -49,17 +49,6 @@ describe('Finative adapter', function () { assert.deepEqual(keys, data); }); - it('Verify the auction ID', function () { - let validBidRequests = [{ - bidId: 'bidId', - params: {}, - auctionId: 'auctionId' - }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' }, auctionId: validBidRequests[0].auctionId }).data); - - assert.equal(request.id, validBidRequests[0].auctionId); - }); - it('Verify the device', function () { let validBidRequests = [{ bidId: 'bidId', diff --git a/test/spec/modules/gamoshiBidAdapter_spec.js b/test/spec/modules/gamoshiBidAdapter_spec.js index 8f8e3f03736..984830f67d4 100644 --- a/test/spec/modules/gamoshiBidAdapter_spec.js +++ b/test/spec/modules/gamoshiBidAdapter_spec.js @@ -46,7 +46,11 @@ describe('GamoshiAdapter', () => { 'supplyPartnerId': supplyPartnerId }, 'sizes': [[300, 250], [300, 600]], - 'transactionId': 'a123456789', + ortb2Imp: { + ext: { + tid: 'a123456789', + } + }, refererInfo: {referer: 'http://examplereferer.com'}, gdprConsent: { consentString: 'some string', @@ -310,7 +314,6 @@ describe('GamoshiAdapter', () => { response = spec.buildRequests([bidRequest], bidRequest)[0]; expect(response.method).to.equal('POST'); expect(response.url).to.match(new RegExp(`^https://rtb\\.gamoshi\\.io/r/${supplyPartnerId}/bidr\\?rformat=open_rtb&reqformat=rtb_json&bidder=prebid$`, 'g')); - expect(response.data.id).to.equal(bidRequest.auctionId); const bidRequestWithEndpoint = utils.deepClone(bidRequest); bidRequestWithEndpoint.params.rtbEndpoint = 'https://rtb2.gamoshi.io/a12'; response = spec.buildRequests([bidRequestWithEndpoint], bidRequest)[0]; diff --git a/test/spec/modules/gmosspBidAdapter_spec.js b/test/spec/modules/gmosspBidAdapter_spec.js index 6d290504194..8c3aa6c94cb 100644 --- a/test/spec/modules/gmosspBidAdapter_spec.js +++ b/test/spec/modules/gmosspBidAdapter_spec.js @@ -50,7 +50,11 @@ describe('GmosspAdapter', function () { bidId: '2b84475b5b636e', bidderRequestId: '1f4001782ac16c', auctionId: 'aba03555-4802-4c45-9f15-05ffa8594cff', - transactionId: '791e9d84-af92-4903-94da-24c7426d9d0c', + ortb2Imp: { + ext: { + tid: '791e9d84-af92-4903-94da-24c7426d9d0c', + } + }, userId: { imuid: 'h.0a4749e7ffe09fa6', pubcid: '1111', diff --git a/test/spec/modules/gnetBidAdapter_spec.js b/test/spec/modules/gnetBidAdapter_spec.js index 21526aba201..f1af3b71103 100644 --- a/test/spec/modules/gnetBidAdapter_spec.js +++ b/test/spec/modules/gnetBidAdapter_spec.js @@ -63,7 +63,11 @@ describe('gnetAdapter', function () { bidId: '2a19afd5173318', bidderRequestId: '1f4001782ac16c', auctionId: 'aba03555-4802-4c45-9f15-05ffa8594cff', - transactionId: '894bdff6-61ec-4bec-a5a9-f36a5bfccef5', + ortb2Imp: { + ext: { + tid: '894bdff6-61ec-4bec-a5a9-f36a5bfccef5', + } + }, gftuid: null }]; diff --git a/test/spec/modules/gridBidAdapter_spec.js b/test/spec/modules/gridBidAdapter_spec.js index 775e1a98a9c..039741a641c 100644 --- a/test/spec/modules/gridBidAdapter_spec.js +++ b/test/spec/modules/gridBidAdapter_spec.js @@ -22,7 +22,6 @@ describe('TheMediaGrid Adapter', function () { 'sizes': [[300, 250], [300, 600]], 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', - 'auctionId': '1d1a030790a475', }; it('should return true when required params found', function () { @@ -47,8 +46,13 @@ describe('TheMediaGrid Adapter', function () { refererInfo: { page: 'https://example.com' }, bidderRequestId: '22edbae2733bf6', transactionId: '1239bd74-4511-4335-af21-e828852e25d7', + timeout: 3000, auctionId: '9e2dfbfe-00c7-4f5e-9850-4044df3229c7', - timeout: 3000 + ortb2: { + source: { + tid: '9e2dfbfe-00c7-4f5e-9850-4044df3229c7', + } + } }; const referrer = encodeURIComponent(bidderRequest.refererInfo.page); let bidRequests = [ @@ -69,6 +73,11 @@ describe('TheMediaGrid Adapter', function () { 'bidderRequestId': '22edbae2733bf6', 'auctionId': '9e2dfbfe-00c7-4f5e-9850-4044df3229c7', transactionId: '1239bd74-4511-4335-af21-e828852e25d7', + ortb2Imp: { + ext: { + tid: '1239bd74-4511-4335-af21-e828852e25d7', + } + } }, { 'bidder': 'grid', @@ -81,6 +90,11 @@ describe('TheMediaGrid Adapter', function () { 'bidderRequestId': '22edbae2733bf6', 'auctionId': '9e2dfbfe-00c7-4f5e-9850-4044df3229c7', transactionId: '1239bd74-4511-4335-af21-e828852e25d7', + ortb2Imp: { + ext: { + tid: '1239bd74-4511-4335-af21-e828852e25d7', + } + } }, { 'bidder': 'grid', @@ -99,6 +113,11 @@ describe('TheMediaGrid Adapter', function () { 'bidderRequestId': '22edbae2733bf6', 'auctionId': '9e2dfbfe-00c7-4f5e-9850-4044df3229c7', transactionId: '1239bd74-4511-4335-af21-e828852e25d7', + ortb2Imp: { + ext: { + tid: '1239bd74-4511-4335-af21-e828852e25d7', + } + } }, { 'bidder': 'grid', @@ -120,6 +139,11 @@ describe('TheMediaGrid Adapter', function () { 'bidderRequestId': '22edbae2733bf6', 'auctionId': '9e2dfbfe-00c7-4f5e-9850-4044df3229c7', transactionId: '1239bd74-4511-4335-af21-e828852e25d7', + ortb2Imp: { + ext: { + tid: '1239bd74-4511-4335-af21-e828852e25d7', + } + } } ]; @@ -152,7 +176,7 @@ describe('TheMediaGrid Adapter', function () { }, 'tmax': bidderRequest.timeout, 'source': { - 'tid': bidderRequest.auctionId, + 'tid': bidderRequest.ortb2.source.tid, 'ext': {'wrapper': 'Prebid_js', 'wrapper_version': '$prebid.version$'} }, 'user': { @@ -520,10 +544,12 @@ describe('TheMediaGrid Adapter', function () { 'slots': [{ 'impid': bidRequests[0].adUnitCode, 'transactionid': bidderRequest.transactionId, + ext: bidRequests[0].ortb2Imp.ext, 'auctionId': bidderRequest.auctionId, 'sizes': ['300x250', '300x600'] }, { 'impid': bidRequests[2].adUnitCode, + ext: bidRequests[2].ortb2Imp.ext, 'transactionid': bidderRequest.transactionId, 'auctionId': bidderRequest.auctionId, 'sizes': [], @@ -600,7 +626,13 @@ describe('TheMediaGrid Adapter', function () { it('should add gpp information to the request via bidderRequest.ortb2.regs.gpp', function () { let consentString = 'abc1234'; - const gppBidderRequest = Object.assign({ortb2: {regs: {gpp: consentString, gpp_sid: [8]}}}, bidderRequest); + const gppBidderRequest = { + ...bidderRequest, + ortb2: { + regs: {gpp: consentString, gpp_sid: [8]}, + ...bidderRequest.ortb2 + } + }; const [request] = spec.buildRequests(bidRequests, gppBidderRequest); const payload = JSON.parse(request.data); @@ -897,7 +929,7 @@ describe('TheMediaGrid Adapter', function () { } }]; const bidRequestsWithOrtb2Imp = bidRequests.slice(0, 3).map((bid, ind) => { - return Object.assign(ortb2Imp[ind] ? { ortb2Imp: ortb2Imp[ind] } : {}, bid); + return Object.assign({}, bid, ortb2Imp[ind] ? { ortb2Imp: {...bid.ortb2Imp, ...ortb2Imp[ind]} } : {}); }); const [request] = spec.buildRequests(bidRequestsWithOrtb2Imp, bidderRequest); expect(request.data).to.be.an('string'); @@ -934,7 +966,7 @@ describe('TheMediaGrid Adapter', function () { } }]; const bidRequestsWithOrtb2Imp = bidRequests.slice(0, 3).map((bid, ind) => { - return Object.assign(ortb2Imp[ind] ? { ortb2Imp: ortb2Imp[ind] } : {}, bid); + return Object.assign({}, bid, ortb2Imp[ind] ? { ortb2Imp: ortb2Imp[ind] } : {}); }); const [request] = spec.buildRequests(bidRequestsWithOrtb2Imp, bidderRequest); expect(request.data).to.be.an('string'); @@ -966,8 +998,12 @@ describe('TheMediaGrid Adapter', function () { const bidderRequestWithNumId = { refererInfo: {page: 'https://example.com'}, bidderRequestId: 345345345, - auctionId: 654645, - timeout: 3000 + timeout: 3000, + ortb2: { + source: { + tid: 654645 + } + } }; const parsedReferrer = encodeURIComponent(bidderRequestWithNumId.refererInfo.page); const [request] = spec.buildRequests([bidRequestWithNumId], bidderRequestWithNumId); diff --git a/test/spec/modules/hybridBidAdapter_spec.js b/test/spec/modules/hybridBidAdapter_spec.js index 6c98264c06f..a0d479fb4dc 100644 --- a/test/spec/modules/hybridBidAdapter_spec.js +++ b/test/spec/modules/hybridBidAdapter_spec.js @@ -8,7 +8,11 @@ function getSlotConfigs(mediaTypes, params) { bidId: '2df8c0733f284e', bidder: 'hybrid', mediaTypes: mediaTypes, - transactionId: '31a58515-3634-4e90-9c96-f86196db1459' + ortb2Imp: { + ext: { + tid: '31a58515-3634-4e90-9c96-f86196db1459' + } + } } } diff --git a/test/spec/modules/imdsBidAdapter_spec.js b/test/spec/modules/imdsBidAdapter_spec.js index 8966baf91a7..ce04fabe02b 100644 --- a/test/spec/modules/imdsBidAdapter_spec.js +++ b/test/spec/modules/imdsBidAdapter_spec.js @@ -2,6 +2,7 @@ import { assert, expect } from 'chai'; import { BANNER } from 'src/mediaTypes.js'; import { config } from 'src/config.js'; import { spec } from 'modules/imdsBidAdapter.js'; +import * as utils from 'src/utils.js'; describe('imdsBidAdapter ', function () { describe('isBidRequestValid', function () { @@ -177,7 +178,7 @@ describe('imdsBidAdapter ', function () { }; let bidderRequest = { - auctionId: 'xyz123', + bidderRequestId: 'xyz123', refererInfo: { referer: 'https://test.com/foo/bar' } @@ -192,7 +193,7 @@ describe('imdsBidAdapter ', function () { }; let bidderRequestWithCCPA = { - auctionId: 'xyz123', + bidderRequestId: 'xyz123', refererInfo: { referer: 'https://test.com/foo/bar' }, @@ -299,7 +300,6 @@ describe('imdsBidAdapter ', function () { expect(reqVideo).to.have.property('url'); expect(reqVideo.url).to.contain('https://prebid.technoratimedia.com/openrtb/bids/prebid?'); expect(reqVideo.data).to.exist.and.to.be.an('object'); - expect(reqVideo.data.id).to.equal('VideoAuctionId124'); expect(reqVideo.data.imp).to.eql([expectedDataVideo1]); }); diff --git a/test/spec/modules/improvedigitalBidAdapter_spec.js b/test/spec/modules/improvedigitalBidAdapter_spec.js index b06669f2429..f427f9e7624 100644 --- a/test/spec/modules/improvedigitalBidAdapter_spec.js +++ b/test/spec/modules/improvedigitalBidAdapter_spec.js @@ -119,6 +119,11 @@ describe('Improve Digital Adapter Tests', function () { }; const bidderRequest = { + ortb2: { + source: { + tid: 'mock-tid' + } + }, bids: [simpleBidRequest], }; @@ -236,7 +241,7 @@ describe('Improve Digital Adapter Tests', function () { expect(payload.tmax).not.to.exist; expect(payload.regs).to.not.exist; expect(payload.schain).to.not.exist; - sinon.assert.match(payload.source, {tid: '192721e36a0239'}) + sinon.assert.match(payload.source, {tid: 'mock-tid'}) expect(payload.device).to.be.an('object'); expect(payload.user).to.not.exist; sinon.assert.match(payload.imp, [ diff --git a/test/spec/modules/insticatorBidAdapter_spec.js b/test/spec/modules/insticatorBidAdapter_spec.js index fc7ed1833ac..de0358f2b46 100644 --- a/test/spec/modules/insticatorBidAdapter_spec.js +++ b/test/spec/modules/insticatorBidAdapter_spec.js @@ -72,7 +72,11 @@ describe('InsticatorBidAdapter', function () { let bidderRequest = { bidderRequestId, - auctionId: '74f78609-a92d-4cf1-869f-1b244bbfb5d2', + ortb2: { + source: { + tid: '74f78609-a92d-4cf1-869f-1b244bbfb5d2', + } + }, timeout: 300, gdprConsent: { consentString: 'BOJ/P2HOJ/P2HABABMAAAAAZ+A==', @@ -248,7 +252,7 @@ describe('InsticatorBidAdapter', function () { expect(data.tmax).to.equal(bidderRequest.timeout); expect(data.source).to.have.all.keys('fd', 'tid', 'ext'); expect(data.source.fd).to.equal(1); - expect(data.source.tid).to.equal(bidderRequest.auctionId); + expect(data.source.tid).to.equal(bidderRequest.ortb2.source.tid); expect(data.source.ext).to.have.property('schain').to.deep.equal({ ver: '1.0', complete: 1, diff --git a/test/spec/modules/ixBidAdapter_spec.js b/test/spec/modules/ixBidAdapter_spec.js index 874f5048ce0..3aa4d6b0d8d 100644 --- a/test/spec/modules/ixBidAdapter_spec.js +++ b/test/spec/modules/ixBidAdapter_spec.js @@ -729,6 +729,9 @@ describe('IndexexchangeAdapter', function () { ortb2: { site: { page: 'https://www.prebid.org' + }, + source: { + tid: 'mock-tid' } } }; @@ -1894,7 +1897,7 @@ describe('IndexexchangeAdapter', function () { expect(payload.source.ext.schain).to.deep.equal(SAMPLE_SCHAIN); expect(payload.imp).to.be.an('array'); expect(payload.imp).to.have.lengthOf(1); - expect(payload.source.tid).to.equal(DEFAULT_BANNER_VALID_BID[0].auctionId); + expect(payload.source.tid).to.equal(DEFAULT_OPTION.ortb2.source.tid); }); it('payload should have correct format and value for r.id when bidderRequestId is a number ', function () { diff --git a/test/spec/modules/kargoBidAdapter_spec.js b/test/spec/modules/kargoBidAdapter_spec.js index d692cc67e26..dae2640d224 100644 --- a/test/spec/modules/kargoBidAdapter_spec.js +++ b/test/spec/modules/kargoBidAdapter_spec.js @@ -76,7 +76,6 @@ describe('kargo adapter tests', function () { auctionId: '1234098', bidId: '1', adUnitCode: '101', - transactionId: '10101', sizes: [[320, 50], [300, 250], [300, 600]], mediaTypes: { banner: { @@ -135,6 +134,7 @@ describe('kargo adapter tests', function () { }, ortb2Imp: { ext: { + tid: '10101', data: { adServer: { name: 'gam', @@ -152,7 +152,6 @@ describe('kargo adapter tests', function () { }, bidId: '2', adUnitCode: '202', - transactionId: '20202', sizes: [[320, 50], [300, 250], [300, 600]], mediaTypes: { video: { @@ -164,6 +163,7 @@ describe('kargo adapter tests', function () { bidderWinsCount: 0, ortb2Imp: { ext: { + tid: '20202', data: { adServer: { name: 'gam', @@ -180,7 +180,6 @@ describe('kargo adapter tests', function () { }, bidId: '3', adUnitCode: '303', - transactionId: '30303', sizes: [[320, 50], [300, 250], [300, 600]], mediaTypes: { native: { @@ -189,6 +188,7 @@ describe('kargo adapter tests', function () { }, ortb2Imp: { ext: { + tid: '30303', data: { adServer: { name: 'gam', diff --git a/test/spec/modules/koblerBidAdapter_spec.js b/test/spec/modules/koblerBidAdapter_spec.js index 5fb0bef726e..2b5830f68d2 100644 --- a/test/spec/modules/koblerBidAdapter_spec.js +++ b/test/spec/modules/koblerBidAdapter_spec.js @@ -7,6 +7,7 @@ import {getRefererInfo} from 'src/refererDetection.js'; function createBidderRequest(auctionId, timeout, pageUrl) { return { + bidderRequestId: 'mock-uuid', auctionId: auctionId || 'c1243d83-0bed-4fdb-8c76-42b456be17d0', timeout: timeout || 2000, refererInfo: { @@ -37,6 +38,16 @@ function createValidBidRequest(params, bidId, sizes) { } describe('KoblerAdapter', function () { + let sandbox; + + beforeEach(() => { + sandbox = sinon.sandbox.create(); + }); + + afterEach(() => { + sandbox.restore() + }); + describe('inherited functions', function () { it('exists and is a function', function () { const adapter = newBidder(spec); @@ -207,7 +218,7 @@ describe('KoblerAdapter', function () { const openRtbRequest = JSON.parse(result.data); expect(openRtbRequest.tmax).to.be.equal(timeout); - expect(openRtbRequest.id).to.be.equal(auctionId); + expect(openRtbRequest.id).to.exist; expect(openRtbRequest.site.page).to.be.equal(testUrl); }); @@ -435,7 +446,7 @@ describe('KoblerAdapter', function () { const openRtbRequest = JSON.parse(result.data); const expectedOpenRtbRequest = { - id: '9ff580cf-e10e-4b66-add7-40ac0c804e21', + id: 'mock-uuid', at: 1, tmax: 4500, cur: ['USD'], diff --git a/test/spec/modules/limelightDigitalBidAdapter_spec.js b/test/spec/modules/limelightDigitalBidAdapter_spec.js index 5a92110abb4..0e6f4817e5e 100644 --- a/test/spec/modules/limelightDigitalBidAdapter_spec.js +++ b/test/spec/modules/limelightDigitalBidAdapter_spec.js @@ -24,7 +24,11 @@ describe('limelightDigitalAdapter', function () { sizes: [[300, 250]] } }, - transactionId: '3bb2f6da-87a6-4029-aeb0-bfe951372e62', + ortb2Imp: { + ext: { + tid: '3bb2f6da-87a6-4029-aeb0-bfe951372e62', + } + }, userIdAsEids: [ { source: 'test1.org', @@ -64,7 +68,11 @@ describe('limelightDigitalAdapter', function () { placementCode: 'placement_1', auctionId: '482f88de-29ab-45c8-981a-d25e39454a34', sizes: [[350, 200]], - transactionId: '068867d1-46ec-40bb-9fa0-e24611786fb4', + ortb2Imp: { + ext: { + tid: '068867d1-46ec-40bb-9fa0-e24611786fb4', + } + }, userIdAsEids: [ { source: 'test2.org', @@ -110,7 +118,11 @@ describe('limelightDigitalAdapter', function () { placementCode: 'placement_2', auctionId: 'e4771143-6aa7-41ec-8824-ced4342c96c8', sizes: [[800, 600]], - transactionId: '738d5915-6651-43b9-9b6b-d50517350917', + ortb2Imp: { + ext: { + tid: '738d5915-6651-43b9-9b6b-d50517350917', + } + }, userIdAsEids: [ { source: 'test3.org', @@ -155,7 +167,11 @@ describe('limelightDigitalAdapter', function () { video: { playerSize: [800, 600] }, - transactionId: '738d5915-6651-43b9-9b6b-d50517350917', + ortb2Imp: { + ext: { + tid: '738d5915-6651-43b9-9b6b-d50517350917', + } + }, userIdAsEids: [ { source: 'test.org', @@ -647,7 +663,7 @@ function validateAdUnit(adUnit, bid) { expect(adUnit.id).to.equal(bid.params.adUnitId); expect(adUnit.bidId).to.equal(bid.bidId); expect(adUnit.type).to.equal(bid.params.adUnitType.toUpperCase()); - expect(adUnit.transactionId).to.equal(bid.transactionId); + expect(adUnit.transactionId).to.equal(bid.ortb2Imp.ext.tid); let bidSizes = []; if (bid.mediaTypes) { if (bid.mediaTypes.video && bid.mediaTypes.video.playerSize) { diff --git a/test/spec/modules/livewrappedBidAdapter_spec.js b/test/spec/modules/livewrappedBidAdapter_spec.js index 2a7276981b3..52eaf8d7d76 100644 --- a/test/spec/modules/livewrappedBidAdapter_spec.js +++ b/test/spec/modules/livewrappedBidAdapter_spec.js @@ -36,6 +36,11 @@ describe('Livewrapped adapter tests', function () { bidId: '2ffb201a808da7', bidderRequestId: '178e34bad3658f', auctionId: 'F7557995-65F5-4682-8782-7D5D34D82A8C', + ortb2Imp: { + ext: { + tid: '3D1C8CF7-D288-4D7F-8ADD-97C553056C3D' + } + }, transactionId: '3D1C8CF7-D288-4D7F-8ADD-97C553056C3D' } ], diff --git a/test/spec/modules/loglyliftBidAdapter_spec.js b/test/spec/modules/loglyliftBidAdapter_spec.js index 8ff2eb97463..9805561442a 100644 --- a/test/spec/modules/loglyliftBidAdapter_spec.js +++ b/test/spec/modules/loglyliftBidAdapter_spec.js @@ -11,6 +11,11 @@ describe('loglyliftBidAdapter', function () { }, adUnitCode: '/19968336/prebid_native_example_1', transactionId: '10aee457-617c-4572-ab5b-99df1d73ccb4', + ortb2Imp: { + ext: { + tid: '10aee457-617c-4572-ab5b-99df1d73ccb4', + } + }, sizes: [[300, 250], [300, 600]], bidderRequestId: '15da3afd9632d7', auctionId: 'f890b7d9-e787-4237-ac21-6d8554abac9f', @@ -29,6 +34,11 @@ describe('loglyliftBidAdapter', function () { }, adUnitCode: '/19968336/prebid_native_example_1', transactionId: '10aee457-617c-4572-ab5b-99df1d73ccb4', + ortb2Imp: { + ext: { + tid: '10aee457-617c-4572-ab5b-99df1d73ccb4', + } + }, sizes: [ [] ], diff --git a/test/spec/modules/luponmediaBidAdapter_spec.js b/test/spec/modules/luponmediaBidAdapter_spec.js index 8486faa5049..1441abc0fe8 100755 --- a/test/spec/modules/luponmediaBidAdapter_spec.js +++ b/test/spec/modules/luponmediaBidAdapter_spec.js @@ -142,7 +142,12 @@ describe('luponmediaBidAdapter', function () { 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines' ] }, - 'start': 1587413920835 + 'start': 1587413920835, + ortb2: { + source: { + tid: 'mock-tid' + } + }, }; it('sends bid request to ENDPOINT via POST', function () { @@ -150,7 +155,23 @@ describe('luponmediaBidAdapter', function () { let dynRes = JSON.parse(requests.data); expect(requests.url).to.equal(ENDPOINT_URL); expect(requests.method).to.equal('POST'); - expect(requests.data).to.equal('{"id":"585d96a5-bd93-4a89-b8ea-0f546f3aaa82","test":0,"source":{"tid":"7376c117-b7aa-49f5-a661-488543deeefd","ext":{"schain":{"ver":"1.0","complete":1,"nodes":[{"asi":"novi.ba","sid":"199424","hp":1}]}}},"tmax":1500,"imp":[{"id":"268a30af10dd6f","secure":1,"ext":{"luponmedia":{"siteId":303522,"keyId":"4o2c4"}},"banner":{"format":[{"w":300,"h":250}]}}],"ext":{"prebid":{"targeting":{"includewinners":true,"includebidderkeys":false}}},"user":{"id":"' + dynRes.user.id + '","buyeruid":"8d8b16cb-1383-4a0f-b4bb-0be28464d974"},"site":{"page":"https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines"}}'); + expect(JSON.parse(requests.data)).to.deep.include({ + 'test': 0, + 'source': { + tid: 'mock-tid', + 'ext': {'schain': {'ver': '1.0', 'complete': 1, 'nodes': [{'asi': 'novi.ba', 'sid': '199424', 'hp': 1}]}} + }, + 'tmax': 1500, + 'imp': [{ + 'id': '268a30af10dd6f', + 'secure': 1, + 'ext': {'luponmedia': {'siteId': 303522, 'keyId': '4o2c4'}}, + 'banner': {'format': [{'w': 300, 'h': 250}]} + }], + 'ext': {'prebid': {'targeting': {'includewinners': true, 'includebidderkeys': false}}}, + 'user': {'id': dynRes.user.id, 'buyeruid': '8d8b16cb-1383-4a0f-b4bb-0be28464d974'}, + 'site': {'page': 'https://novi.ba/clanak/176067/fast-car-beginner-s-guide-to-tuning-turbo-engines'} + }); }); }); diff --git a/test/spec/modules/mediaforceBidAdapter_spec.js b/test/spec/modules/mediaforceBidAdapter_spec.js index 22f584306a9..61e5678b03b 100644 --- a/test/spec/modules/mediaforceBidAdapter_spec.js +++ b/test/spec/modules/mediaforceBidAdapter_spec.js @@ -97,7 +97,11 @@ describe('mediaforce bid adapter', function () { } } }, - transactionId: 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b', + ortb2Imp: { + ext: { + tid: 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b', + } + } }; const multiBid = [ @@ -127,7 +131,11 @@ describe('mediaforce bid adapter', function () { sizes: [[300, 250], [600, 400]] } }, - transactionId: transactionId || 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b' + ortb2Imp: { + ext: { + tid: transactionId || 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b' + } + }, } }); @@ -196,7 +204,7 @@ describe('mediaforce bid adapter', function () { bidfloor: bid.params.bidfloor, ext: { mediaforce: { - transactionId: bid.transactionId + transactionId: bid.ortb2Imp.ext.tid, } }, banner: {w: 300, h: 250}, diff --git a/test/spec/modules/mediakeysBidAdapter_spec.js b/test/spec/modules/mediakeysBidAdapter_spec.js index 75c7f42cf58..99eaff3f378 100644 --- a/test/spec/modules/mediakeysBidAdapter_spec.js +++ b/test/spec/modules/mediakeysBidAdapter_spec.js @@ -131,7 +131,11 @@ describe('mediakeysBidAdapter', function () { const bidderRequest = { bidderCode: 'mediakeys', - auctionId: '84212956-c377-40e8-b000-9885a06dc692', + ortb2: { + source: { + tid: '84212956-c377-40e8-b000-9885a06dc692', + } + }, bidderRequestId: '1c1b642f803242', bids: [ bid @@ -208,7 +212,7 @@ describe('mediakeysBidAdapter', function () { // openRTB 2.5 expect(data.at).to.equal(1); expect(data.cur[0]).to.equal('USD'); // default currency - expect(data.source.tid).to.equal(bidderRequest.auctionId); + expect(data.source.tid).to.equal(bidderRequest.ortb2.source.tid); expect(data.imp.length).to.equal(1); expect(data.imp[0].id).to.equal(bidRequests[0].bidId); diff --git a/test/spec/modules/medianetBidAdapter_spec.js b/test/spec/modules/medianetBidAdapter_spec.js index 9180bbad68c..bb90eded230 100644 --- a/test/spec/modules/medianetBidAdapter_spec.js +++ b/test/spec/modules/medianetBidAdapter_spec.js @@ -16,7 +16,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', + ortb2Imp: { + ext: { + tid: '277b631f-92f5-4844-8b19-ea13c095d3f1' + } + }, 'mediaTypes': { 'banner': { 'sizes': [[300, 250]], @@ -38,7 +42,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-123', - 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + ortb2Imp: { + ext: { + tid: 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + } + }, 'mediaTypes': { 'banner': { 'sizes': [[300, 251]], @@ -64,6 +72,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', + ortb2Imp: { + ext: { + tid: '277b631f-92f5-4844-8b19-ea13c095d3f1', + } + }, 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', 'mediaTypes': { 'banner': { @@ -87,7 +100,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-123', - 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + ortb2Imp: { + ext: { + tid: 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + } + }, 'mediaTypes': { 'banner': { 'sizes': [[300, 251]], @@ -112,7 +129,6 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', 'mediaTypes': { 'banner': { 'sizes': [[300, 250]], @@ -121,7 +137,12 @@ let VALID_BID_REQUEST = [{ 'bidId': '28f8f8130a583e', 'bidderRequestId': '1e9b1f07797c1c', 'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d', - 'ortb2Imp': { 'ext': { 'data': { 'pbadslot': '/12345/my-gpt-tag-0' } } }, + 'ortb2Imp': { + 'ext': { + tid: '277b631f-92f5-4844-8b19-ea13c095d3f1', + 'data': {'pbadslot': '/12345/my-gpt-tag-0'} + } + }, 'bidRequestsCount': 1 }, { 'bidder': 'medianet', @@ -136,7 +157,6 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-123', - 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', 'mediaTypes': { 'banner': { 'sizes': [[300, 251]], @@ -146,7 +166,12 @@ let VALID_BID_REQUEST = [{ 'bidId': '3f97ca71b1e5c2', 'bidderRequestId': '1e9b1f07797c1c', 'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d', - 'ortb2Imp': { 'ext': { 'data': { 'pbadslot': '/12345/my-gpt-tag-0' } } }, + 'ortb2Imp': { + 'ext': { + tid: 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + 'data': {'pbadslot': '/12345/my-gpt-tag-0'} + } + }, 'bidRequestsCount': 1 }], VALID_BID_REQUEST_WITH_USERID = [{ @@ -165,7 +190,11 @@ let VALID_BID_REQUEST = [{ britepoolid: '82efd5e1-816b-4f87-97f8-044f407e2911' }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', + ortb2Imp: { + ext: { + tid: '277b631f-92f5-4844-8b19-ea13c095d3f1', + } + }, 'mediaTypes': { 'banner': { 'sizes': [[300, 250]], @@ -188,7 +217,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-123', - 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + ortb2Imp: { + ext: { + tid: 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + } + }, 'mediaTypes': { 'banner': { 'sizes': [[300, 251]], @@ -214,7 +247,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', + ortb2Imp: { + ext: { + tid: '277b631f-92f5-4844-8b19-ea13c095d3f1', + } + }, 'sizes': [[300, 250]], 'mediaTypes': { 'banner': { @@ -237,7 +274,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-123', - 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + ortb2Imp: { + ext: { + tid: 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + } + }, 'sizes': [[300, 251]], 'mediaTypes': { 'banner': { @@ -261,7 +302,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', + ortb2Imp: { + ext: { + tid: '277b631f-92f5-4844-8b19-ea13c095d3f1', + } + }, 'sizes': [[300, 250]], 'mediaTypes': { 'banner': { @@ -314,7 +359,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-123', - 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + ortb2Imp: { + ext: { + tid: 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + } + }, 'sizes': [[300, 251]], 'mediaTypes': { 'banner': { @@ -389,6 +438,7 @@ let VALID_BID_REQUEST = [{ 'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d', 'imp': [{ 'id': '28f8f8130a583e', + ortb2Imp: VALID_BID_REQUEST_INVALID_BIDFLOOR[0].ortb2Imp, 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', 'ext': { 'dfp_id': 'div-gpt-ad-1460505748561-0', @@ -422,6 +472,7 @@ let VALID_BID_REQUEST = [{ } }, { 'id': '3f97ca71b1e5c2', + ortb2Imp: VALID_BID_REQUEST_INVALID_BIDFLOOR[1].ortb2Imp, 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', 'ext': { 'dfp_id': 'div-gpt-ad-1460505748561-123', @@ -477,6 +528,7 @@ let VALID_BID_REQUEST = [{ 'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d', 'imp': [{ 'id': '28f8f8130a583e', + ortb2Imp: VALID_NATIVE_BID_REQUEST[0].ortb2Imp, 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', 'ext': { 'dfp_id': 'div-gpt-ad-1460505748561-0', @@ -510,6 +562,7 @@ let VALID_BID_REQUEST = [{ } }, { 'id': '3f97ca71b1e5c2', + ortb2Imp: VALID_NATIVE_BID_REQUEST[1].ortb2Imp, 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', 'ext': { 'dfp_id': 'div-gpt-ad-1460505748561-123', @@ -567,6 +620,7 @@ let VALID_BID_REQUEST = [{ 'imp': [{ 'id': '28f8f8130a583e', 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', + ortb2Imp: VALID_BID_REQUEST[0].ortb2Imp, 'ext': { 'dfp_id': 'div-gpt-ad-1460505748561-0', 'visibility': 1, @@ -599,6 +653,7 @@ let VALID_BID_REQUEST = [{ }, { 'id': '3f97ca71b1e5c2', 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + ortb2Imp: VALID_BID_REQUEST[1].ortb2Imp, 'ext': { 'dfp_id': 'div-gpt-ad-1460505748561-123', 'visibility': 1, @@ -656,6 +711,7 @@ let VALID_BID_REQUEST = [{ 'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d', 'imp': [{ 'id': '28f8f8130a583e', + ortb2Imp: VALID_BID_REQUEST_WITH_USERID[0].ortb2Imp, 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', 'tagid': 'crid', 'ext': { @@ -690,6 +746,7 @@ let VALID_BID_REQUEST = [{ } }, { 'id': '3f97ca71b1e5c2', + ortb2Imp: VALID_BID_REQUEST_WITH_USERID[1].ortb2Imp, 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', 'tagid': 'crid', 'ext': { @@ -747,6 +804,7 @@ let VALID_BID_REQUEST = [{ 'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d', 'imp': [{ 'id': '28f8f8130a583e', + ortb2Imp: VALID_BID_REQUEST_WITH_CRID[0].ortb2Imp, 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', 'tagid': 'crid', 'ext': { @@ -781,6 +839,7 @@ let VALID_BID_REQUEST = [{ } }, { 'id': '3f97ca71b1e5c2', + ortb2Imp: VALID_BID_REQUEST_WITH_CRID[1].ortb2Imp, 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', 'tagid': 'crid', 'ext': { @@ -1103,7 +1162,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', + ortb2Imp: { + ext: { + tid: '277b631f-92f5-4844-8b19-ea13c095d3f1', + } + }, 'sizes': [300, 250], 'mediaTypes': { 'banner': { @@ -1126,7 +1189,11 @@ let VALID_BID_REQUEST = [{ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-123', - 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + ortb2Imp: { + ext: { + tid: 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', + } + }, 'sizes': [300, 251], 'mediaTypes': { 'banner': { @@ -1178,6 +1245,7 @@ let VALID_BID_REQUEST = [{ 'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d', 'imp': [{ 'id': '28f8f8130a583e', + ortb2Imp: VALID_BID_REQUEST[0].ortb2Imp, 'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1', 'ext': { 'dfp_id': 'div-gpt-ad-1460505748561-0', @@ -1210,6 +1278,7 @@ let VALID_BID_REQUEST = [{ } }, { 'id': '3f97ca71b1e5c2', + ortb2Imp: VALID_BID_REQUEST[1].ortb2Imp, 'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822', 'ext': { 'dfp_id': 'div-gpt-ad-1460505748561-123', @@ -1306,7 +1375,7 @@ describe('Media.net bid adapter', function () { it('should build valid payload on bid', function () { let requestObj = spec.buildRequests(VALID_BID_REQUEST, VALID_AUCTIONDATA); - expect(JSON.parse(requestObj.data)).to.deep.equal(VALID_PAYLOAD); + expect(JSON.parse(requestObj.data)).to.deep.include(VALID_PAYLOAD); }); it('should accept size as a one dimensional array', function () { @@ -1353,7 +1422,7 @@ describe('Media.net bid adapter', function () { bidreq = spec.buildRequests(VALID_BID_REQUEST, VALID_AUCTIONDATA); actual = JSON.parse(bidreq.data).imp[0].ortb2Imp; - assert.equal(actual, undefined) + expect(actual).to.deep.equal(VALID_BID_REQUEST[0].ortb2Imp); }); it('should have userid in bid request', function () { diff --git a/test/spec/modules/mediasniperBidAdapter_spec.js b/test/spec/modules/mediasniperBidAdapter_spec.js index 21ce5297c8f..30437205067 100644 --- a/test/spec/modules/mediasniperBidAdapter_spec.js +++ b/test/spec/modules/mediasniperBidAdapter_spec.js @@ -209,7 +209,7 @@ describe('mediasniperBidAdapter', function () { // openRTB 2.5 expect(data.cur[0]).to.equal(DEFAULT_CURRENCY); - expect(data.id).to.equal(bidderRequest.auctionId); + expect(data.id).to.exist; expect(data.imp.length).to.equal(1); expect(data.imp[0].id).to.equal(bidRequests[0].bidId); diff --git a/test/spec/modules/mediasquareBidAdapter_spec.js b/test/spec/modules/mediasquareBidAdapter_spec.js index 346d02d91d0..bcf3c6852e7 100644 --- a/test/spec/modules/mediasquareBidAdapter_spec.js +++ b/test/spec/modules/mediasquareBidAdapter_spec.js @@ -1,16 +1,16 @@ import {expect} from 'chai'; import {spec} from 'modules/mediasquareBidAdapter.js'; -import {newBidder} from 'src/adapters/bidderFactory.js'; -import {config} from 'src/config.js'; -import * as utils from 'src/utils.js'; -import { requestBidsHook } from 'modules/consentManagement.js'; describe('MediaSquare bid adapter tests', function () { var DEFAULT_PARAMS = [{ adUnitCode: 'banner-div', bidId: 'aaaa1234', auctionId: 'bbbb1234', - transactionId: 'cccc1234', + ortb2Imp: { + ext: { + tid: 'cccc1234', + } + }, mediaTypes: { banner: { sizes: [ diff --git a/test/spec/modules/microadBidAdapter_spec.js b/test/spec/modules/microadBidAdapter_spec.js index 98edfce20bc..68dca0b0e25 100644 --- a/test/spec/modules/microadBidAdapter_spec.js +++ b/test/spec/modules/microadBidAdapter_spec.js @@ -12,7 +12,11 @@ describe('microadBidAdapter', () => { spot: 'spot-code' }, bidId: 'bid-id', - transactionId: 'transaction-id' + ortb2Imp: { + ext: { + tid: 'transaction-id' + } + } }; describe('isBidRequestValid', () => { diff --git a/test/spec/modules/minutemediaplusBidAdapter_spec.js b/test/spec/modules/minutemediaplusBidAdapter_spec.js index 359a97465e4..33ec194c61f 100644 --- a/test/spec/modules/minutemediaplusBidAdapter_spec.js +++ b/test/spec/modules/minutemediaplusBidAdapter_spec.js @@ -35,7 +35,6 @@ const BID = { } }, 'placementCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': 'c881914b-a3b5-4ecf-ad9c-1c2f37c6aabf', 'sizes': [[300, 250], [300, 600]], 'bidderRequestId': '1fdb5ff1b6eaa7', 'auctionId': 'auction_id', @@ -47,7 +46,8 @@ const BID = { 'mediaTypes': [BANNER], 'ortb2Imp': { 'ext': { - 'gpid': '1234567890' + 'gpid': '1234567890', + tid: 'c881914b-a3b5-4ecf-ad9c-1c2f37c6aabf', } } }; @@ -60,7 +60,11 @@ const VIDEO_BID = { 'bidRequestsCount': 4, 'bidderRequestsCount': 3, 'bidderWinsCount': 1, - 'transactionId': '56e184c6-bde9-497b-b9b9-cf47a61381ee', + ortb2Imp: { + ext: { + tid: '56e184c6-bde9-497b-b9b9-cf47a61381ee', + } + }, 'schain': 'a0819c69-005b-41ed-af06-1be1e0aefefc', 'params': { 'subDomain': SUB_DOMAIN, diff --git a/test/spec/modules/nextMillenniumBidAdapter_spec.js b/test/spec/modules/nextMillenniumBidAdapter_spec.js index 7f40e7d89f8..564788c8b56 100644 --- a/test/spec/modules/nextMillenniumBidAdapter_spec.js +++ b/test/spec/modules/nextMillenniumBidAdapter_spec.js @@ -173,9 +173,9 @@ describe('nextMillenniumBidAdapterTests', function() { }); it('validate_generated_params', function() { - const request = spec.buildRequests(bidRequestData); + const request = spec.buildRequests(bidRequestData, {bidderRequestId: 'mock-uuid'}); expect(request[0].bidId).to.equal('bid1234'); - expect(JSON.parse(request[0].data).id).to.equal('b06c5141-fe8f-4cdf-9d7d-54415490a917'); + expect(JSON.parse(request[0].data).id).to.exist; }); it('use parameters group_id', function() { diff --git a/test/spec/modules/oguryBidAdapter_spec.js b/test/spec/modules/oguryBidAdapter_spec.js index 2d48dca5ebb..d25363de9c9 100644 --- a/test/spec/modules/oguryBidAdapter_spec.js +++ b/test/spec/modules/oguryBidAdapter_spec.js @@ -62,6 +62,7 @@ describe('OguryBidAdapter', function () { ]; bidderRequest = { + bidderRequestId: 'mock-uuid', auctionId: bidRequests[0].auctionId, gdprConsent: {consentString: 'myConsentString', vendorData: {}, gdprApplies: true}, }; @@ -262,7 +263,7 @@ describe('OguryBidAdapter', function () { const defaultTimeout = 1000; const expectedRequestObject = { - id: bidRequests[0].auctionId, + id: 'mock-uuid', at: 1, tmax: defaultTimeout, imp: [{ diff --git a/test/spec/modules/onetagBidAdapter_spec.js b/test/spec/modules/onetagBidAdapter_spec.js index 5bd65cf0fd5..701fee5f6d9 100644 --- a/test/spec/modules/onetagBidAdapter_spec.js +++ b/test/spec/modules/onetagBidAdapter_spec.js @@ -15,7 +15,11 @@ describe('onetag', function () { 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475', - 'transactionId': 'qwerty123', + ortb2Imp: { + ext: { + tid: 'qwerty123' + } + }, 'schain': { 'validation': 'off', 'config': { diff --git a/test/spec/modules/operaadsBidAdapter_spec.js b/test/spec/modules/operaadsBidAdapter_spec.js index 45bc8995a5c..37d4a2c7bc0 100644 --- a/test/spec/modules/operaadsBidAdapter_spec.js +++ b/test/spec/modules/operaadsBidAdapter_spec.js @@ -1,7 +1,7 @@ -import { expect } from 'chai'; -import { spec } from 'modules/operaadsBidAdapter.js'; -import { newBidder } from 'src/adapters/bidderFactory.js'; -import { BANNER, NATIVE, VIDEO } from 'src/mediaTypes.js'; +import {expect} from 'chai'; +import {spec} from 'modules/operaadsBidAdapter.js'; +import {newBidder} from 'src/adapters/bidderFactory.js'; +import {BANNER, NATIVE, VIDEO} from 'src/mediaTypes.js'; describe('Opera Ads Bid Adapter', function () { describe('Test isBidRequestValid', function () { @@ -234,7 +234,7 @@ describe('Opera Ads Bid Adapter', function () { requestData = JSON.parse(req.data); }).to.not.throw(); - expect(requestData.id).to.equal(bidderRequest.auctionId); + expect(requestData.id).to.exist; expect(requestData.tmax).to.equal(bidderRequest.timeout); expect(requestData.test).to.equal(0); expect(requestData.imp).to.be.an('array').that.have.lengthOf(1); diff --git a/test/spec/modules/optidigitalBidAdapter_spec.js b/test/spec/modules/optidigitalBidAdapter_spec.js index 8c222650f7e..caa12483ea9 100755 --- a/test/spec/modules/optidigitalBidAdapter_spec.js +++ b/test/spec/modules/optidigitalBidAdapter_spec.js @@ -557,7 +557,6 @@ describe('optidigitalAdapterTests', function () { let expectedResponse = [ { 'placementId': 'Billboard_Top', - 'transactionId': 'cf5faec3-fcee-4f26-80ae-fc8b6cf23b7d', 'requestId': '83fb53a5e67f49', 'ttl': 150, 'creativeId': 'mobile_pos_2', @@ -572,7 +571,6 @@ describe('optidigitalAdapterTests', function () { } }, { 'placementId': 'Billboard_Bottom', - 'transactionId': 'df5faec3-fcee-4f26-80ae-fc8b6cf23b7d', 'requestId': '93fb53a5e67f49', 'ttl': 150, 'creativeId': 'mobile_pos_2', diff --git a/test/spec/modules/orbidderBidAdapter_spec.js b/test/spec/modules/orbidderBidAdapter_spec.js index 0d1396866e7..e7a0c8becfb 100644 --- a/test/spec/modules/orbidderBidAdapter_spec.js +++ b/test/spec/modules/orbidderBidAdapter_spec.js @@ -9,7 +9,11 @@ describe('orbidderBidAdapter', () => { const defaultBidRequestBanner = { bidId: 'd66fa86787e0b0ca900a96eacfd5f0bb', auctionId: 'ccc4c7cdfe11cfbd74065e6dd28413d8', - transactionId: 'd58851660c0c4461e4aa06344fc9c0c6', + ortb2Imp: { + ext: { + tid: 'd58851660c0c4461e4aa06344fc9c0c6', + } + }, bidRequestCount: 1, adUnitCode: 'adunit-code', sizes: [[300, 250], [300, 600]], @@ -27,7 +31,11 @@ describe('orbidderBidAdapter', () => { const defaultBidRequestNative = { bidId: 'd66fa86787e0b0ca900a96eacfd5f0bc', auctionId: 'ccc4c7cdfe11cfbd74065e6dd28413d9', - transactionId: 'd58851660c0c4461e4aa06344fc9c0c7', + ortb2Imp: { + ext: { + tid: 'd58851660c0c4461e4aa06344fc9c0c7', + } + }, bidRequestCount: 1, adUnitCode: 'adunit-code-native', sizes: [], @@ -170,7 +178,7 @@ describe('orbidderBidAdapter', () => { expect(request.data.bidId).to.equal(defaultBidRequestBanner.bidId); expect(request.data.auctionId).to.equal(defaultBidRequestBanner.auctionId); - expect(request.data.transactionId).to.equal(defaultBidRequestBanner.transactionId); + expect(request.data.transactionId).to.equal(defaultBidRequestBanner.ortb2Imp.ext.tid); expect(request.data.bidRequestCount).to.equal(defaultBidRequestBanner.bidRequestCount); expect(request.data.adUnitCode).to.equal(defaultBidRequestBanner.adUnitCode); expect(request.data.pageUrl).to.equal('https://localhost:9876/'); @@ -187,7 +195,7 @@ describe('orbidderBidAdapter', () => { expect(nativeRequest.data.bidId).to.equal(defaultBidRequestNative.bidId); expect(nativeRequest.data.auctionId).to.equal(defaultBidRequestNative.auctionId); - expect(nativeRequest.data.transactionId).to.equal(defaultBidRequestNative.transactionId); + expect(nativeRequest.data.transactionId).to.equal(defaultBidRequestNative.ortb2Imp.ext.tid); expect(nativeRequest.data.bidRequestCount).to.equal(defaultBidRequestNative.bidRequestCount); expect(nativeRequest.data.adUnitCode).to.equal(defaultBidRequestNative.adUnitCode); expect(nativeRequest.data.pageUrl).to.equal('https://localhost:9876/'); diff --git a/test/spec/modules/outbrainBidAdapter_spec.js b/test/spec/modules/outbrainBidAdapter_spec.js index f5ce00ed8df..ab72ff85ab0 100644 --- a/test/spec/modules/outbrainBidAdapter_spec.js +++ b/test/spec/modules/outbrainBidAdapter_spec.js @@ -3,6 +3,7 @@ import { spec } from 'modules/outbrainBidAdapter.js'; import { config } from 'src/config.js'; import { server } from 'test/mocks/xhr'; import { createEidsArray } from 'modules/userId/eids.js'; +import * as utils from 'src/utils.js'; describe('Outbrain Adapter', function () { describe('Bid request and response', function () { @@ -227,6 +228,7 @@ describe('Outbrain Adapter', function () { }) const commonBidderRequest = { + bidderRequestId: 'mock-uuid', refererInfo: { page: 'https://example.com/' } @@ -263,6 +265,7 @@ describe('Outbrain Adapter', function () { ] } const expectedData = { + id: 'mock-uuid', site: { page: 'https://example.com/', publisher: { @@ -305,6 +308,7 @@ describe('Outbrain Adapter', function () { ...displayBidRequestParams, } const expectedData = { + id: 'mock-uuid', site: { page: 'https://example.com/', publisher: { @@ -352,6 +356,7 @@ describe('Outbrain Adapter', function () { ...videoBidRequestParams, } const expectedData = { + id: 'mock-uuid', site: { page: 'https://example.com/', publisher: { diff --git a/test/spec/modules/pubgeniusBidAdapter_spec.js b/test/spec/modules/pubgeniusBidAdapter_spec.js index 1d1b0e65ec8..86c8794dc4c 100644 --- a/test/spec/modules/pubgeniusBidAdapter_spec.js +++ b/test/spec/modules/pubgeniusBidAdapter_spec.js @@ -5,6 +5,7 @@ import { config } from 'src/config.js'; import { VIDEO } from 'src/mediaTypes.js'; import { deepClone, parseQueryStringParameters } from 'src/utils.js'; import { server } from 'test/mocks/xhr.js'; +import * as utils from 'src/utils.js'; const { code, @@ -175,7 +176,7 @@ describe('pubGENIUS adapter', () => { method: 'POST', url: 'https://auction.adpearl.io/prebid/auction', data: { - id: 'fake-auction-id', + id: 'fakebidderrequestid', imp: [ { id: 'fakebidid', diff --git a/test/spec/modules/pubmaticBidAdapter_spec.js b/test/spec/modules/pubmaticBidAdapter_spec.js index eb0c89bcc45..e1d3a94b940 100644 --- a/test/spec/modules/pubmaticBidAdapter_spec.js +++ b/test/spec/modules/pubmaticBidAdapter_spec.js @@ -79,7 +79,11 @@ describe('PubMatic adapter', function () { bidId: '23acc48ad47af5', requestId: '0fb4905b-9456-4152-86be-c6f6d259ba99', bidderRequestId: '1c56ad30b9b8ca8', - transactionId: '92489f71-1bf2-49a0-adf9-000cea934729', + ortb2Imp: { + ext: { + tid: '92489f71-1bf2-49a0-adf9-000cea934729', + } + }, schain: schainConfig } ]; @@ -1120,7 +1124,12 @@ describe('PubMatic adapter', function () { it('Request params check', function () { let request = spec.buildRequests(bidRequests, { - auctionId: 'new-auction-id' + auctionId: 'new-auction-id', + ortb2: { + source: { + tid: 'source-tid' + } + } }); let data = JSON.parse(request.data); expect(data.at).to.equal(1); // auction type @@ -1135,8 +1144,8 @@ describe('PubMatic adapter', function () { expect(data.user.geo.lat).to.equal(parseFloat(bidRequests[0].params.lat)); // Latitude expect(data.user.geo.lon).to.equal(parseFloat(bidRequests[0].params.lon)); // Lognitude expect(data.ext.wrapper.wv).to.equal($$REPO_AND_VERSION$$); // Wrapper Version - expect(data.ext.wrapper.transactionId).to.equal('new-auction-id'); // Prebid TransactionId - expect(data.source.tid).to.equal('new-auction-id'); // Prebid TransactionId + expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId + expect(data.source.tid).to.equal('source-tid'); // Prebid TransactionId expect(data.ext.wrapper.wiid).to.equal(bidRequests[0].params.wiid); // OpenWrap: Wrapper Impression ID expect(data.ext.wrapper.profile).to.equal(parseInt(bidRequests[0].params.profId)); // OpenWrap: Wrapper Profile ID expect(data.ext.wrapper.version).to.equal(parseInt(bidRequests[0].params.verId)); // OpenWrap: Wrapper Profile Version ID @@ -1388,7 +1397,7 @@ describe('PubMatic adapter', function () { expect(data.user.geo.lat).to.equal(parseFloat(bidRequests[0].params.lat)); // Latitude expect(data.user.geo.lon).to.equal(parseFloat(bidRequests[0].params.lon)); // Lognitude expect(data.ext.wrapper.wv).to.equal($$REPO_AND_VERSION$$); // Wrapper Version - expect(data.ext.wrapper.transactionId).to.equal('new-auction-id'); // Prebid TransactionId + expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId expect(data.ext.wrapper.wiid).to.equal(bidRequests[0].params.wiid); // OpenWrap: Wrapper Impression ID expect(data.ext.wrapper.profile).to.equal(parseInt(bidRequests[0].params.profId)); // OpenWrap: Wrapper Profile ID expect(data.ext.wrapper.version).to.equal(parseInt(bidRequests[0].params.verId)); // OpenWrap: Wrapper Profile Version ID @@ -1599,7 +1608,7 @@ describe('PubMatic adapter', function () { expect(data.user.geo.lat).to.equal(parseFloat(bidRequests[0].params.lat)); // Latitude expect(data.user.geo.lon).to.equal(parseFloat(bidRequests[0].params.lon)); // Lognitude expect(data.ext.wrapper.wv).to.equal($$REPO_AND_VERSION$$); // Wrapper Version - expect(data.ext.wrapper.transactionId).to.equal('new-auction-id'); // Prebid TransactionId + expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId expect(data.ext.wrapper.wiid).to.equal('new-auction-id'); // OpenWrap: Wrapper Impression ID expect(data.ext.wrapper.profile).to.equal(parseInt(bidRequests[0].params.profId)); // OpenWrap: Wrapper Profile ID expect(data.ext.wrapper.version).to.equal(parseInt(bidRequests[0].params.verId)); // OpenWrap: Wrapper Profile Version ID @@ -1617,8 +1626,7 @@ describe('PubMatic adapter', function () { gdprConsent: { consentString: 'kjfdniwjnifwenrif3', gdprApplies: true - }, - auctionId: 'new-auction-id' + } }; let request = spec.buildRequests(bidRequests, bidRequest); let data = JSON.parse(request.data); @@ -1636,7 +1644,7 @@ describe('PubMatic adapter', function () { expect(data.user.geo.lat).to.equal(parseFloat(bidRequests[0].params.lat)); // Latitude expect(data.user.geo.lon).to.equal(parseFloat(bidRequests[0].params.lon)); // Lognitude expect(data.ext.wrapper.wv).to.equal($$REPO_AND_VERSION$$); // Wrapper Version - expect(data.ext.wrapper.transactionId).to.equal('new-auction-id'); // Prebid TransactionId + expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId expect(data.ext.wrapper.wiid).to.equal(bidRequests[0].params.wiid); // OpenWrap: Wrapper Impression ID expect(data.ext.wrapper.profile).to.equal(parseInt(bidRequests[0].params.profId)); // OpenWrap: Wrapper Profile ID expect(data.ext.wrapper.version).to.equal(parseInt(bidRequests[0].params.verId)); // OpenWrap: Wrapper Profile Version ID @@ -1651,8 +1659,7 @@ describe('PubMatic adapter', function () { it('Request params check with USP/CCPA Consent', function () { let bidRequest = { - uspConsent: '1NYN', - auctionId: 'new-auction-id' + uspConsent: '1NYN' }; let request = spec.buildRequests(bidRequests, bidRequest); let data = JSON.parse(request.data); @@ -1669,7 +1676,7 @@ describe('PubMatic adapter', function () { expect(data.user.geo.lat).to.equal(parseFloat(bidRequests[0].params.lat)); // Latitude expect(data.user.geo.lon).to.equal(parseFloat(bidRequests[0].params.lon)); // Lognitude expect(data.ext.wrapper.wv).to.equal($$REPO_AND_VERSION$$); // Wrapper Version - expect(data.ext.wrapper.transactionId).to.equal('new-auction-id'); // Prebid TransactionId + expect(data.ext.wrapper.transactionId).to.equal(bidRequests[0].ortb2Imp.ext.tid); // Prebid TransactionId expect(data.ext.wrapper.wiid).to.equal(bidRequests[0].params.wiid); // OpenWrap: Wrapper Impression ID expect(data.ext.wrapper.profile).to.equal(parseInt(bidRequests[0].params.profId)); // OpenWrap: Wrapper Profile ID expect(data.ext.wrapper.version).to.equal(parseInt(bidRequests[0].params.verId)); // OpenWrap: Wrapper Profile Version ID @@ -2699,7 +2706,7 @@ describe('PubMatic adapter', function () { expect(data.user.geo.lat).to.equal(parseFloat(multipleMediaRequests[0].params.lat)); // Latitude expect(data.user.geo.lon).to.equal(parseFloat(multipleMediaRequests[0].params.lon)); // Lognitude expect(data.ext.wrapper.wv).to.equal($$REPO_AND_VERSION$$); // Wrapper Version - expect(data.ext.wrapper.transactionId).to.equal('new-auction-id'); // Prebid TransactionId + expect(data.ext.wrapper.transactionId).to.equal(multipleMediaRequests[0].transactionId); // Prebid TransactionId expect(data.ext.wrapper.wiid).to.equal(multipleMediaRequests[0].params.wiid); // OpenWrap: Wrapper Impression ID expect(data.ext.wrapper.profile).to.equal(parseInt(multipleMediaRequests[0].params.profId)); // OpenWrap: Wrapper Profile ID expect(data.ext.wrapper.version).to.equal(parseInt(multipleMediaRequests[0].params.verId)); // OpenWrap: Wrapper Profile Version ID diff --git a/test/spec/modules/pubwiseBidAdapter_spec.js b/test/spec/modules/pubwiseBidAdapter_spec.js index 780cc8b8fdb..49e36c05d1e 100644 --- a/test/spec/modules/pubwiseBidAdapter_spec.js +++ b/test/spec/modules/pubwiseBidAdapter_spec.js @@ -101,6 +101,7 @@ const sampleValidBannerBidRequest = { }, ortb2Imp: { ext: { + tid: '2001a8b2-3bcf-417d-b64f-92641dae21e0', data: { adserver: { name: 'gam', @@ -125,7 +126,6 @@ const sampleValidBannerBidRequest = { } }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': '2001a8b2-3bcf-417d-b64f-92641dae21e0', 'sizes': [ [ 300, @@ -179,6 +179,7 @@ const sampleValidBidRequests = [ }, ortb2Imp: { ext: { + tid: '2c8cd034-f068-4419-8c30-f07292c0d17b', data: { adserver: { name: 'gam', @@ -213,7 +214,6 @@ const sampleValidBidRequests = [ } }, 'adUnitCode': 'div-gpt-ad-1460505748561-1', - 'transactionId': '2c8cd034-f068-4419-8c30-f07292c0d17b', 'sizes': [], 'bidId': '30ab7516a51a7c', 'bidderRequestId': '18a45bff5ff705', @@ -252,6 +252,7 @@ const sampleBidderBannerRequest = { }, ortb2Imp: { ext: { + tid: '2001a8b2-3bcf-417d-b64f-92641dae21e0', data: { adserver: { name: 'gam', @@ -272,7 +273,6 @@ const sampleBidderBannerRequest = { } }, 'adUnitCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': '2001a8b2-3bcf-417d-b64f-92641dae21e0', 'sizes': [ [ 300, @@ -299,7 +299,11 @@ const sampleBidderBannerRequest = { const sampleBidderRequest = { 'bidderCode': 'pubwise', - 'auctionId': '9f20663c-4629-4b5c-bff6-ff3aa8319358', + ortb2: { + source: { + tid: '9f20663c-4629-4b5c-bff6-ff3aa8319358', + } + }, 'bidderRequestId': '18a45bff5ff705', 'bids': [ sampleBidderBannerRequest, @@ -564,8 +568,8 @@ describe('PubWiseAdapter', function () { it('should handle complex bidRequest', function() { let request = spec.buildRequests(sampleValidBidRequests, sampleBidderRequest); expect(request.bidderRequest).to.equal(sampleBidderRequest, "Bid Request Doesn't Match Sample"); - expect(request.data.source.tid).to.equal(sampleBidderRequest.auctionId, 'AuctionId -> source.tid Mismatch'); - expect(request.data.imp[0].ext.tid).to.equal(sampleBidderRequest.bids[0].transactionId, 'TransactionId -> ext.tid Mismatch'); + expect(request.data.source.tid).to.equal(sampleBidderRequest.ortb2.source.tid, 'source.tid -> source.tid Mismatch'); + expect(request.data.imp[0].ext.tid).to.equal(sampleBidderRequest.bids[0].ortb2Imp.ext.tid, 'ext.tid -> ext.tid Mismatch'); }); it('must conform to API for buildRequests', function() { let request = spec.buildRequests(sampleValidBidRequests); diff --git a/test/spec/modules/relaidoBidAdapter_spec.js b/test/spec/modules/relaidoBidAdapter_spec.js index 0f2f9abd583..36d03c01138 100644 --- a/test/spec/modules/relaidoBidAdapter_spec.js +++ b/test/spec/modules/relaidoBidAdapter_spec.js @@ -39,7 +39,11 @@ describe('RelaidoAdapter', function () { bidId: '2ed93003f7bb99', bidderRequestId: '1c50443387a1f2', auctionId: '413ed000-8c7a-4ba1-a1fa-9732e006f8c3', - transactionId: '5c2d064c-7b76-42e8-a383-983603afdc45', + ortb2Imp: { + ext: { + tid: '5c2d064c-7b76-42e8-a383-983603afdc45', + } + }, bidRequestsCount: 1, bidderRequestsCount: 1, bidderWinsCount: 0 @@ -243,7 +247,7 @@ describe('RelaidoAdapter', function () { expect(request.bidder_request_id).to.equal(bidRequest.bidderRequestId); expect(data.bid_requests_count).to.equal(bidRequest.bidRequestsCount); expect(request.bid_id).to.equal(bidRequest.bidId); - expect(request.transaction_id).to.equal(bidRequest.transactionId); + expect(request.transaction_id).to.equal(bidRequest.ortb2Imp.ext.tid); expect(request.media_type).to.equal('video'); expect(data.uuid).to.equal(relaido_uuid); expect(data.pv).to.equal('$prebid.version$'); diff --git a/test/spec/modules/richaudienceBidAdapter_spec.js b/test/spec/modules/richaudienceBidAdapter_spec.js index 86d3df8be59..ad91b936e27 100644 --- a/test/spec/modules/richaudienceBidAdapter_spec.js +++ b/test/spec/modules/richaudienceBidAdapter_spec.js @@ -25,7 +25,11 @@ describe('Richaudience adapter tests', function () { auctionId: '0cb3144c-d084-4686-b0d6-f5dbe917c563', bidRequestsCount: 1, bidderRequestId: '1858b7382993ca', - transactionId: '29df2112-348b-4961-8863-1b33684d95e6', + ortb2Imp: { + ext: { + tid: '29df2112-348b-4961-8863-1b33684d95e6', + } + }, user: {} }]; diff --git a/test/spec/modules/rubiconBidAdapter_spec.js b/test/spec/modules/rubiconBidAdapter_spec.js index a0600879a31..d9c3555bf03 100644 --- a/test/spec/modules/rubiconBidAdapter_spec.js +++ b/test/spec/modules/rubiconBidAdapter_spec.js @@ -87,13 +87,13 @@ describe('the rubicon adapter', function () { function getBidderRequest() { return { bidderCode: 'rubicon', - auctionId: 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', - bidderRequestId: '178e34bad3658f', ortb2: { source: { - tid: 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b' + tid: 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', } }, + auctionId: 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', + bidderRequestId: '178e34bad3658f', bids: [ { bidder: 'rubicon', @@ -125,7 +125,11 @@ describe('the rubicon adapter', function () { bidId: '2ffb201a808da7', bidderRequestId: '178e34bad3658f', auctionId: 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', - transactionId: 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b' + ortb2Imp: { + ext: { + tid: 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b', + } + }, } ], start: 1472239426002, @@ -324,6 +328,11 @@ describe('the rubicon adapter', function () { bidderRequest = { bidderCode: 'rubicon', auctionId: 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', + ortb2: { + source: { + tid: 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', + } + }, bidderRequestId: '178e34bad3658f', bids: [ { @@ -356,14 +365,13 @@ describe('the rubicon adapter', function () { bidId: '2ffb201a808da7', bidderRequestId: '178e34bad3658f', auctionId: 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', - transactionId: 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b' + ortb2Imp: { + ext: { + tid: 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b', + } + }, } ], - ortb2: { - source: { - tid: 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b' - } - }, start: 1472239426002, auctionStart: 1472239426000, timeout: 5000 @@ -446,7 +454,7 @@ describe('the rubicon adapter', function () { 'rp_secure': /[01]/, 'rand': '0.1', 'tk_flint': INTEGRATION, - 'x_source.tid': 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b', + 'x_source.tid': 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', 'p_screen_res': /\d+x\d+/, 'tk_user_key': '12346', 'kw': 'a,b,c', @@ -636,7 +644,8 @@ describe('the rubicon adapter', function () { 'rp_secure': /[01]/, 'rand': '0.1', 'tk_flint': INTEGRATION, - 'x_source.tid': 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b', + 'x_source.tid': 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', + 'x_imp.ext.tid': 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b', 'p_screen_res': /\d+x\d+/, 'tk_user_key': '12346', 'kw': 'a,b,c', @@ -987,7 +996,7 @@ describe('the rubicon adapter', function () { 'rp_secure': /[01]/, 'rand': '0.1', 'tk_flint': INTEGRATION, - 'x_source.tid': 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b', + 'x_source.tid': 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', 'p_screen_res': /\d+x\d+/, 'tk_user_key': '12346', 'kw': 'a,b,c', @@ -2293,9 +2302,8 @@ describe('the rubicon adapter', function () { }); describe('createSlotParams', function () { - const localBidderRequest = Object.assign({}, bidderRequest); - localBidderRequest.ortb2 = {source: {tid: 'faked707-a418-42ec-b8a7-b70a6c6fab0b'}}; it('should return a valid slot params object', function () { + const localBidderRequest = Object.assign({}, bidderRequest); let expectedQuery = { 'account_id': '14062', 'site_id': '70608', @@ -2305,8 +2313,7 @@ describe('the rubicon adapter', function () { 'p_pos': 'atf', 'rp_secure': /[01]/, 'tk_flint': INTEGRATION, - 'x_source.tid': 'faked707-a418-42ec-b8a7-b70a6c6fab0b', - 'x_imp.ext.tid': 'd45dd707-a418-42ec-b8a7-b70a6c6fab0b', + 'x_source.tid': 'c45dd708-a418-42ec-b8a7-b70a6c6fab0a', 'p_screen_res': /\d+x\d+/, 'tk_user_key': '12346', 'kw': 'a,b,c', diff --git a/test/spec/modules/seedingAllianceAdapter_spec.js b/test/spec/modules/seedingAllianceAdapter_spec.js index 6ee86ad3a9d..03548cf923a 100755 --- a/test/spec/modules/seedingAllianceAdapter_spec.js +++ b/test/spec/modules/seedingAllianceAdapter_spec.js @@ -49,17 +49,6 @@ describe('SeedingAlliance adapter', function () { assert.deepEqual(keys, data); }); - it('Verify the auction ID', function () { - let validBidRequests = [{ - bidId: 'bidId', - params: {}, - auctionId: 'auctionId' - }]; - let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' }, auctionId: validBidRequests[0].auctionId }).data); - - assert.equal(request.id, validBidRequests[0].auctionId); - }); - it('Verify the site url', function () { let siteUrl = 'https://www.yourdomain.tld/your-directory/'; let validBidRequests = [{ diff --git a/test/spec/modules/seedtagBidAdapter_spec.js b/test/spec/modules/seedtagBidAdapter_spec.js index 3627296975b..fb666e89f73 100644 --- a/test/spec/modules/seedtagBidAdapter_spec.js +++ b/test/spec/modules/seedtagBidAdapter_spec.js @@ -20,7 +20,11 @@ function getSlotConfigs(mediaTypes, params) { bidder: 'seedtag', mediaTypes: mediaTypes, src: 'client', - transactionId: 'd704d006-0d6e-4a09-ad6c-179e7e758096', + ortb2Imp: { + ext: { + tid: 'd704d006-0d6e-4a09-ad6c-179e7e758096', + } + }, adUnitCode: 'adunit-code', }; } diff --git a/test/spec/modules/sharethroughBidAdapter_spec.js b/test/spec/modules/sharethroughBidAdapter_spec.js index fc4fbc86018..7759a0e418f 100644 --- a/test/spec/modules/sharethroughBidAdapter_spec.js +++ b/test/spec/modules/sharethroughBidAdapter_spec.js @@ -248,7 +248,11 @@ describe('sharethrough adapter spec', function () { refererInfo: { ref: 'https://referer.com', }, - auctionId: 'auction-id', + ortb2: { + source: { + tid: 'auction-id' + } + }, timeout: 242 }; }); @@ -311,7 +315,7 @@ describe('sharethrough adapter spec', function () { expect(openRtbReq.device.ua).to.equal(navigator.userAgent); expect(openRtbReq.regs.coppa).to.equal(1); - expect(openRtbReq.source.tid).to.equal(bidderRequest.auctionId); + expect(openRtbReq.source.tid).to.equal(bidderRequest.ortb2.source.tid); expect(openRtbReq.source.ext.version).not.to.be.undefined; expect(openRtbReq.source.ext.str).not.to.be.undefined; expect(openRtbReq.source.ext.schain).to.deep.equal(bidRequests[0].schain); diff --git a/test/spec/modules/slimcutBidAdapter_spec.js b/test/spec/modules/slimcutBidAdapter_spec.js index d821627c24b..da0fee48936 100644 --- a/test/spec/modules/slimcutBidAdapter_spec.js +++ b/test/spec/modules/slimcutBidAdapter_spec.js @@ -178,7 +178,6 @@ describe('slimcutBidAdapter', function() { 'ad': AD_SCRIPT, 'requestId': '3ede2a3fa0db94', 'creativeId': 'er2ee', - 'transactionId': 'deadb33f', 'winUrl': 'https://sb.freeskreen.com/win', 'meta': { 'advertiserDomains': [] diff --git a/test/spec/modules/smaatoBidAdapter_spec.js b/test/spec/modules/smaatoBidAdapter_spec.js index 7f727d5d9e3..61a877f329d 100644 --- a/test/spec/modules/smaatoBidAdapter_spec.js +++ b/test/spec/modules/smaatoBidAdapter_spec.js @@ -13,6 +13,7 @@ const CONSENT_STRING = 'HFIDUYFIUYIUYWIPOI87392DSU' const AUCTION_ID = '6653'; const defaultBidderRequest = { + bidderRequestId: 'mock-uuid', gdprConsent: { consentString: CONSENT_STRING, gdprApplies: true @@ -554,7 +555,7 @@ describe('smaatoBidAdapterTest', () => { const reqs = spec.buildRequests([longFormVideoBidRequest], defaultBidderRequest); const req = extractPayloadOfFirstAndOnlyRequest(reqs); - expect(req.id).to.be.equal(AUCTION_ID); + expect(req.id).to.exist; expect(req.imp.length).to.be.equal(ADPOD_DURATION / DURATION_RANGE[0]); expect(req.imp[0].id).to.be.equal(BID_ID); expect(req.imp[0].tagid).to.be.equal(ADBREAK_ID); @@ -658,7 +659,7 @@ describe('smaatoBidAdapterTest', () => { const reqs = spec.buildRequests([longFormVideoBidRequest], defaultBidderRequest); const req = extractPayloadOfFirstAndOnlyRequest(reqs); - expect(req.id).to.be.equal(AUCTION_ID); + expect(req.id).to.exist; expect(req.imp.length).to.be.equal(DURATION_RANGE.length); expect(req.imp[0].id).to.be.equal(BID_ID); expect(req.imp[0].tagid).to.be.equal(ADBREAK_ID); diff --git a/test/spec/modules/smartadserverBidAdapter_spec.js b/test/spec/modules/smartadserverBidAdapter_spec.js index 504ff978e9e..6a912565ed7 100644 --- a/test/spec/modules/smartadserverBidAdapter_spec.js +++ b/test/spec/modules/smartadserverBidAdapter_spec.js @@ -29,7 +29,11 @@ describe('Smart bid adapter tests', function () { ckId: 42 }, requestId: 'efgh5678', - transactionId: 'zsfgzzg' + ortb2Imp: { + ext: { + tid: 'zsfgzzg' + } + }, }]; var DEFAULT_PARAMS_WITH_EIDS = [{ @@ -586,7 +590,11 @@ describe('Smart bid adapter tests', function () { } }, requestId: 'efgh5678', - transactionId: 'zsfgzzg' + ortb2Imp: { + ext: { + tid: 'zsfgzzg', + } + }, }]; var INSTREAM_BID_RESPONSE = { @@ -855,7 +863,11 @@ describe('Smart bid adapter tests', function () { protocol: 7 } }, - requestId: 'efgh5679', + ortb2Imp: { + ext: { + tid: 'efgh5679', + } + }, transactionId: 'zsfgzzga' }]; diff --git a/test/spec/modules/smilewantedBidAdapter_spec.js b/test/spec/modules/smilewantedBidAdapter_spec.js index 44d2c7c6507..22221dbe1ef 100644 --- a/test/spec/modules/smilewantedBidAdapter_spec.js +++ b/test/spec/modules/smilewantedBidAdapter_spec.js @@ -14,7 +14,11 @@ const DISPLAY_REQUEST = [{ zoneId: 1 }, requestId: 'request_abcd1234', - transactionId: 'trans_abcd1234' + ortb2Imp: { + ext: { + tid: 'trans_abcd1234', + } + }, }]; const DISPLAY_REQUEST_WITH_EIDS = [{ @@ -29,7 +33,11 @@ const DISPLAY_REQUEST_WITH_EIDS = [{ zoneId: 1 }, requestId: 'request_abcd1234', - transactionId: 'trans_abcd1234', + ortb2Imp: { + ext: { + tid: 'trans_abcd1234', + } + }, userIdAsEids: [{ source: 'pubcid.org', uids: [{ @@ -61,7 +69,11 @@ const DISPLAY_REQUEST_WITH_POSITION_TYPE = [{ positionType: 'infeed' }, requestId: 'request_abcd1234', - transactionId: 'trans_abcd1234' + ortb2Imp: { + ext: { + tid: 'trans_abcd1234', + } + }, }]; const BID_RESPONSE_DISPLAY = { @@ -92,7 +104,11 @@ const VIDEO_INSTREAM_REQUEST = [{ bidfloor: 2.50 }, requestId: 'request_abcd1234', - transactionId: 'trans_abcd1234' + ortb2Imp: { + ext: { + tid: 'trans_abcd1234', + } + } }]; const BID_RESPONSE_VIDEO_INSTREAM = { @@ -124,7 +140,11 @@ const VIDEO_OUTSTREAM_REQUEST = [{ bidfloor: 2.50 }, requestId: 'request_abcd1234', - transactionId: 'trans_abcd1234' + ortb2Imp: { + ext: { + tid: 'trans_abcd1234', + } + } }]; const BID_RESPONSE_VIDEO_OUTSTREAM = { @@ -224,7 +244,6 @@ describe('smilewantedBidAdapterTests', function () { describe('gdpr tests', function () { afterEach(function () { config.resetConfig(); - $$PREBID_GLOBAL$$.requestBids.removeAll(); }); it('SmileWanted - Verify build request with GDPR', function () { diff --git a/test/spec/modules/taboolaBidAdapter_spec.js b/test/spec/modules/taboolaBidAdapter_spec.js index 206a0142043..7d31e291667 100644 --- a/test/spec/modules/taboolaBidAdapter_spec.js +++ b/test/spec/modules/taboolaBidAdapter_spec.js @@ -5,14 +5,15 @@ import * as utils from '../../../src/utils' import {server} from '../../mocks/xhr' describe('Taboola Adapter', function () { - let hasLocalStorage, cookiesAreEnabled, getDataFromLocalStorage, localStorageIsEnabled, getCookie, commonBidRequest; + let sandbox, hasLocalStorage, cookiesAreEnabled, getDataFromLocalStorage, localStorageIsEnabled, getCookie, commonBidRequest; beforeEach(() => { - hasLocalStorage = sinon.stub(userData.storageManager, 'hasLocalStorage'); - cookiesAreEnabled = sinon.stub(userData.storageManager, 'cookiesAreEnabled'); - getCookie = sinon.stub(userData.storageManager, 'getCookie'); - getDataFromLocalStorage = sinon.stub(userData.storageManager, 'getDataFromLocalStorage'); - localStorageIsEnabled = sinon.stub(userData.storageManager, 'localStorageIsEnabled'); + sandbox = sinon.sandbox.create(); + hasLocalStorage = sandbox.stub(userData.storageManager, 'hasLocalStorage'); + cookiesAreEnabled = sandbox.stub(userData.storageManager, 'cookiesAreEnabled'); + getCookie = sandbox.stub(userData.storageManager, 'getCookie'); + getDataFromLocalStorage = sandbox.stub(userData.storageManager, 'getDataFromLocalStorage'); + localStorageIsEnabled = sandbox.stub(userData.storageManager, 'localStorageIsEnabled'); commonBidRequest = createBidRequest(); $$PREBID_GLOBAL$$.bidderSettings = { taboola: { @@ -22,12 +23,7 @@ describe('Taboola Adapter', function () { }); afterEach(() => { - hasLocalStorage.restore(); - cookiesAreEnabled.restore(); - getCookie.restore(); - getDataFromLocalStorage.restore(); - localStorageIsEnabled.restore(); - + sandbox.restore(); $$PREBID_GLOBAL$$.bidderSettings = {}; }) @@ -124,6 +120,7 @@ describe('Taboola Adapter', function () { } const commonBidderRequest = { + bidderRequestId: 'mock-uuid', refererInfo: { page: 'https://example.com/ref', ref: 'https://ref', @@ -133,6 +130,7 @@ describe('Taboola Adapter', function () { it('should build display request', function () { const expectedData = { + id: 'mock-uuid', 'imp': [{ 'id': 1, 'banner': { diff --git a/test/spec/modules/ttdBidAdapter_spec.js b/test/spec/modules/ttdBidAdapter_spec.js index 5e472543a01..56c506dea6b 100644 --- a/test/spec/modules/ttdBidAdapter_spec.js +++ b/test/spec/modules/ttdBidAdapter_spec.js @@ -223,7 +223,11 @@ describe('ttdBidAdapter', function () { const baseBidderRequestReferer = detectReferer(testWindow)(); const baseBidderRequest = { 'bidderCode': 'ttd', - 'auctionId': 'e7b34fa3-8654-424e-8c49-03e509e53d8c', + ortb2: { + source: { + tid: 'e7b34fa3-8654-424e-8c49-03e509e53d8c', + } + }, 'bidderRequestId': '18084284054531', 'auctionStart': 1540945362095, 'timeout': 3000, @@ -320,10 +324,10 @@ describe('ttdBidAdapter', function () { expect(requestBody.imp[0].rwdd).to.equal(1); }); - it('sends auction id in source.tid', function () { + it('sends source.tid', function () { const requestBody = testBuildRequests(baseBannerBidRequests, baseBidderRequest).data; expect(requestBody.source).to.be.not.null; - expect(requestBody.source.tid).to.equal(baseBidderRequest.auctionId); + expect(requestBody.source.tid).to.equal(baseBidderRequest.ortb2.source.tid); }); it('includes the ad size in the bid request', function () { @@ -756,7 +760,11 @@ describe('ttdBidAdapter', function () { const baseBidderRequest = { 'bidderCode': 'ttd', - 'auctionId': 'e7b34fa3-8654-424e-8c49-03e509e53d8c', + ortb2: { + source: { + tid: 'e7b34fa3-8654-424e-8c49-03e509e53d8c', + } + }, 'bidderRequestId': '18084284054531', 'auctionStart': 1540945362095, 'timeout': 3000, @@ -776,7 +784,7 @@ describe('ttdBidAdapter', function () { const requestBody = testBuildRequests(baseBannerMultipleBidRequests, baseBidderRequest).data; expect(requestBody.imp.length).to.equal(2); expect(requestBody.source).to.be.not.null; - expect(requestBody.source.tid).to.equal(baseBidderRequest.auctionId); + expect(requestBody.source.tid).to.equal(baseBidderRequest.ortb2.source.tid); expect(requestBody.imp[0].ext).to.be.not.null; expect(requestBody.imp[0].ext.tid).to.equal('8651474f-58b1-4368-b812-84f8c937a099'); expect(requestBody.imp[1].ext).to.be.not.null; diff --git a/test/spec/modules/vidazooBidAdapter_spec.js b/test/spec/modules/vidazooBidAdapter_spec.js index 1ddc3058a03..6e92bae8d59 100644 --- a/test/spec/modules/vidazooBidAdapter_spec.js +++ b/test/spec/modules/vidazooBidAdapter_spec.js @@ -38,7 +38,6 @@ const BID = { } }, 'placementCode': 'div-gpt-ad-1460505748561-0', - 'transactionId': 'c881914b-a3b5-4ecf-ad9c-1c2f37c6aabf', 'sizes': [[300, 250], [300, 600]], 'bidderRequestId': '1fdb5ff1b6eaa7', 'auctionId': 'auction_id', @@ -50,6 +49,7 @@ const BID = { 'mediaTypes': [BANNER], 'ortb2Imp': { 'ext': { + tid: 'c881914b-a3b5-4ecf-ad9c-1c2f37c6aabf', 'gpid': '1234567890' } } @@ -59,7 +59,11 @@ const VIDEO_BID = { 'bidId': '2d52001cabd527', 'adUnitCode': '63550ad1ff6642d368cba59dh5884270560', 'bidderRequestId': '12a8ae9ada9c13', - 'transactionId': '56e184c6-bde9-497b-b9b9-cf47a61381ee', + ortb2Imp: { + ext: { + tid: '56e184c6-bde9-497b-b9b9-cf47a61381ee', + } + }, 'auctionId': 'auction_id', 'bidRequestsCount': 4, 'bidderRequestsCount': 3, diff --git a/test/spec/modules/xeBidAdapter_spec.js b/test/spec/modules/xeBidAdapter_spec.js index dcd82683221..38b334c32c5 100644 --- a/test/spec/modules/xeBidAdapter_spec.js +++ b/test/spec/modules/xeBidAdapter_spec.js @@ -11,7 +11,11 @@ const defaultRequest = { bidId: '1', requestId: 'qwerty', auctionId: 'auctionId', - transactionId: 'tr1', + ortb2Imp: { + ext: { + tid: 'tr1', + } + }, mediaTypes: { banner: { sizes: [ @@ -85,7 +89,7 @@ describe('buildRequests', function () { const request = JSON.parse(spec.buildRequests([defaultRequest], {}).data)[0]; expect(request).to.have.property('bidId').and.to.equal(defaultRequest.bidId); expect(request).to.have.property('auctionId').and.to.equal(defaultRequest.auctionId); - expect(request).to.have.property('transactionId').and.to.equal(defaultRequest.transactionId); + expect(request).to.have.property('transactionId').and.to.equal(defaultRequest.ortb2Imp.ext.tid); expect(request).to.have.property('tz').and.to.equal(new Date().getTimezoneOffset()); expect(request).to.have.property('bc').and.to.equal(1); expect(request).to.have.property('floor').and.to.equal(null);