diff --git a/modules/prebidServerBidAdapter/index.js b/modules/prebidServerBidAdapter/index.js index 7ffaf9988dd..81082a85b64 100644 --- a/modules/prebidServerBidAdapter/index.js +++ b/modules/prebidServerBidAdapter/index.js @@ -787,6 +787,8 @@ const OPEN_RTB_PROTOCOL = { bidObject.adserverTargeting = extPrebidTargeting; } + bidObject.seatBidId = bid.id; + if (utils.deepAccess(bid, 'ext.prebid.type') === VIDEO) { bidObject.mediaType = VIDEO; let sizes = bidRequest.sizes && bidRequest.sizes[0]; diff --git a/modules/rubiconAnalyticsAdapter.js b/modules/rubiconAnalyticsAdapter.js index 53c701151eb..0dc00a79473 100644 --- a/modules/rubiconAnalyticsAdapter.js +++ b/modules/rubiconAnalyticsAdapter.js @@ -73,7 +73,7 @@ function sendMessage(auctionId, bidWonId) { function formatBid(bid) { return utils.pick(bid, [ 'bidder', - 'bidId', + 'bidId', bidId => utils.deepAccess(bid, 'bidResponse.seatBidId') || bidId, 'status', 'error', 'source', (source, bid) => { @@ -235,7 +235,8 @@ export function parseBidResponse(bid, previousBidResponse) { 'dimensions', () => utils.pick(bid, [ 'width', 'height' - ]) + ]), + 'seatBidId', ]); } @@ -414,6 +415,10 @@ let rubiconAdapter = Object.assign({}, baseAdapter, { } bid.clientLatencyMillis = Date.now() - cache.auctions[args.auctionId].timestamp; bid.bidResponse = parseBidResponse(args, bid.bidResponse); + // RP server banner overwrites bidId with bid.seatBidId + if (utils.deepAccess(bid, 'bidResponse.seatBidId') && bid.bidder === 'rubicon' && bid.source === 'server' && ['video', 'banner'].some(i => utils.deepAccess(bid, 'bidResponse.mediaType') === i)) { + bid.seatBidId = bid.bidResponse.seatBidId; + } break; case BIDDER_DONE: args.bids.forEach(bid => { diff --git a/modules/rubiconBidAdapter.js b/modules/rubiconBidAdapter.js index 492e283596c..75dde239df1 100644 --- a/modules/rubiconBidAdapter.js +++ b/modules/rubiconBidAdapter.js @@ -489,6 +489,10 @@ export const spec = { height: bid.h || utils.deepAccess(bidRequest, 'mediaTypes.video.h') || utils.deepAccess(bidRequest, 'params.video.playerHeight'), }; + if (bid.id) { + bidObject.seatBidId = bid.id; + } + if (bid.dealid) { bidObject.dealId = bid.dealid; } diff --git a/modules/rubiconBidAdapter.md b/modules/rubiconBidAdapter.md index 540898f792e..beb29a6baf1 100644 --- a/modules/rubiconBidAdapter.md +++ b/modules/rubiconBidAdapter.md @@ -60,7 +60,7 @@ globalsupport@rubiconproject.com for more information. video: { context: 'instream', playerSize: [640, 480], - mimes: ['video/mp4', 'video/x-ms-wmv'] + mimes: ['video/mp4', 'video/x-ms-wmv'], protocols: [2,5], maxduration:30, linearity: 1, diff --git a/test/spec/modules/rubiconAnalyticsAdapter_spec.js b/test/spec/modules/rubiconAnalyticsAdapter_spec.js index 3452ae747b9..dd34245bd8e 100644 --- a/test/spec/modules/rubiconAnalyticsAdapter_spec.js +++ b/test/spec/modules/rubiconAnalyticsAdapter_spec.js @@ -92,6 +92,7 @@ const BID2 = Object.assign({}, BID, { mediaType: 'banner', cpm: 1.52, source: 'server', + seatBidId: 'aaaa-bbbb-cccc-dddd', rubiconTargeting: { 'rpfl_elemid': '/19968336/header-bid-tag1', 'rpfl_14062': '2_tier0100' @@ -222,6 +223,7 @@ const MOCK = { 'transactionId': 'c116413c-9e3f-401a-bee1-d56aec29a1d4', 'sizes': [[1000, 300], [970, 250], [728, 90]], 'bidId': '3bd4ebb1c900e2', + 'seatBidId': 'aaaa-bbbb-cccc-dddd', 'bidderRequestId': '1be65d7958826a', 'auctionId': '25c6d7f5-699a-4bfc-87c9-996f915341fa' } @@ -354,7 +356,7 @@ const ANALYTICS_MESSAGE = { 'bids': [ { 'bidder': 'rubicon', - 'bidId': '3bd4ebb1c900e2', + 'bidId': 'aaaa-bbbb-cccc-dddd', 'status': 'success', 'source': 'server', 'clientLatencyMillis': 3214, @@ -421,7 +423,7 @@ const ANALYTICS_MESSAGE = { 'bidder': 'rubicon', 'transactionId': 'c116413c-9e3f-401a-bee1-d56aec29a1d4', 'adUnitCode': '/19968336/header-bid-tag1', - 'bidId': '3bd4ebb1c900e2', + 'bidId': 'aaaa-bbbb-cccc-dddd', 'status': 'success', 'source': 'server', 'clientLatencyMillis': 3214, diff --git a/test/spec/modules/rubiconBidAdapter_spec.js b/test/spec/modules/rubiconBidAdapter_spec.js index d31b83fd923..4688f0f5d32 100644 --- a/test/spec/modules/rubiconBidAdapter_spec.js +++ b/test/spec/modules/rubiconBidAdapter_spec.js @@ -2036,6 +2036,7 @@ describe('the rubicon adapter', function () { expect(bids).to.be.lengthOf(1); + expect(bids[0].seatBidId).to.equal('0'); expect(bids[0].creativeId).to.equal('4259970'); expect(bids[0].cpm).to.equal(2); expect(bids[0].ttl).to.equal(300);