diff --git a/modules/insticatorBidAdapter.js b/modules/insticatorBidAdapter.js index ed0bd480616..4dfda753e39 100644 --- a/modules/insticatorBidAdapter.js +++ b/modules/insticatorBidAdapter.js @@ -1,6 +1,6 @@ -import {config} from '../src/config.js'; -import {BANNER} from '../src/mediaTypes.js'; -import {registerBidder} from '../src/adapters/bidderFactory.js'; +import { config } from '../src/config.js'; +import { BANNER } from '../src/mediaTypes.js'; +import { registerBidder } from '../src/adapters/bidderFactory.js'; import { cookiesAreEnabled, deepAccess, @@ -15,10 +15,12 @@ const BIDDER_CODE = 'insticator'; const ENDPOINT = 'https://ex.hunchme.com/v1/openrtb'; // staging endpoint! const USER_ID_KEY = 'hb_insticator_uid'; const USER_ID_COOKIE_EXP = 2592000000; // 30 days +const BID_TTL = 300; // 5 minutes config.setDefaults({ insticator: { endpointUrl: ENDPOINT, + bidTTL: BID_TTL, }, }); @@ -51,13 +53,14 @@ function setUserId(userId) { function buildImpression(bidRequest) { const format = []; - const sizes = deepAccess(bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes; + const sizes = + deepAccess(bidRequest, 'mediaTypes.banner.sizes') || bidRequest.sizes; for (const size of sizes) { format.push({ w: size[0], h: size[1], - }) + }); } return { @@ -133,7 +136,7 @@ function buildRequest(validBidRequests, bidderRequest) { device: buildDevice(), regs: buildRegs(bidderRequest), user: buildUser(), - imp: validBidRequests.map(bidRequest => buildImpression(bidRequest)), + imp: validBidRequests.map((bidRequest) => buildImpression(bidRequest)), }; const params = config.getConfig('insticator.params'); @@ -148,7 +151,7 @@ function buildRequest(validBidRequests, bidderRequest) { } function buildBid(bid, bidderRequest) { - const originalBid = bidderRequest.bids.find(b => b.bidId === bid.impid); + const originalBid = bidderRequest.bids.find((b) => b.bidId === bid.impid); return { requestId: bid.impid, @@ -156,7 +159,7 @@ function buildBid(bid, bidderRequest) { cpm: bid.price, currency: 'USD', netRevenue: true, - ttl: bid.exp, + ttl: bid.exp || config.getConfig('insticator.bidTTL') || BID_TTL, width: bid.w, height: bid.h, mediaType: 'banner', @@ -166,21 +169,24 @@ function buildBid(bid, bidderRequest) { } function buildBidSet(seatbid, bidderRequest) { - return seatbid.bid.map(bid => buildBid(bid, bidderRequest)); + return seatbid.bid.map((bid) => buildBid(bid, bidderRequest)); } function validateSize(size) { - return (size instanceof Array) && + return ( + size instanceof Array && size.length === 2 && typeof size[0] === 'number' && - typeof size[1] === 'number'; + typeof size[1] === 'number' + ); } function validateSizes(sizes) { - return (sizes instanceof Array) && + return ( + sizes instanceof Array && sizes.length > 0 && - sizes.map(validateSize) - .reduce((a, b) => a && b, true); + sizes.map(validateSize).reduce((a, b) => a && b, true) + ); } export const spec = { @@ -198,7 +204,10 @@ export const spec = { return false; } - if (!validateSizes(bid.sizes) && !validateSizes(bid.mediaTypes.banner.sizes)) { + if ( + !validateSizes(bid.sizes) && + !validateSizes(bid.mediaTypes.banner.sizes) + ) { logError('insticator: banner sizes not specified or invalid'); return false; } @@ -238,8 +247,8 @@ export const spec = { return []; } - const bidsets = body.seatbid.map( - seatbid => buildBidSet(seatbid, bidderRequest), + const bidsets = body.seatbid.map((seatbid) => + buildBidSet(seatbid, bidderRequest) ); return bidsets.reduce((a, b) => a.concat(b), []); diff --git a/test/spec/modules/insticatorBidAdapter_spec.js b/test/spec/modules/insticatorBidAdapter_spec.js index f084199d934..0ce9e7571bc 100644 --- a/test/spec/modules/insticatorBidAdapter_spec.js +++ b/test/spec/modules/insticatorBidAdapter_spec.js @@ -81,7 +81,6 @@ describe('Insticator bid adapter', () => { h: 250, impid: '1234abcd', price: 0.5, - exp: 300, crid: '987654321', adm: '
ad
', }, @@ -156,7 +155,7 @@ describe('Insticator bid adapter', () => { expect(requests).to.have.lengthOf(1); expect(requests[0]).to.deep.include({ method: 'POST', - url: 'https://ex.ingage.tech/v1/openrtb', + url: 'https://ex.hunchme.com/v1/openrtb', options: { contentType: 'application/json', withCredentials: true, @@ -225,7 +224,7 @@ describe('Insticator bid adapter', () => { it('should include in request GDPR options if available', () => { const requests = spec.buildRequests( [validBid, validBid2], - bidderRequestWithGDPR, + bidderRequestWithGDPR ); expect(JSON.parse(requests[0].data)).to.deep.include({ @@ -251,14 +250,14 @@ describe('Insticator bid adapter', () => { it('should pass user id if available', () => { localStorage.setItem( 'hb_insticator_uid', - '77016c8d-6c6e-40cb-8801-1060089b5c60', + '77016c8d-6c6e-40cb-8801-1060089b5c60' ); const requests = spec.buildRequests([validBid, validBid2], bidderRequest); const rtbRequest = JSON.parse(requests[0].data); expect(rtbRequest.user.id).to.equal( - '77016c8d-6c6e-40cb-8801-1060089b5c60', + '77016c8d-6c6e-40cb-8801-1060089b5c60' ); }); @@ -276,7 +275,7 @@ describe('Insticator bid adapter', () => { it('should correctly interpret valid response', () => { const bids = spec.interpretResponse( { body: validResponse }, - { bidderRequest }, + { bidderRequest } ); expect(bids).to.deep.equal([