From 84e794871aec5eb1eecb73f2329eb445ab6e8763 Mon Sep 17 00:00:00 2001 From: alexp Date: Tue, 12 Dec 2017 18:51:24 +0300 Subject: [PATCH 1/5] Add: rxrtb prebidAdapter --- modules/rxrtbBidAdapter.js | 158 ++++++++++++++++++++++ modules/rxrtbBidAdapter.md | 32 +++++ test/spec/modules/rxrtbBidAdapter_spec.js | 118 ++++++++++++++++ 3 files changed, 308 insertions(+) create mode 100644 modules/rxrtbBidAdapter.js create mode 100644 modules/rxrtbBidAdapter.md create mode 100644 test/spec/modules/rxrtbBidAdapter_spec.js diff --git a/modules/rxrtbBidAdapter.js b/modules/rxrtbBidAdapter.js new file mode 100644 index 00000000000..c0449b0b3f0 --- /dev/null +++ b/modules/rxrtbBidAdapter.js @@ -0,0 +1,158 @@ +import * as utils from 'src/utils'; +import {BANNER} from 'src/mediaTypes'; +import {registerBidder} from 'src/adapters/bidderFactory'; +import {config} from 'src/config'; + +const BIDDER_CODE = 'rxrtb'; +const DEFAULT_HOST = 'bid.rxrtb.bid'; +const AUCTION_TYPE = 2; +const RESPONSE_TTL = 900; + +export const spec = { + code: BIDDER_CODE, + supportedMediaTypes: [BANNER], + isBidRequestValid: function (bidRequest) { + return 'params' in bidRequest + && bidRequest.params.source !== undefined + && bidRequest.params.id !== undefined + && Number.isInteger(bidRequest.params.id) + && bidRequest.params.token !== undefined; + }, + buildRequests: function (validBidRequests) { + var requests = []; + + for (let i = 0; i < validBidRequests.length; i++) { + let prebidReq = makePrebidRequest(validBidRequests[i]); + + if (prebidReq) { + requests.push(prebidReq); + } + } + + return requests; + }, + interpretResponse: function (serverResponse, bidRequest) { + var rtbResp = serverResponse.body; + + if ((!rtbResp) || (!rtbResp.seatbid)) { + return []; + } + + let bidResponses = []; + + for (let i = 0; i < rtbResp.seatbid.length; i++) { + let seatbid = rtbResp.seatbid[i]; + + for (let j = 0; j < seatbid.bid.length; j++) { + let bid = seatbid.bid[j]; + let bidResponse = { + requestId : bid.impid, + cpm : bid.price, + width : bid.w, + height : bid.h, + mediaType : BANNER, + creativeId : bid.crid, + currency : rtbResp.cur || 'USD', + netRevenue : true, + ttl : bid.exp || RESPONSE_TTL, + ad : bid.adm + }; + bidResponses.push(bidResponse); + } + } + + return bidResponses; + }, + getUserSyncs: function (syncOptions, serverResponses) { + return []; + } +} + +registerBidder(spec); + +function getDomain(url) { + var a = document.createElement('a'); + a.href = url; + + return a.host; +} + +function makePrebidRequest(req) { + let host = req.params.host || DEFAULT_HOST, + url = window.location.protocol + '//' + host + '/dsp?id=' + req.params.id + '&token=' + req.params.token, + reqData = makeRtbRequest(req); + + return { + method: 'POST', + url: url, + data: JSON.stringify(reqData) + }; +} + +function makeRtbRequest(req) { + let imp = []; + + imp.push(makeImp(req)); + + return { + 'id': req.auctionId, + 'imp': imp, + 'site': makeSite(req), + 'device': makeDevice(), + 'hb': 1, + 'at': req.params.at || AUCTION_TYPE, + 'cur': ['USD'], + 'badv': req.params.badv || '', + 'bcat': req.params.bcat || '', + }; +} + +function makeImp(req) { + let imp = { + 'id' : req.bidId, + 'tagid' : req.adUnitCode, + 'banner': makeBanner(req) + }; + + if (req.params.bidfloor && Number.isInteger(req.params.bidfloor)) { + imp.bidfloor = req.params.bidfloor + } + + return imp; +} + +function makeBanner(req) { + let format = [], + banner = {}; + + for (let i = 0; i < req.sizes.length; i++) { + format.push({ + w: req.sizes[i][0], + h: req.sizes[i][1] + }); + } + + banner.format = format; + + if (req.params.pos && Number.isInteger(req.params.pos)) { + banner.pos = req.params.pos; + } + + return banner; +} + +function makeSite(req) { + return { + 'id' : req.params.source, + 'domain': getDomain(config.getConfig('publisherDomain')), + 'page' : utils.getTopWindowUrl(), + 'ref' : utils.getTopWindowReferrer() + }; +} + +function makeDevice() { + return { + 'ua': window.navigator.userAgent || '', + 'ip': 1 + }; +} \ No newline at end of file diff --git a/modules/rxrtbBidAdapter.md b/modules/rxrtbBidAdapter.md new file mode 100644 index 00000000000..e9628bed0dc --- /dev/null +++ b/modules/rxrtbBidAdapter.md @@ -0,0 +1,32 @@ +# Overview + +Module Name: rxrtb Bidder Adapter + +Module Type: Bidder Adapter + +Maintainer: contact@picellaltd.com + + +# Description + +Module that connects to rxrtb's demand source + +# Test Parameters +```javascript + var adUnits = [ + { + code: 'test-ad', + sizes: [[728, 98]], + bids: [ + { + bidder: 'rxrtb', + params: { + id: 89, + token: '658f11a5efbbce2f9be3f1f146fcbc22', + source: 'prebidtest' + } + } + ] + }, + ]; +``` \ No newline at end of file diff --git a/test/spec/modules/rxrtbBidAdapter_spec.js b/test/spec/modules/rxrtbBidAdapter_spec.js new file mode 100644 index 00000000000..27ba373f772 --- /dev/null +++ b/test/spec/modules/rxrtbBidAdapter_spec.js @@ -0,0 +1,118 @@ +import {expect} from 'chai'; +import {spec} from 'modules/rxrtbBidAdapter'; + +describe('rxrtb adapater', () => { + describe('Test validate req', () => { + it('should accept minimum valid bid', () => { + let bid = { + bidder: 'rxrtb', + params: { + id: 89, + token: '658f11a5efbbce2f9be3f1f146fcbc22', + source: 'prebidtest' + } + }; + const isValid = spec.isBidRequestValid(bid); + + expect(isValid).to.equal(true); + }); + + it('should reject missing id', () => { + let bid = { + bidder: 'rxrtb', + params: { + token: '658f11a5efbbce2f9be3f1f146fcbc22', + source: 'prebidtest' + } + }; + const isValid = spec.isBidRequestValid(bid); + + expect(isValid).to.equal(false); + }); + + it('should reject id not Integer', () => { + let bid = { + bidder: 'rxrtb', + params: { + id: '123', + token: '658f11a5efbbce2f9be3f1f146fcbc22', + source: 'prebidtest' + } + }; + const isValid = spec.isBidRequestValid(bid); + + expect(isValid).to.equal(false); + }); + + it('should reject missing source', () => { + let bid = { + bidder: 'rxrtb', + params: { + id: 89, + token: '658f11a5efbbce2f9be3f1f146fcbc22' + } + }; + const isValid = spec.isBidRequestValid(bid); + + expect(isValid).to.equal(false); + }); + }); + + describe('Test build request', () => { + it('minimum request', () => { + let bid = { + bidder: 'rxrtb', + params: { + id: 89, + token: '658f11a5efbbce2f9be3f1f146fcbc22', + source: 'prebidtest' + }, + sizes: [[728, 90]] + }; + + const req = JSON.parse(spec.buildRequests([bid])[0].data); + + expect(req).to.have.property('id'); + expect(req).to.have.property('imp'); + expect(req).to.have.property('device'); + expect(req).to.have.property('site'); + expect(req).to.have.property('hb'); + expect(req.imp[0]).to.have.property('id'); + expect(req.imp[0]).to.have.property('banner'); + expect(req.device).to.have.property('ip'); + expect(req.device).to.have.property('ua'); + expect(req.site).to.have.property('id'); + expect(req.site).to.have.property('domain'); + }); + }); + + describe('Test interpret response', () => { + it('General banner response', () => { + let resp = spec.interpretResponse({ + body: { + id: 'abcd', + seatbid: [{ + bid: [{ + id: 'abcd', + impid: 'banner-bid', + price: 0.3, + w: 728, + h: 98, + adm: 'hello', + crid: 'efgh', + exp: 5 + }] + }] + } + }, null)[0]; + + expect(resp).to.have.property('requestId', 'banner-bid'); + expect(resp).to.have.property('cpm', 0.3); + expect(resp).to.have.property('width', 728); + expect(resp).to.have.property('height', 98); + expect(resp).to.have.property('creativeId', 'efgh'); + expect(resp).to.have.property('ttl', 5); + expect(resp).to.have.property('ad', 'hello'); + }); + }); +}); \ No newline at end of file From 00e06226989751c4f6eab2a8d264485710e4aadd Mon Sep 17 00:00:00 2001 From: alexp Date: Tue, 12 Dec 2017 20:08:29 +0300 Subject: [PATCH 2/5] Update: params for test --- test/spec/modules/rxrtbBidAdapter_spec.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/spec/modules/rxrtbBidAdapter_spec.js b/test/spec/modules/rxrtbBidAdapter_spec.js index 27ba373f772..fd0c6000622 100644 --- a/test/spec/modules/rxrtbBidAdapter_spec.js +++ b/test/spec/modules/rxrtbBidAdapter_spec.js @@ -62,12 +62,15 @@ describe('rxrtb adapater', () => { it('minimum request', () => { let bid = { bidder: 'rxrtb', + sizes: [[728, 90]], + bidId: '4d0a6829338a07', + adUnitCode: 'div-gpt-ad-1460505748561-0', + auctionId: '20882439e3238c', params: { id: 89, token: '658f11a5efbbce2f9be3f1f146fcbc22', source: 'prebidtest' }, - sizes: [[728, 90]] }; const req = JSON.parse(spec.buildRequests([bid])[0].data); From 0a2b20c3e4c3e3c04dd2d0c83be9963de4de8a14 Mon Sep 17 00:00:00 2001 From: alexp Date: Wed, 13 Dec 2017 12:56:24 +0300 Subject: [PATCH 3/5] Update: code format --- modules/rxrtbBidAdapter.js | 214 ++++++++++------------ test/spec/modules/rxrtbBidAdapter_spec.js | 205 +++++++++++---------- 2 files changed, 200 insertions(+), 219 deletions(-) diff --git a/modules/rxrtbBidAdapter.js b/modules/rxrtbBidAdapter.js index c0449b0b3f0..9f9271c9bcd 100644 --- a/modules/rxrtbBidAdapter.js +++ b/modules/rxrtbBidAdapter.js @@ -3,69 +3,58 @@ import {BANNER} from 'src/mediaTypes'; import {registerBidder} from 'src/adapters/bidderFactory'; import {config} from 'src/config'; -const BIDDER_CODE = 'rxrtb'; +const BIDDER_CODE = 'rxrtb'; const DEFAULT_HOST = 'bid.rxrtb.bid'; const AUCTION_TYPE = 2; const RESPONSE_TTL = 900; export const spec = { - code: BIDDER_CODE, - supportedMediaTypes: [BANNER], - isBidRequestValid: function (bidRequest) { - return 'params' in bidRequest - && bidRequest.params.source !== undefined - && bidRequest.params.id !== undefined - && Number.isInteger(bidRequest.params.id) - && bidRequest.params.token !== undefined; - }, - buildRequests: function (validBidRequests) { - var requests = []; - - for (let i = 0; i < validBidRequests.length; i++) { - let prebidReq = makePrebidRequest(validBidRequests[i]); - - if (prebidReq) { - requests.push(prebidReq); - } - } - - return requests; - }, - interpretResponse: function (serverResponse, bidRequest) { - var rtbResp = serverResponse.body; - - if ((!rtbResp) || (!rtbResp.seatbid)) { - return []; - } - - let bidResponses = []; - - for (let i = 0; i < rtbResp.seatbid.length; i++) { - let seatbid = rtbResp.seatbid[i]; + code: BIDDER_CODE, + supportedMediaTypes: [BANNER], + isBidRequestValid: function (bidRequest) { + return 'params' in bidRequest && bidRequest.params.source !== undefined && bidRequest.params.id !== undefined && Number.isInteger(bidRequest.params.id) && bidRequest.params.token !== undefined; + }, + buildRequests: function (validBidRequests) { + var requests = []; + for (let i = 0; i < validBidRequests.length; i++) { + let prebidReq = makePrebidRequest(validBidRequests[i]); + if (prebidReq) { + requests.push(prebidReq); + } + } - for (let j = 0; j < seatbid.bid.length; j++) { - let bid = seatbid.bid[j]; - let bidResponse = { - requestId : bid.impid, - cpm : bid.price, - width : bid.w, - height : bid.h, - mediaType : BANNER, - creativeId : bid.crid, - currency : rtbResp.cur || 'USD', - netRevenue : true, - ttl : bid.exp || RESPONSE_TTL, - ad : bid.adm - }; - bidResponses.push(bidResponse); - } + return requests; + }, + interpretResponse: function (serverResponse, bidRequest) { + let rtbResp = serverResponse.body; + if ((!rtbResp) || (!rtbResp.seatbid)) { + return []; + } + let bidResponses = []; + for (let i = 0; i < rtbResp.seatbid.length; i++) { + let seatbid = rtbResp.seatbid[i]; + for (let j = 0; j < seatbid.bid.length; j++) { + let bid = seatbid.bid[j], + bidResponse = { + requestId: bid.impid, + cpm: bid.price, + width: bid.w, + height: bid.h, + mediaType: BANNER, + creativeId: bid.crid, + currency: rtbResp.cur || 'USD', + netRevenue: true, + ttl: bid.exp || RESPONSE_TTL, + ad: bid.adm + }; + bidResponses.push(bidResponse); } - - return bidResponses; - }, - getUserSyncs: function (syncOptions, serverResponses) { - return []; - } + } + return bidResponses; + }, + getUserSyncs: function (syncOptions, serverResponses) { + return []; + } } registerBidder(spec); @@ -78,81 +67,74 @@ function getDomain(url) { } function makePrebidRequest(req) { - let host = req.params.host || DEFAULT_HOST, - url = window.location.protocol + '//' + host + '/dsp?id=' + req.params.id + '&token=' + req.params.token, - reqData = makeRtbRequest(req); - - return { - method: 'POST', - url: url, - data: JSON.stringify(reqData) - }; + let host= req.params.host || DEFAULT_HOST, + url = window.location.protocol + '//' + host + '/dsp?id=' + req.params.id + '&token=' + req.params.token, + reqData = makeRtbRequest(req); + return { + method: 'POST', + url: url, + data: JSON.stringify(reqData) + }; } function makeRtbRequest(req) { - let imp = []; - - imp.push(makeImp(req)); - - return { - 'id': req.auctionId, - 'imp': imp, - 'site': makeSite(req), - 'device': makeDevice(), - 'hb': 1, - 'at': req.params.at || AUCTION_TYPE, - 'cur': ['USD'], - 'badv': req.params.badv || '', - 'bcat': req.params.bcat || '', - }; + let imp = []; + imp.push(makeImp(req)); + return { + 'id': req.auctionId, + 'imp': imp, + 'site': makeSite(req), + 'device': makeDevice(), + 'hb': 1, + 'at': req.params.at || AUCTION_TYPE, + 'cur': ['USD'], + 'badv': req.params.badv || '', + 'bcat': req.params.bcat || '', + }; } function makeImp(req) { - let imp = { - 'id' : req.bidId, - 'tagid' : req.adUnitCode, - 'banner': makeBanner(req) - }; + let imp = { + 'id': req.bidId, + 'tagid': req.adUnitCode, + 'banner': makeBanner(req) + }; - if (req.params.bidfloor && Number.isInteger(req.params.bidfloor)) { - imp.bidfloor = req.params.bidfloor - } + if (req.params.bidfloor && Number.isInteger(req.params.bidfloor)) { + imp.bidfloor = req.params.bidfloor + } - return imp; + return imp; } function makeBanner(req) { - let format = [], - banner = {}; - - for (let i = 0; i < req.sizes.length; i++) { - format.push({ - w: req.sizes[i][0], - h: req.sizes[i][1] - }); - } - - banner.format = format; - - if (req.params.pos && Number.isInteger(req.params.pos)) { - banner.pos = req.params.pos; - } - - return banner; + let format = [], + banner = {}; + for (let i = 0; i < req.sizes.length; i++) { + format.push({ + w: req.sizes[i][0], + h: req.sizes[i][1] + }); + } + banner.format = format; + if (req.params.pos && Number.isInteger(req.params.pos)) { + banner.pos = req.params.pos; + } + return banner; } function makeSite(req) { - return { - 'id' : req.params.source, - 'domain': getDomain(config.getConfig('publisherDomain')), - 'page' : utils.getTopWindowUrl(), - 'ref' : utils.getTopWindowReferrer() - }; + return { + 'id': req.params.source, + 'domain': getDomain(config.getConfig('publisherDomain')), + 'page': utils.getTopWindowUrl(), + 'ref': utils.getTopWindowReferrer() + }; } function makeDevice() { - return { - 'ua': window.navigator.userAgent || '', - 'ip': 1 - }; + return { + 'ua': window.navigator.userAgent || '', + 'ip': 1 + }; } \ No newline at end of file diff --git a/test/spec/modules/rxrtbBidAdapter_spec.js b/test/spec/modules/rxrtbBidAdapter_spec.js index fd0c6000622..0785c6f144b 100644 --- a/test/spec/modules/rxrtbBidAdapter_spec.js +++ b/test/spec/modules/rxrtbBidAdapter_spec.js @@ -2,120 +2,119 @@ import {expect} from 'chai'; import {spec} from 'modules/rxrtbBidAdapter'; describe('rxrtb adapater', () => { - describe('Test validate req', () => { - it('should accept minimum valid bid', () => { - let bid = { - bidder: 'rxrtb', - params: { - id: 89, - token: '658f11a5efbbce2f9be3f1f146fcbc22', - source: 'prebidtest' - } - }; - const isValid = spec.isBidRequestValid(bid); + describe('Test validate req', () => { + it('should accept minimum valid bid', () => { + let bid = { + bidder: 'rxrtb', + params: { + id: 89, + token: '658f11a5efbbce2f9be3f1f146fcbc22', + source: 'prebidtest' + } + }; + const isValid = spec.isBidRequestValid(bid); - expect(isValid).to.equal(true); - }); + expect(isValid).to.equal(true); + }); - it('should reject missing id', () => { - let bid = { - bidder: 'rxrtb', - params: { - token: '658f11a5efbbce2f9be3f1f146fcbc22', - source: 'prebidtest' - } - }; - const isValid = spec.isBidRequestValid(bid); + it('should reject missing id', () => { + let bid = { + bidder: 'rxrtb', + params: { + token: '658f11a5efbbce2f9be3f1f146fcbc22', + source: 'prebidtest' + } + }; + const isValid = spec.isBidRequestValid(bid); - expect(isValid).to.equal(false); - }); + expect(isValid).to.equal(false); + }); - it('should reject id not Integer', () => { - let bid = { - bidder: 'rxrtb', - params: { - id: '123', - token: '658f11a5efbbce2f9be3f1f146fcbc22', - source: 'prebidtest' - } - }; - const isValid = spec.isBidRequestValid(bid); + it('should reject id not Integer', () => { + let bid = { + bidder: 'rxrtb', + params: { + id: '123', + token: '658f11a5efbbce2f9be3f1f146fcbc22', + source: 'prebidtest' + } + }; + const isValid = spec.isBidRequestValid(bid); - expect(isValid).to.equal(false); - }); + expect(isValid).to.equal(false); + }); - it('should reject missing source', () => { - let bid = { - bidder: 'rxrtb', - params: { - id: 89, - token: '658f11a5efbbce2f9be3f1f146fcbc22' - } - }; - const isValid = spec.isBidRequestValid(bid); + it('should reject missing source', () => { + let bid = { + bidder: 'rxrtb', + params: { + id: 89, + token: '658f11a5efbbce2f9be3f1f146fcbc22' + } + }; + const isValid = spec.isBidRequestValid(bid); - expect(isValid).to.equal(false); - }); + expect(isValid).to.equal(false); }); + }); - describe('Test build request', () => { - it('minimum request', () => { - let bid = { - bidder: 'rxrtb', - sizes: [[728, 90]], - bidId: '4d0a6829338a07', - adUnitCode: 'div-gpt-ad-1460505748561-0', - auctionId: '20882439e3238c', - params: { - id: 89, - token: '658f11a5efbbce2f9be3f1f146fcbc22', - source: 'prebidtest' - }, - }; - - const req = JSON.parse(spec.buildRequests([bid])[0].data); + describe('Test build request', () => { + it('minimum request', () => { + let bid = { + bidder: 'rxrtb', + sizes: [[728, 90]], + bidId: '4d0a6829338a07', + adUnitCode: 'div-gpt-ad-1460505748561-0', + auctionId: '20882439e3238c', + params: { + id: 89, + token: '658f11a5efbbce2f9be3f1f146fcbc22', + source: 'prebidtest' + }, + }; + const req = JSON.parse(spec.buildRequests([bid])[0].data); - expect(req).to.have.property('id'); - expect(req).to.have.property('imp'); - expect(req).to.have.property('device'); - expect(req).to.have.property('site'); - expect(req).to.have.property('hb'); - expect(req.imp[0]).to.have.property('id'); - expect(req.imp[0]).to.have.property('banner'); - expect(req.device).to.have.property('ip'); - expect(req.device).to.have.property('ua'); - expect(req.site).to.have.property('id'); - expect(req.site).to.have.property('domain'); - }); + expect(req).to.have.property('id'); + expect(req).to.have.property('imp'); + expect(req).to.have.property('device'); + expect(req).to.have.property('site'); + expect(req).to.have.property('hb'); + expect(req.imp[0]).to.have.property('id'); + expect(req.imp[0]).to.have.property('banner'); + expect(req.device).to.have.property('ip'); + expect(req.device).to.have.property('ua'); + expect(req.site).to.have.property('id'); + expect(req.site).to.have.property('domain'); }); + }); - describe('Test interpret response', () => { - it('General banner response', () => { - let resp = spec.interpretResponse({ - body: { - id: 'abcd', - seatbid: [{ - bid: [{ - id: 'abcd', - impid: 'banner-bid', - price: 0.3, - w: 728, - h: 98, - adm: 'hello', - crid: 'efgh', - exp: 5 - }] - }] - } - }, null)[0]; + describe('Test interpret response', () => { + it('General banner response', () => { + let resp = spec.interpretResponse({ + body: { + id: 'abcd', + seatbid: [{ + bid: [{ + id: 'abcd', + impid: 'banner-bid', + price: 0.3, + w: 728, + h: 98, + adm: 'hello', + crid: 'efgh', + exp: 5 + }] + }] + } + }, null)[0]; - expect(resp).to.have.property('requestId', 'banner-bid'); - expect(resp).to.have.property('cpm', 0.3); - expect(resp).to.have.property('width', 728); - expect(resp).to.have.property('height', 98); - expect(resp).to.have.property('creativeId', 'efgh'); - expect(resp).to.have.property('ttl', 5); - expect(resp).to.have.property('ad', 'hello'); - }); + expect(resp).to.have.property('requestId', 'banner-bid'); + expect(resp).to.have.property('cpm', 0.3); + expect(resp).to.have.property('width', 728); + expect(resp).to.have.property('height', 98); + expect(resp).to.have.property('creativeId', 'efgh'); + expect(resp).to.have.property('ttl', 5); + expect(resp).to.have.property('ad', 'hello'); }); -}); \ No newline at end of file + }); +}); From 7420929b0acab15a4840914e596ddd11ee86642b Mon Sep 17 00:00:00 2001 From: alexp Date: Wed, 13 Dec 2017 13:05:17 +0300 Subject: [PATCH 4/5] Update: code format --- modules/rxrtbBidAdapter.js | 54 +++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/modules/rxrtbBidAdapter.js b/modules/rxrtbBidAdapter.js index 9f9271c9bcd..1a0b594b08d 100644 --- a/modules/rxrtbBidAdapter.js +++ b/modules/rxrtbBidAdapter.js @@ -27,29 +27,29 @@ export const spec = { }, interpretResponse: function (serverResponse, bidRequest) { let rtbResp = serverResponse.body; - if ((!rtbResp) || (!rtbResp.seatbid)) { - return []; - } - let bidResponses = []; - for (let i = 0; i < rtbResp.seatbid.length; i++) { - let seatbid = rtbResp.seatbid[i]; - for (let j = 0; j < seatbid.bid.length; j++) { - let bid = seatbid.bid[j], - bidResponse = { - requestId: bid.impid, - cpm: bid.price, - width: bid.w, - height: bid.h, - mediaType: BANNER, - creativeId: bid.crid, - currency: rtbResp.cur || 'USD', - netRevenue: true, - ttl: bid.exp || RESPONSE_TTL, - ad: bid.adm - }; - bidResponses.push(bidResponse); - } + if ((!rtbResp) || (!rtbResp.seatbid)) { + return []; + } + let bidResponses = []; + for (let i = 0; i < rtbResp.seatbid.length; i++) { + let seatbid = rtbResp.seatbid[i]; + for (let j = 0; j < seatbid.bid.length; j++) { + let bid = seatbid.bid[j]; + let bidResponse = { + requestId: bid.impid, + cpm: bid.price, + width: bid.w, + height: bid.h, + mediaType: BANNER, + creativeId: bid.crid, + currency: rtbResp.cur || 'USD', + netRevenue: true, + ttl: bid.exp || RESPONSE_TTL, + ad: bid.adm + }; + bidResponses.push(bidResponse); } + } return bidResponses; }, getUserSyncs: function (syncOptions, serverResponses) { @@ -67,9 +67,9 @@ function getDomain(url) { } function makePrebidRequest(req) { - let host= req.params.host || DEFAULT_HOST, - url = window.location.protocol + '//' + host + '/dsp?id=' + req.params.id + '&token=' + req.params.token, - reqData = makeRtbRequest(req); + let host = req.params.host || DEFAULT_HOST; + let url = window.location.protocol + '//' + host + '/dsp?id=' + req.params.id + '&token=' + req.params.token; + let reqData = makeRtbRequest(req); return { method: 'POST', url: url, @@ -108,8 +108,8 @@ function makeImp(req) { } function makeBanner(req) { - let format = [], - banner = {}; + let format = []; + let banner = {}; for (let i = 0; i < req.sizes.length; i++) { format.push({ w: req.sizes[i][0], From 1e7151c8afe45d115c697c36324c6116fcf7f518 Mon Sep 17 00:00:00 2001 From: alexp Date: Wed, 13 Dec 2017 13:12:59 +0300 Subject: [PATCH 5/5] Update: code format --- modules/rxrtbBidAdapter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/rxrtbBidAdapter.js b/modules/rxrtbBidAdapter.js index 1a0b594b08d..cf03e41c208 100644 --- a/modules/rxrtbBidAdapter.js +++ b/modules/rxrtbBidAdapter.js @@ -137,4 +137,4 @@ function makeDevice() { 'ua': window.navigator.userAgent || '', 'ip': 1 }; -} \ No newline at end of file +}