Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 26 additions & 17 deletions modules/insticatorBidAdapter.js
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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,
},
});

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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');
Expand All @@ -148,15 +151,15 @@ 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,
creativeId: bid.crid,
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',
Expand All @@ -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 = {
Expand All @@ -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;
}
Expand Down Expand Up @@ -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), []);
Expand Down
11 changes: 5 additions & 6 deletions test/spec/modules/insticatorBidAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ describe('Insticator bid adapter', () => {
h: 250,
impid: '1234abcd',
price: 0.5,
exp: 300,
crid: '987654321',
adm: '<div>ad</div>',
},
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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({
Expand All @@ -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'
);
});

Expand All @@ -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([
Expand Down