Skip to content

Commit 7013a40

Browse files
author
m.sorochuk
committed
add multiple bids reguest
1 parent 511e124 commit 7013a40

File tree

2 files changed

+65
-39
lines changed

2 files changed

+65
-39
lines changed

modules/vertamediaBidAdapter.js

Lines changed: 59 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {Renderer} from 'src/Renderer';
55
import findIndex from 'core-js/library/fn/array/find-index';
66

77
const URL = '//hb2.vertamedia.com/auction/';
8+
const OUTSTREAM_SRC = '//player.vertamedia.com/outstream-unit/2.01/outstream.min.js';
89
const BIDDER_CODE = 'vertamedia';
910
const OUTSTREAM = 'outstream';
1011
const DISPLAY = 'display';
@@ -22,14 +23,12 @@ export const spec = {
2223
* @param bidderRequest
2324
*/
2425
buildRequests: function (bidRequests, bidderRequest) {
25-
return bidRequests.map((bid) => {
26-
return {
27-
data: prepareRTBRequestParams(bid),
28-
bidderRequest,
29-
method: 'GET',
30-
url: URL
31-
};
32-
});
26+
return {
27+
data: bidToTag(bidRequests),
28+
bidderRequest,
29+
method: 'GET',
30+
url: URL
31+
};
3332
},
3433

3534
/**
@@ -40,49 +39,76 @@ export const spec = {
4039
*/
4140
interpretResponse: function (serverResponse, {bidderRequest}) {
4241
serverResponse = serverResponse.body;
43-
const isInvalidValidResp = !serverResponse || !serverResponse.bids || !serverResponse.bids.length;
44-
4542
let bids = [];
4643

47-
if (isInvalidValidResp) {
48-
let extMessage = serverResponse && serverResponse.ext && serverResponse.ext.message ? `: ${serverResponse.ext.message}` : '';
49-
let errorMessage = `in response for ${bidderRequest.bidderCode} adapter ${extMessage}`;
44+
if (!utils.isArray(serverResponse)) {
45+
return parseRTBResponse(serverResponse, bidderRequest);
46+
}
5047

51-
utils.logError(errorMessage);
48+
serverResponse.forEach(serverBidResponse => {
49+
bids = utils.flatten(bids, parseRTBResponse(serverBidResponse, bidderRequest));
50+
});
5251

53-
return bids;
54-
}
52+
return bids;
53+
}
54+
};
5555

56-
serverResponse.bids.forEach(serverBid => {
57-
const requestId = findIndex(bidderRequest.bids, (bidRequest) => {
58-
return bidRequest.bidId === serverBid.requestId;
59-
});
56+
function parseRTBResponse(serverResponse, bidderRequest) {
57+
const isInvalidValidResp = !serverResponse || !serverResponse.bids || !serverResponse.bids.length;
6058

61-
if (serverBid.cpm !== 0 && requestId !== -1) {
62-
const bid = createBid(serverBid, getMediaType(bidderRequest.bids[requestId]));
59+
let bids = [];
6360

64-
bids.push(bid);
65-
}
66-
});
61+
if (isInvalidValidResp) {
62+
let extMessage = serverResponse && serverResponse.ext && serverResponse.ext.message ? `: ${serverResponse.ext.message}` : '';
63+
let errorMessage = `in response for ${bidderRequest.bidderCode} adapter ${extMessage}`;
64+
65+
utils.logError(errorMessage);
6766

6867
return bids;
6968
}
70-
};
69+
70+
serverResponse.bids.forEach(serverBid => {
71+
const requestId = findIndex(bidderRequest.bids, (bidRequest) => {
72+
return bidRequest.bidId === serverBid.requestId;
73+
});
74+
75+
if (serverBid.cpm !== 0 && requestId !== -1) {
76+
const bid = createBid(serverBid, getMediaType(bidderRequest.bids[requestId]));
77+
78+
bids.push(bid);
79+
}
80+
});
81+
82+
return bids;
83+
}
84+
85+
function bidToTag(bidRequests) {
86+
let tag = {
87+
domain: utils.getTopWindowLocation().hostname
88+
};
89+
90+
for (let i = 0, length = bidRequests.length; i < length; i++) {
91+
Object.assign(tag, prepareRTBRequestParams(i, bidRequests[i]));
92+
}
93+
94+
return tag;
95+
}
7196

7297
/**
7398
* Parse mediaType
99+
* @param _index {number}
74100
* @param bid {object}
75101
* @returns {object}
76102
*/
77-
function prepareRTBRequestParams(bid) {
103+
function prepareRTBRequestParams(_index, bid) {
78104
const mediaType = utils.deepAccess(bid, 'mediaTypes.video') ? VIDEO : DISPLAY;
105+
const index = !_index ? '' : `${_index + 1}`;
79106

80107
return {
81-
domain: utils.getTopWindowLocation().hostname,
82-
callbackId: bid.bidId,
83-
aid: bid.params.aid,
84-
ad_type: mediaType,
85-
sizes: utils.parseSizesInput(bid.sizes).join()
108+
['callbackId' + index]: bid.bidId,
109+
['aid' + index]: bid.params.aid,
110+
['ad_type' + index]: mediaType,
111+
['sizes' + index]: utils.parseSizesInput(bid.sizes).join()
86112
};
87113
}
88114

@@ -146,7 +172,7 @@ function createBid(bidResponse, mediaType) {
146172
function newRenderer(requestId) {
147173
const renderer = Renderer.install({
148174
id: requestId,
149-
url: '//player.vertamedia.com/outstream-unit/2.01/outstream.min.js',
175+
url: OUTSTREAM_SRC,
150176
loaded: false
151177
});
152178

test/spec/modules/vertamediaBidAdapter_spec.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,17 +125,17 @@ describe('vertamediaBidAdapter', () => {
125125
const videoRequest = spec.buildRequests(videoBidRequests, {});
126126

127127
it('sends bid request to ENDPOINT via GET', () => {
128-
expect(videoRequest[0].method).to.equal('GET');
129-
expect(displayRequest[0].method).to.equal('GET');
128+
expect(videoRequest.method).to.equal('GET');
129+
expect(displayRequest.method).to.equal('GET');
130130
});
131131

132132
it('sends bid request to correct ENDPOINT', () => {
133-
expect(videoRequest[0].url).to.equal(ENDPOINT);
134-
expect(displayRequest[0].url).to.equal(ENDPOINT);
133+
expect(videoRequest.url).to.equal(ENDPOINT);
134+
expect(displayRequest.url).to.equal(ENDPOINT);
135135
});
136136

137137
it('sends correct video bid parameters', () => {
138-
const bid = Object.assign({}, videoRequest[0].data);
138+
const bid = Object.assign({}, videoRequest.data);
139139
delete bid.domain;
140140

141141
const eq = {
@@ -149,7 +149,7 @@ describe('vertamediaBidAdapter', () => {
149149
});
150150

151151
it('sends correct display bid parameters', () => {
152-
const bid = Object.assign({}, displayRequest[0].data);
152+
const bid = Object.assign({}, displayRequest.data);
153153
delete bid.domain;
154154

155155
const eq = {

0 commit comments

Comments
 (0)