From ced7cb7aefa1595e9ca3d5f33d9706386552d3f2 Mon Sep 17 00:00:00 2001 From: Zak Andree Date: Tue, 7 Jul 2020 19:02:30 -0700 Subject: [PATCH 1/7] Add Inmar bidder adapter --- modules/inmarBidAdapter.js | 152 +++++++++++ modules/inmarBidAdapter.md | 83 ++++++ test/spec/modules/inmarBidAdapter_spec.js | 315 ++++++++++++++++++++++ 3 files changed, 550 insertions(+) create mode 100755 modules/inmarBidAdapter.js create mode 100644 modules/inmarBidAdapter.md create mode 100644 test/spec/modules/inmarBidAdapter_spec.js diff --git a/modules/inmarBidAdapter.js b/modules/inmarBidAdapter.js new file mode 100755 index 00000000000..73699fc5923 --- /dev/null +++ b/modules/inmarBidAdapter.js @@ -0,0 +1,152 @@ +import { config } from '../src/config.js'; +import { registerBidder } from '../src/adapters/bidderFactory.js'; +import { BANNER, VIDEO } from '../src/mediaTypes.js'; + +const BIDDER_CODE = 'inmar'; + +export const spec = { + code: BIDDER_CODE, + aliases: ['inm'], + supportedMediaTypes: [BANNER, VIDEO], + + /** + * Determines whether or not the given bid request is valid + * + * @param {bidRequest} bid The bid params to validate. + * @returns {boolean} True if this is a valid bid, and false otherwise + */ + isBidRequestValid: function(bid) { + return !!(bid.params && bid.params.pid && bid.params.supplyType); + }, + + /** + * Build a server request from the list of valid BidRequests + * @param {validBidRequests} is an array of the valid bids + * @param {bidderRequest} bidder request object + * @returns {ServerRequest} Info describing the request to the server + */ + buildRequests: function(validBidRequests, bidderRequest) { + return validBidRequests.map(bid => { + var payload = { + bidfloor: bid.params.bidfloor, + ifa: bid.params.ifa, + pid: bid.params.pid, + supplyType: bid.params.supplyType, + currencyCode: config.getConfig('currency.adServerCurrency'), + auctionId: bid.auctionId, + bidId: bid.bidId, + bidRequestsCount: bid.bidRequestsCount, + bidder: bid.bidder, + bidderRequestId: bid.bidderRequestId, + tagId: bid.adUnitCode, + sizes: getBannerSizes(bid), + referer: (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null), + numIframes: (typeof bidderRequest.refererInfo.numIframes != 'undefined' ? bidderRequest.refererInfo.numIframes : null), + transactionId: bid.transactionId, + timeout: config.getConfig('bidderTimeout'), + demand: isDemandTypeVideo(bid) ? 'video' : 'display', + videoData: getVideoInfo(bid) + }; + + if (bidderRequest && bidderRequest.gdprConsent) { + payload.gdpr_consent = bidderRequest.gdprConsent.consentString; + payload.gdpr = bidderRequest.gdprConsent.gdprApplies; + } + + var payloadString = JSON.stringify(payload); + + return { + method: 'POST', + url: 'https://prebid.owneriq.net:8443/bidder/pb/bid', + data: payloadString, + }; + }); + }, + + /** + * Read the response from the server and build a list of bids + * @param {serverResponse} Response from the server. + * @param {bidRequest} Bid request object + * @returns {bidResponses} Array of bids which were nested inside the server + */ + interpretResponse: function(serverResponse, bidRequest) { + const bidResponses = []; + // try catch + var response = serverResponse.body; + if (response) { + var bidResponse = { + requestId: JSON.parse(bidRequest.data).bidId, + cpm: response.cpm, + width: response.width, + height: response.height, + creativeId: response.creativeId, + mediaType: response.mediaType, + netRevenue: response.netRevenue, + currency: response.currency, + ttl: response.ttl, + dealId: response.dealId, + }; + + if (response.mediaType === 'video') { + bidResponse.vastXml = response.vastXML; + } else { + bidResponse.ad = response.adm + } + + bidResponses.push(bidResponse); + } + return bidResponses + }, + + /** + * User Syncs + * + * @param {syncOptions} Publisher prebid configuration + * @param {serverResponses} Response from the server + * @returns {Array} + */ + getUserSyncs: function(syncOptions, serverResponses) { + const syncs = []; + if (syncOptions.pixelEnabled) { + syncs.push({ + type: 'image', + url: 'https://px.owneriq.net/eucm/p/pb' + }); + } + return syncs + }, +}; + +registerBidder(spec); + +function getBannerSizes(bid) { + let newSizes; + if (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) { + newSizes = bid.mediaTypes.banner.sizes + } + if (newSizes != null) { + return newSizes.map(size => ({ + w: size[0], + h: size[1] + })); + } +} + +function isDemandTypeVideo(bid) { + if (bid.mediaTypes != undefined && bid.mediaTypes.video != undefined) { + return true; + } + return false; +} + +function getVideoInfo(bid) { + let videoData; + if (isDemandTypeVideo(bid)) { + videoData = { + format: bid.mediaTypes.video.context, + playerSize: bid.mediaTypes.video.playerSize, + mimes: bid.mediaTypes.video.mimes + }; + } + return videoData; +} diff --git a/modules/inmarBidAdapter.md b/modules/inmarBidAdapter.md new file mode 100644 index 00000000000..8745d4783e8 --- /dev/null +++ b/modules/inmarBidAdapter.md @@ -0,0 +1,83 @@ +# Overview + +``` +Module Name: Inmar Bidder Adapter +Module Type: Bidder Adapter +Maintainer: oiq_rtb@inmar.com +``` + +# Description + +Connects to Inmar for bids. This adapter supports Display and Video. + +The Inmar adapter requires setup and approval from the Inmar team. +Please reach out to your account manager for more information. + +# Test Parameters + +## Web +``` + var adUnits = [ + { + code: 'test-div1', + sizes: [[300, 250],[300, 600]], + bids: [{ + bidder: 'inmar', + params: { + "pid":"ADb1f40rmi", + "supplyType":"site", + "bidfloor":0.70, + } + }] + }, + { + code: 'test-div2', + sizes: [[728, 90],[970, 250]], + bids: [{ + bidder: 'inmar', + params: { + "pid":"ADb1f40rmo", + "supplyType":"site", + "bidfloor":0.40, + } + }] + } + ]; +``` + +## In-app +``` + var adUnits = [ + { + code: 'test-div1', + mediaTypes: { + banner: { + sizes: [[300, 250], [300, 600]] + } + }, + bids: [{ + bidder: 'inmar', + params: { + "pid":"ADb1f40rmi", + "supplyType":"app", + "ifa":"AAAAAAAAA-BBBB-CCCC-1111-222222220000", + "bidfloor":0.70, + } + }] + }, + { + code: 'test-div2', + sizes: [[728, 90],[970, 250]], + }, + bids: [{ + bidder: 'inmar', + params: { + "pid":"ADb1f40rmo", + "supplyType":"app", + "ifa":"AAAAAAAAA-BBBB-CCCC-1111-222222220000", + "bidfloor":0.40, + } + }] + } + ]; +``` diff --git a/test/spec/modules/inmarBidAdapter_spec.js b/test/spec/modules/inmarBidAdapter_spec.js new file mode 100644 index 00000000000..2d58533ef9c --- /dev/null +++ b/test/spec/modules/inmarBidAdapter_spec.js @@ -0,0 +1,315 @@ +// import or require modules necessary for the test, e.g.: +import {expect} from 'chai'; // may prefer 'assert' in place of 'expect' +import { + spec +} from 'modules/inmarBidAdapter.js'; +import {config} from 'src/config.js'; + +describe('Inmar adapter tests', function () { + var DEFAULT_PARAMS_NEW_SIZES = [{ + adUnitCode: 'test-div', + bidId: '2c7c8e9c900244', + mediaTypes: { + banner: { + sizes: [ + [300, 250], [300, 600], [728, 90], [970, 250]] + } + }, + bidder: 'inmar', + params: { + bidfloor: 0.5, + pid: 'ADb1f40rmi', + supplyType: 'site' + }, + auctionId: '0cb3144c-d084-4686-b0d6-f5dbe917c563', + bidRequestsCount: 1, + bidderRequestId: '1858b7382993ca', + transactionId: '29df2112-348b-4961-8863-1b33684d95e6', + user: {} + }]; + + var DEFAULT_PARAMS_VIDEO = [{ + adUnitCode: 'test-div', + bidId: '2c7c8e9c900244', + mediaTypes: { + video: { + context: 'instream', // or 'outstream' + playerSize: [640, 480], + mimes: ['video/mp4'] + } + }, + bidder: 'inmar', + params: { + bidfloor: 0.5, + pid: 'ADb1f40rmi', + supplyType: 'site' + }, + auctionId: '0cb3144c-d084-4686-b0d6-f5dbe917c563', + bidRequestsCount: 1, + bidderRequestId: '1858b7382993ca', + transactionId: '29df2112-348b-4961-8863-1b33684d95e6', + user: {} + }]; + + var DEFAULT_PARAMS_APP = [{ + adUnitCode: 'test-div', + bidId: '2c7c8e9c900244', + sizes: [ + [300, 250], + [300, 600], + [728, 90], + [970, 250] + ], + bidder: 'inmar', + params: { + bidfloor: 0.5, + ifa: 'AAAAAAAAA-BBBB-CCCC-1111-222222220000', + pid: 'ADb1f40rmi', + supplyType: 'app', + }, + auctionId: '0cb3144c-d084-4686-b0d6-f5dbe917c563', + bidRequestsCount: 1, + bidderRequestId: '1858b7382993ca', + transactionId: '29df2112-348b-4961-8863-1b33684d95e6' + }]; + + var DEFAULT_PARAMS_WO_OPTIONAL = [{ + adUnitCode: 'test-div', + bidId: '2c7c8e9c900244', + sizes: [ + [300, 250], + [300, 600], + [728, 90], + [970, 250] + ], + bidder: 'inmar', + params: { + pid: 'ADb1f40rmi', + supplyType: 'site', + }, + auctionId: '851adee7-d843-48f9-a7e9-9ff00573fcbf', + bidRequestsCount: 1, + bidderRequestId: '1858b7382993ca', + transactionId: '29df2112-348b-4961-8863-1b33684d95e6' + }]; + + var BID_RESPONSE = { + body: { + cpm: 1.50, + adm: '', + mediaType: 'js', + width: 300, + height: 250, + creativeId: '189198063', + netRevenue: true, + currency: 'USD', + ttl: 300, + dealId: 'dealId' + + } + }; + + var BID_RESPONSE_VIDEO = { + body: { + cpm: 1.50, + mediaType: 'video', + width: 1, + height: 1, + creativeId: '189198063', + netRevenue: true, + currency: 'USD', + ttl: 300, + vastXML: '', + dealId: 'dealId' + } + }; + + it('Verify build request to prebid 3.0 display test', function() { + const request = spec.buildRequests(DEFAULT_PARAMS_NEW_SIZES, { + gdprConsent: { + consentString: 'BOZcQl_ObPFjWAeABAESCD-AAAAjx7_______9______9uz_Ov_v_f__33e8__9v_l_7_-___u_-33d4-_1vf99yfm1-7ftr3tp_87ues2_Xur__59__3z3_NohBgA', + gdprApplies: true + }, + refererInfo: { + referer: 'https://domain.com', + numIframes: 0 + } + }); + + expect(request[0]).to.have.property('method').and.to.equal('POST'); + const requestContent = JSON.parse(request[0].data); + expect(requestContent).to.have.property('bidfloor').and.to.equal(0.5); + expect(requestContent).to.have.property('pid').and.to.equal('ADb1f40rmi'); + expect(requestContent).to.have.property('supplyType').and.to.equal('site'); + expect(requestContent).to.have.property('auctionId').and.to.equal('0cb3144c-d084-4686-b0d6-f5dbe917c563'); + expect(requestContent).to.have.property('bidId').and.to.equal('2c7c8e9c900244'); + expect(requestContent).to.have.property('bidRequestsCount').and.to.equal(1); + expect(requestContent).to.have.property('bidder').and.to.equal('inmar'); + expect(requestContent).to.have.property('bidderRequestId').and.to.equal('1858b7382993ca'); + expect(requestContent).to.have.property('tagId').and.to.equal('test-div'); + expect(requestContent).to.have.property('referer').and.to.equal('https%3A%2F%2Fdomain.com'); + expect(requestContent).to.have.property('sizes'); + expect(requestContent.sizes[0]).to.have.property('w').and.to.equal(300); + expect(requestContent.sizes[0]).to.have.property('h').and.to.equal(250); + expect(requestContent.sizes[1]).to.have.property('w').and.to.equal(300); + expect(requestContent.sizes[1]).to.have.property('h').and.to.equal(600); + expect(requestContent.sizes[2]).to.have.property('w').and.to.equal(728); + expect(requestContent.sizes[2]).to.have.property('h').and.to.equal(90); + expect(requestContent.sizes[3]).to.have.property('w').and.to.equal(970); + expect(requestContent.sizes[3]).to.have.property('h').and.to.equal(250); + expect(requestContent).to.have.property('transactionId').and.to.equal('29df2112-348b-4961-8863-1b33684d95e6'); + expect(requestContent).to.have.property('timeout').and.to.equal(3000); + expect(requestContent).to.have.property('numIframes').and.to.equal(0); + }) + + it('Verify interprete response', function () { + const request = spec.buildRequests(DEFAULT_PARAMS_NEW_SIZES, { + gdprConsent: { + consentString: 'BOZcQl_ObPFjWAeABAESCD-AAAAjx7_______9______9uz_Ov_v_f__33e8__9v_l_7_-___u_-33d4-_1vf99yfm1-7ftr3tp_87ues2_Xur__59__3z3_NohBgA', + gdprApplies: true + }, + refererInfo: { + referer: 'https://domain.com', + numIframes: 0 + } + }); + + const bids = spec.interpretResponse(BID_RESPONSE, request[0]); + expect(bids).to.have.lengthOf(1); + const bid = bids[0]; + expect(bid.cpm).to.equal(1.50); + expect(bid.ad).to.equal(''); + expect(bid.mediaType).to.equal('js'); + expect(bid.width).to.equal(300); + expect(bid.height).to.equal(250); + expect(bid.creativeId).to.equal('189198063'); + expect(bid.netRevenue).to.equal(true); + expect(bid.currency).to.equal('USD'); + expect(bid.ttl).to.equal(300); + expect(bid.dealId).to.equal('dealId'); + }); + + it('no banner media response', function () { + const request = spec.buildRequests(DEFAULT_PARAMS_NEW_SIZES, { + gdprConsent: { + consentString: 'BOZcQl_ObPFjWAeABAESCD-AAAAjx7_______9______9uz_Ov_v_f__33e8__9v_l_7_-___u_-33d4-_1vf99yfm1-7ftr3tp_87ues2_Xur__59__3z3_NohBgA', + gdprApplies: true + }, + refererInfo: { + referer: 'https://domain.com', + numIframes: 0 + } + }); + + const bids = spec.interpretResponse(BID_RESPONSE_VIDEO, request[0]); + const bid = bids[0]; + expect(bid.vastXml).to.equal(''); + }); + + it('Verifies bidder_code', function () { + expect(spec.code).to.equal('inmar'); + }); + + it('Verifies bidder aliases', function () { + expect(spec.aliases).to.have.lengthOf(1); + expect(spec.aliases[0]).to.equal('inm'); + }); + + it('Verifies if bid request is valid', function () { + expect(spec.isBidRequestValid(DEFAULT_PARAMS_NEW_SIZES[0])).to.equal(true); + expect(spec.isBidRequestValid(DEFAULT_PARAMS_WO_OPTIONAL[0])).to.equal(true); + expect(spec.isBidRequestValid({})).to.equal(false); + expect(spec.isBidRequestValid({ + params: {} + })).to.equal(false); + expect(spec.isBidRequestValid({ + params: { + pid: 'ADb1f40rmi' + } + })).to.equal(false); + expect(spec.isBidRequestValid({ + params: { + supplyType: 'site' + } + })).to.equal(false); + expect(spec.isBidRequestValid({ + params: { + supplyType: 'app' + } + })).to.equal(false); + expect(spec.isBidRequestValid({ + params: { + pid: 'ADb1f40rmi', + supplyType: 'site' + } + })).to.equal(true); + expect(spec.isBidRequestValid({ + params: { + pid: ['1gCB5ZC4XL', '1a40xk8qSV'], + supplyType: 'site' + } + })).to.equal(true); + expect(spec.isBidRequestValid({ + params: { + pid: 'ADb1f40rmi', + supplyType: 'site' + } + })).to.equal(true); + expect(spec.isBidRequestValid({ + params: { + pid: 'ADb1f40rmi', + supplyType: 'app', + ifa: 'AAAAAAAAA-BBBB-CCCC-1111-222222220000', + } + })).to.equal(true); + expect(spec.isBidRequestValid({ + params: { + pid: 'ADb1f40rmi', + supplyType: 'site', + bidfloor: 0.50, + } + })).to.equal(true); + expect(spec.isBidRequestValid({ + params: { + pid: 'ADb1f40rmi', + supplyType: 'site', + bidfloor: 0.50, + } + })).to.equal(true); + }); + + it('Verifies user syncs image', function () { + var syncs = spec.getUserSyncs({ + iframeEnabled: false, + pixelEnabled: true + }, [BID_RESPONSE], { + consentString: 'BOZcQl_ObPFjWAeABAESCD-AAAAjx7_______9______9uz_Ov_v_f__33e8__9v_l_7_-___u_-33d4-_1vf99yfm1-7ftr3tp_87ues2_Xur__59__3z3_NohBgA', + referer: 'http://domain.com', + gdprApplies: true + }) + expect(syncs).to.have.lengthOf(1); + expect(syncs[0].type).to.equal('image'); + + syncs = spec.getUserSyncs({ + iframeEnabled: false, + pixelEnabled: true + }, [BID_RESPONSE], { + consentString: '', + referer: 'http://domain.com', + gdprApplies: true + }) + expect(syncs).to.have.lengthOf(1); + expect(syncs[0].type).to.equal('image'); + + syncs = spec.getUserSyncs({ + iframeEnabled: false, + pixelEnabled: true + }, [], { + consentString: null, + referer: 'http://domain.com', + gdprApplies: true + }) + expect(syncs).to.have.lengthOf(1); + expect(syncs[0].type).to.equal('image'); + }); +}); From 36726b9be1c84c438b0274331dc5be8ffb2af252 Mon Sep 17 00:00:00 2001 From: Zak Andree Date: Thu, 6 Aug 2020 14:41:29 -0700 Subject: [PATCH 2/7] Update Inmar adapter --- modules/inmarBidAdapter.js | 139 ++++++++-------------- modules/inmarBidAdapter.md | 45 +------ test/spec/modules/inmarBidAdapter_spec.js | 135 +++------------------ 3 files changed, 71 insertions(+), 248 deletions(-) diff --git a/modules/inmarBidAdapter.js b/modules/inmarBidAdapter.js index 73699fc5923..b42dc41c4ce 100755 --- a/modules/inmarBidAdapter.js +++ b/modules/inmarBidAdapter.js @@ -1,3 +1,4 @@ +import * as utils from '../src/utils.js'; import { config } from '../src/config.js'; import { registerBidder } from '../src/adapters/bidderFactory.js'; import { BANNER, VIDEO } from '../src/mediaTypes.js'; @@ -16,7 +17,10 @@ export const spec = { * @returns {boolean} True if this is a valid bid, and false otherwise */ isBidRequestValid: function(bid) { - return !!(bid.params && bid.params.pid && bid.params.supplyType); + if (bid.bidder !== BIDDER_CODE) { + return false; + } + return true; }, /** @@ -26,41 +30,31 @@ export const spec = { * @returns {ServerRequest} Info describing the request to the server */ buildRequests: function(validBidRequests, bidderRequest) { - return validBidRequests.map(bid => { - var payload = { - bidfloor: bid.params.bidfloor, - ifa: bid.params.ifa, - pid: bid.params.pid, - supplyType: bid.params.supplyType, - currencyCode: config.getConfig('currency.adServerCurrency'), - auctionId: bid.auctionId, - bidId: bid.bidId, - bidRequestsCount: bid.bidRequestsCount, - bidder: bid.bidder, - bidderRequestId: bid.bidderRequestId, - tagId: bid.adUnitCode, - sizes: getBannerSizes(bid), - referer: (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null), - numIframes: (typeof bidderRequest.refererInfo.numIframes != 'undefined' ? bidderRequest.refererInfo.numIframes : null), - transactionId: bid.transactionId, - timeout: config.getConfig('bidderTimeout'), - demand: isDemandTypeVideo(bid) ? 'video' : 'display', - videoData: getVideoInfo(bid) - }; - - if (bidderRequest && bidderRequest.gdprConsent) { - payload.gdpr_consent = bidderRequest.gdprConsent.consentString; - payload.gdpr = bidderRequest.gdprConsent.gdprApplies; - } + var payload = { + bidderCode: bidderRequest.bidderCode, + auctionId: bidderRequest.auctionId, + bidderRequestId: bidderRequest.bidderRequestId, + bidRequests: validBidRequests, + auctionStart: bidderRequest.auctionStart, + timeout: bidderRequest.timeout, + referer: (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null), + start: bidderRequest.start, + gdprConsent: bidderRequest.gdprConsent, + uspConsent: bidderRequest.uspConsent, + currencyCode: config.getConfig('currency.adServerCurrency'), + domain: config.getConfig('publisherDomain'), + coppa: config.getConfig('coppa'), + firstPartyData: config.getConfig('fpd'), + prebidVersion: '$prebid.version$' + }; - var payloadString = JSON.stringify(payload); + var payloadString = JSON.stringify(payload); - return { - method: 'POST', + return { + method: 'POST', url: 'https://prebid.owneriq.net:8443/bidder/pb/bid', - data: payloadString, - }; - }); + data: payloadString, + }; }, /** @@ -71,31 +65,32 @@ export const spec = { */ interpretResponse: function(serverResponse, bidRequest) { const bidResponses = []; - // try catch var response = serverResponse.body; - if (response) { - var bidResponse = { - requestId: JSON.parse(bidRequest.data).bidId, - cpm: response.cpm, - width: response.width, - height: response.height, - creativeId: response.creativeId, - mediaType: response.mediaType, - netRevenue: response.netRevenue, - currency: response.currency, - ttl: response.ttl, - dealId: response.dealId, - }; - if (response.mediaType === 'video') { - bidResponse.vastXml = response.vastXML; - } else { - bidResponse.ad = response.adm - } + try { + if (response) { + var bidResponse = { + requestId: response.requestId, + cpm: response.cpm, + currency: response.currency, + width: response.width, + height: response.height, + ad: response.ad, + ttl: response.ttl, + creativeId: response.creativeId, + netRevenue: response.netRevenue, + vastUrl: response.vastUrl, + vastXml: response.vastXml, + dealId: response.dealId, + mediaType: response.mediaType + }; - bidResponses.push(bidResponse); + bidResponses.push(bidResponse); + } + } catch (error) { + utils.logError('Error while parsing inmar response', error); } - return bidResponses + return bidResponses; }, /** @@ -113,40 +108,8 @@ export const spec = { url: 'https://px.owneriq.net/eucm/p/pb' }); } - return syncs - }, + return syncs; + } }; registerBidder(spec); - -function getBannerSizes(bid) { - let newSizes; - if (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) { - newSizes = bid.mediaTypes.banner.sizes - } - if (newSizes != null) { - return newSizes.map(size => ({ - w: size[0], - h: size[1] - })); - } -} - -function isDemandTypeVideo(bid) { - if (bid.mediaTypes != undefined && bid.mediaTypes.video != undefined) { - return true; - } - return false; -} - -function getVideoInfo(bid) { - let videoData; - if (isDemandTypeVideo(bid)) { - videoData = { - format: bid.mediaTypes.video.context, - playerSize: bid.mediaTypes.video.playerSize, - mimes: bid.mediaTypes.video.mimes - }; - } - return videoData; -} diff --git a/modules/inmarBidAdapter.md b/modules/inmarBidAdapter.md index 8745d4783e8..0e760fda306 100644 --- a/modules/inmarBidAdapter.md +++ b/modules/inmarBidAdapter.md @@ -24,9 +24,7 @@ Please reach out to your account manager for more information. bids: [{ bidder: 'inmar', params: { - "pid":"ADb1f40rmi", - "supplyType":"site", - "bidfloor":0.70, + "placementId":"ADb1f40rmi", } }] }, @@ -36,48 +34,9 @@ Please reach out to your account manager for more information. bids: [{ bidder: 'inmar', params: { - "pid":"ADb1f40rmo", - "supplyType":"site", - "bidfloor":0.40, + "placementId":"ADb1f40rmo", } }] } ]; ``` - -## In-app -``` - var adUnits = [ - { - code: 'test-div1', - mediaTypes: { - banner: { - sizes: [[300, 250], [300, 600]] - } - }, - bids: [{ - bidder: 'inmar', - params: { - "pid":"ADb1f40rmi", - "supplyType":"app", - "ifa":"AAAAAAAAA-BBBB-CCCC-1111-222222220000", - "bidfloor":0.70, - } - }] - }, - { - code: 'test-div2', - sizes: [[728, 90],[970, 250]], - }, - bids: [{ - bidder: 'inmar', - params: { - "pid":"ADb1f40rmo", - "supplyType":"app", - "ifa":"AAAAAAAAA-BBBB-CCCC-1111-222222220000", - "bidfloor":0.40, - } - }] - } - ]; -``` diff --git a/test/spec/modules/inmarBidAdapter_spec.js b/test/spec/modules/inmarBidAdapter_spec.js index 2d58533ef9c..b644ca38c16 100644 --- a/test/spec/modules/inmarBidAdapter_spec.js +++ b/test/spec/modules/inmarBidAdapter_spec.js @@ -16,11 +16,6 @@ describe('Inmar adapter tests', function () { } }, bidder: 'inmar', - params: { - bidfloor: 0.5, - pid: 'ADb1f40rmi', - supplyType: 'site' - }, auctionId: '0cb3144c-d084-4686-b0d6-f5dbe917c563', bidRequestsCount: 1, bidderRequestId: '1858b7382993ca', @@ -39,11 +34,6 @@ describe('Inmar adapter tests', function () { } }, bidder: 'inmar', - params: { - bidfloor: 0.5, - pid: 'ADb1f40rmi', - supplyType: 'site' - }, auctionId: '0cb3144c-d084-4686-b0d6-f5dbe917c563', bidRequestsCount: 1, bidderRequestId: '1858b7382993ca', @@ -51,28 +41,6 @@ describe('Inmar adapter tests', function () { user: {} }]; - var DEFAULT_PARAMS_APP = [{ - adUnitCode: 'test-div', - bidId: '2c7c8e9c900244', - sizes: [ - [300, 250], - [300, 600], - [728, 90], - [970, 250] - ], - bidder: 'inmar', - params: { - bidfloor: 0.5, - ifa: 'AAAAAAAAA-BBBB-CCCC-1111-222222220000', - pid: 'ADb1f40rmi', - supplyType: 'app', - }, - auctionId: '0cb3144c-d084-4686-b0d6-f5dbe917c563', - bidRequestsCount: 1, - bidderRequestId: '1858b7382993ca', - transactionId: '29df2112-348b-4961-8863-1b33684d95e6' - }]; - var DEFAULT_PARAMS_WO_OPTIONAL = [{ adUnitCode: 'test-div', bidId: '2c7c8e9c900244', @@ -83,10 +51,6 @@ describe('Inmar adapter tests', function () { [970, 250] ], bidder: 'inmar', - params: { - pid: 'ADb1f40rmi', - supplyType: 'site', - }, auctionId: '851adee7-d843-48f9-a7e9-9ff00573fcbf', bidRequestsCount: 1, bidderRequestId: '1858b7382993ca', @@ -96,7 +60,7 @@ describe('Inmar adapter tests', function () { var BID_RESPONSE = { body: { cpm: 1.50, - adm: '', + ad: '', mediaType: 'js', width: 300, height: 250, @@ -119,7 +83,7 @@ describe('Inmar adapter tests', function () { netRevenue: true, currency: 'USD', ttl: 300, - vastXML: '', + vastXml: '', dealId: 'dealId' } }; @@ -136,30 +100,21 @@ describe('Inmar adapter tests', function () { } }); - expect(request[0]).to.have.property('method').and.to.equal('POST'); - const requestContent = JSON.parse(request[0].data); - expect(requestContent).to.have.property('bidfloor').and.to.equal(0.5); - expect(requestContent).to.have.property('pid').and.to.equal('ADb1f40rmi'); - expect(requestContent).to.have.property('supplyType').and.to.equal('site'); - expect(requestContent).to.have.property('auctionId').and.to.equal('0cb3144c-d084-4686-b0d6-f5dbe917c563'); - expect(requestContent).to.have.property('bidId').and.to.equal('2c7c8e9c900244'); - expect(requestContent).to.have.property('bidRequestsCount').and.to.equal(1); - expect(requestContent).to.have.property('bidder').and.to.equal('inmar'); - expect(requestContent).to.have.property('bidderRequestId').and.to.equal('1858b7382993ca'); - expect(requestContent).to.have.property('tagId').and.to.equal('test-div'); + expect(request).to.have.property('method').and.to.equal('POST'); + const requestContent = JSON.parse(request.data); + expect(requestContent.bidRequests[0]).to.have.property('auctionId').and.to.equal('0cb3144c-d084-4686-b0d6-f5dbe917c563'); + expect(requestContent.bidRequests[0]).to.have.property('bidId').and.to.equal('2c7c8e9c900244'); + expect(requestContent.bidRequests[0]).to.have.property('bidRequestsCount').and.to.equal(1); + expect(requestContent.bidRequests[0]).to.have.property('bidder').and.to.equal('inmar'); + expect(requestContent.bidRequests[0]).to.have.property('bidderRequestId').and.to.equal('1858b7382993ca'); + expect(requestContent.bidRequests[0]).to.have.property('adUnitCode').and.to.equal('test-div'); expect(requestContent).to.have.property('referer').and.to.equal('https%3A%2F%2Fdomain.com'); - expect(requestContent).to.have.property('sizes'); - expect(requestContent.sizes[0]).to.have.property('w').and.to.equal(300); - expect(requestContent.sizes[0]).to.have.property('h').and.to.equal(250); - expect(requestContent.sizes[1]).to.have.property('w').and.to.equal(300); - expect(requestContent.sizes[1]).to.have.property('h').and.to.equal(600); - expect(requestContent.sizes[2]).to.have.property('w').and.to.equal(728); - expect(requestContent.sizes[2]).to.have.property('h').and.to.equal(90); - expect(requestContent.sizes[3]).to.have.property('w').and.to.equal(970); - expect(requestContent.sizes[3]).to.have.property('h').and.to.equal(250); - expect(requestContent).to.have.property('transactionId').and.to.equal('29df2112-348b-4961-8863-1b33684d95e6'); - expect(requestContent).to.have.property('timeout').and.to.equal(3000); - expect(requestContent).to.have.property('numIframes').and.to.equal(0); + expect(requestContent.bidRequests[0].mediaTypes.banner).to.have.property('sizes'); + expect(requestContent.bidRequests[0].mediaTypes.banner.sizes[0]).to.have.ordered.members([300, 250]); + expect(requestContent.bidRequests[0].mediaTypes.banner.sizes[1]).to.have.ordered.members([300, 600]); + expect(requestContent.bidRequests[0].mediaTypes.banner.sizes[2]).to.have.ordered.members([728, 90]); + expect(requestContent.bidRequests[0].mediaTypes.banner.sizes[3]).to.have.ordered.members([970, 250]); + expect(requestContent.bidRequests[0]).to.have.property('transactionId').and.to.equal('29df2112-348b-4961-8863-1b33684d95e6'); }) it('Verify interprete response', function () { @@ -174,7 +129,7 @@ describe('Inmar adapter tests', function () { } }); - const bids = spec.interpretResponse(BID_RESPONSE, request[0]); + const bids = spec.interpretResponse(BID_RESPONSE, request); expect(bids).to.have.lengthOf(1); const bid = bids[0]; expect(bid.cpm).to.equal(1.50); @@ -201,7 +156,7 @@ describe('Inmar adapter tests', function () { } }); - const bids = spec.interpretResponse(BID_RESPONSE_VIDEO, request[0]); + const bids = spec.interpretResponse(BID_RESPONSE_VIDEO, request); const bid = bids[0]; expect(bid.vastXml).to.equal(''); }); @@ -222,60 +177,6 @@ describe('Inmar adapter tests', function () { expect(spec.isBidRequestValid({ params: {} })).to.equal(false); - expect(spec.isBidRequestValid({ - params: { - pid: 'ADb1f40rmi' - } - })).to.equal(false); - expect(spec.isBidRequestValid({ - params: { - supplyType: 'site' - } - })).to.equal(false); - expect(spec.isBidRequestValid({ - params: { - supplyType: 'app' - } - })).to.equal(false); - expect(spec.isBidRequestValid({ - params: { - pid: 'ADb1f40rmi', - supplyType: 'site' - } - })).to.equal(true); - expect(spec.isBidRequestValid({ - params: { - pid: ['1gCB5ZC4XL', '1a40xk8qSV'], - supplyType: 'site' - } - })).to.equal(true); - expect(spec.isBidRequestValid({ - params: { - pid: 'ADb1f40rmi', - supplyType: 'site' - } - })).to.equal(true); - expect(spec.isBidRequestValid({ - params: { - pid: 'ADb1f40rmi', - supplyType: 'app', - ifa: 'AAAAAAAAA-BBBB-CCCC-1111-222222220000', - } - })).to.equal(true); - expect(spec.isBidRequestValid({ - params: { - pid: 'ADb1f40rmi', - supplyType: 'site', - bidfloor: 0.50, - } - })).to.equal(true); - expect(spec.isBidRequestValid({ - params: { - pid: 'ADb1f40rmi', - supplyType: 'site', - bidfloor: 0.50, - } - })).to.equal(true); }); it('Verifies user syncs image', function () { From bd58f8e1b6c6e649ecc2df3db30153e4a91a4ef1 Mon Sep 17 00:00:00 2001 From: Zak Andree Date: Wed, 19 Aug 2020 22:02:45 -0700 Subject: [PATCH 3/7] Small fix --- modules/inmarBidAdapter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/inmarBidAdapter.js b/modules/inmarBidAdapter.js index b42dc41c4ce..ae0df8e061c 100755 --- a/modules/inmarBidAdapter.js +++ b/modules/inmarBidAdapter.js @@ -52,7 +52,7 @@ export const spec = { return { method: 'POST', - url: 'https://prebid.owneriq.net:8443/bidder/pb/bid', + url: 'https://prebid.owneriq.net:8443/bidder/pb/bid', data: payloadString, }; }, From 51c3b2d8f3b6903d8d38230257f02ea5cb6fd1c1 Mon Sep 17 00:00:00 2001 From: Zak Andree Date: Thu, 27 Aug 2020 20:46:16 -0700 Subject: [PATCH 4/7] Update Inmar params --- modules/inmarBidAdapter.js | 10 +++--- modules/inmarBidAdapter.md | 10 ++++-- test/spec/modules/inmarBidAdapter_spec.js | 43 ++++++++++++++++++++++- 3 files changed, 55 insertions(+), 8 deletions(-) diff --git a/modules/inmarBidAdapter.js b/modules/inmarBidAdapter.js index ae0df8e061c..88c0151aa55 100755 --- a/modules/inmarBidAdapter.js +++ b/modules/inmarBidAdapter.js @@ -17,10 +17,7 @@ export const spec = { * @returns {boolean} True if this is a valid bid, and false otherwise */ isBidRequestValid: function(bid) { - if (bid.bidder !== BIDDER_CODE) { - return false; - } - return true; + return !!(bid.params && bid.params.partnerId && bid.params.adnetId); }, /** @@ -37,7 +34,7 @@ export const spec = { bidRequests: validBidRequests, auctionStart: bidderRequest.auctionStart, timeout: bidderRequest.timeout, - referer: (typeof bidderRequest.refererInfo.referer != 'undefined' ? encodeURIComponent(bidderRequest.refererInfo.referer) : null), + refererInfo: bidderRequest.refererInfo, start: bidderRequest.start, gdprConsent: bidderRequest.gdprConsent, uspConsent: bidderRequest.uspConsent, @@ -53,6 +50,9 @@ export const spec = { return { method: 'POST', url: 'https://prebid.owneriq.net:8443/bidder/pb/bid', + options: { + withCredentials: false + }, data: payloadString, }; }, diff --git a/modules/inmarBidAdapter.md b/modules/inmarBidAdapter.md index 0e760fda306..86fe5abf2f0 100644 --- a/modules/inmarBidAdapter.md +++ b/modules/inmarBidAdapter.md @@ -24,7 +24,10 @@ Please reach out to your account manager for more information. bids: [{ bidder: 'inmar', params: { - "placementId":"ADb1f40rmi", + partnerId: 12345, + adnetId: 'ADb1f40rmi', + bidFloor: 0.70, + position: 1 } }] }, @@ -34,7 +37,10 @@ Please reach out to your account manager for more information. bids: [{ bidder: 'inmar', params: { - "placementId":"ADb1f40rmo", + partnerId: 12345, + adnetId: 'ADb1f40rmo', + bidFloor: 0.40, + position: 0 } }] } diff --git a/test/spec/modules/inmarBidAdapter_spec.js b/test/spec/modules/inmarBidAdapter_spec.js index b644ca38c16..9ba299bb4de 100644 --- a/test/spec/modules/inmarBidAdapter_spec.js +++ b/test/spec/modules/inmarBidAdapter_spec.js @@ -16,6 +16,11 @@ describe('Inmar adapter tests', function () { } }, bidder: 'inmar', + params: { + bidFloor: 0.5, + adnetId: 'ADb1f40rmi', + partnerId: 12345 + }, auctionId: '0cb3144c-d084-4686-b0d6-f5dbe917c563', bidRequestsCount: 1, bidderRequestId: '1858b7382993ca', @@ -34,6 +39,11 @@ describe('Inmar adapter tests', function () { } }, bidder: 'inmar', + params: { + bidFloor: 0.5, + adnetId: 'ADb1f40rmi', + partnerId: 12345 + }, auctionId: '0cb3144c-d084-4686-b0d6-f5dbe917c563', bidRequestsCount: 1, bidderRequestId: '1858b7382993ca', @@ -51,6 +61,10 @@ describe('Inmar adapter tests', function () { [970, 250] ], bidder: 'inmar', + params: { + adnetId: 'ADb1f40rmi', + partnerId: 12345, + }, auctionId: '851adee7-d843-48f9-a7e9-9ff00573fcbf', bidRequestsCount: 1, bidderRequestId: '1858b7382993ca', @@ -102,19 +116,23 @@ describe('Inmar adapter tests', function () { expect(request).to.have.property('method').and.to.equal('POST'); const requestContent = JSON.parse(request.data); + expect(requestContent.bidRequests[0].params).to.have.property('bidFloor').and.to.equal(0.5); + expect(requestContent.bidRequests[0].params).to.have.property('adnetId').and.to.equal('ADb1f40rmi'); + expect(requestContent.bidRequests[0].params).to.have.property('partnerId').and.to.equal(12345); expect(requestContent.bidRequests[0]).to.have.property('auctionId').and.to.equal('0cb3144c-d084-4686-b0d6-f5dbe917c563'); expect(requestContent.bidRequests[0]).to.have.property('bidId').and.to.equal('2c7c8e9c900244'); expect(requestContent.bidRequests[0]).to.have.property('bidRequestsCount').and.to.equal(1); expect(requestContent.bidRequests[0]).to.have.property('bidder').and.to.equal('inmar'); expect(requestContent.bidRequests[0]).to.have.property('bidderRequestId').and.to.equal('1858b7382993ca'); expect(requestContent.bidRequests[0]).to.have.property('adUnitCode').and.to.equal('test-div'); - expect(requestContent).to.have.property('referer').and.to.equal('https%3A%2F%2Fdomain.com'); + expect(requestContent.refererInfo).to.have.property('referer').and.to.equal('https://domain.com'); expect(requestContent.bidRequests[0].mediaTypes.banner).to.have.property('sizes'); expect(requestContent.bidRequests[0].mediaTypes.banner.sizes[0]).to.have.ordered.members([300, 250]); expect(requestContent.bidRequests[0].mediaTypes.banner.sizes[1]).to.have.ordered.members([300, 600]); expect(requestContent.bidRequests[0].mediaTypes.banner.sizes[2]).to.have.ordered.members([728, 90]); expect(requestContent.bidRequests[0].mediaTypes.banner.sizes[3]).to.have.ordered.members([970, 250]); expect(requestContent.bidRequests[0]).to.have.property('transactionId').and.to.equal('29df2112-348b-4961-8863-1b33684d95e6'); + expect(requestContent.refererInfo).to.have.property('numIframes').and.to.equal(0); }) it('Verify interprete response', function () { @@ -177,6 +195,29 @@ describe('Inmar adapter tests', function () { expect(spec.isBidRequestValid({ params: {} })).to.equal(false); + expect(spec.isBidRequestValid({ + params: { + adnetId: 'ADb1f40rmi' + } + })).to.equal(false); + expect(spec.isBidRequestValid({ + params: { + partnerId: 12345 + } + })).to.equal(false); + expect(spec.isBidRequestValid({ + params: { + adnetId: 'ADb1f40rmi', + partnerId: 12345 + } + })).to.equal(true); + expect(spec.isBidRequestValid({ + params: { + adnetId: 'ADb1f40rmi', + partnerId: 12345, + bidFloor: 0.50, + } + })).to.equal(true); }); it('Verifies user syncs image', function () { From 7436a909f305c07a368dcfd250e871360ec6b700 Mon Sep 17 00:00:00 2001 From: Zak Andree Date: Mon, 31 Aug 2020 14:55:36 -0700 Subject: [PATCH 5/7] Remove domain and bidFloor, add meta --- modules/inmarBidAdapter.js | 4 ++-- modules/inmarBidAdapter.md | 2 -- test/spec/modules/inmarBidAdapter_spec.js | 14 ++------------ 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/modules/inmarBidAdapter.js b/modules/inmarBidAdapter.js index 88c0151aa55..a62ac286be0 100755 --- a/modules/inmarBidAdapter.js +++ b/modules/inmarBidAdapter.js @@ -39,7 +39,6 @@ export const spec = { gdprConsent: bidderRequest.gdprConsent, uspConsent: bidderRequest.uspConsent, currencyCode: config.getConfig('currency.adServerCurrency'), - domain: config.getConfig('publisherDomain'), coppa: config.getConfig('coppa'), firstPartyData: config.getConfig('fpd'), prebidVersion: '$prebid.version$' @@ -82,7 +81,8 @@ export const spec = { vastUrl: response.vastUrl, vastXml: response.vastXml, dealId: response.dealId, - mediaType: response.mediaType + mediaType: response.mediaType, + meta: response.meta }; bidResponses.push(bidResponse); diff --git a/modules/inmarBidAdapter.md b/modules/inmarBidAdapter.md index 86fe5abf2f0..1bacb30f2dd 100644 --- a/modules/inmarBidAdapter.md +++ b/modules/inmarBidAdapter.md @@ -26,7 +26,6 @@ Please reach out to your account manager for more information. params: { partnerId: 12345, adnetId: 'ADb1f40rmi', - bidFloor: 0.70, position: 1 } }] @@ -39,7 +38,6 @@ Please reach out to your account manager for more information. params: { partnerId: 12345, adnetId: 'ADb1f40rmo', - bidFloor: 0.40, position: 0 } }] diff --git a/test/spec/modules/inmarBidAdapter_spec.js b/test/spec/modules/inmarBidAdapter_spec.js index 9ba299bb4de..7956f4c9470 100644 --- a/test/spec/modules/inmarBidAdapter_spec.js +++ b/test/spec/modules/inmarBidAdapter_spec.js @@ -17,7 +17,6 @@ describe('Inmar adapter tests', function () { }, bidder: 'inmar', params: { - bidFloor: 0.5, adnetId: 'ADb1f40rmi', partnerId: 12345 }, @@ -40,7 +39,6 @@ describe('Inmar adapter tests', function () { }, bidder: 'inmar', params: { - bidFloor: 0.5, adnetId: 'ADb1f40rmi', partnerId: 12345 }, @@ -75,7 +73,7 @@ describe('Inmar adapter tests', function () { body: { cpm: 1.50, ad: '', - mediaType: 'js', + mediaType: 'banner', width: 300, height: 250, creativeId: '189198063', @@ -116,7 +114,6 @@ describe('Inmar adapter tests', function () { expect(request).to.have.property('method').and.to.equal('POST'); const requestContent = JSON.parse(request.data); - expect(requestContent.bidRequests[0].params).to.have.property('bidFloor').and.to.equal(0.5); expect(requestContent.bidRequests[0].params).to.have.property('adnetId').and.to.equal('ADb1f40rmi'); expect(requestContent.bidRequests[0].params).to.have.property('partnerId').and.to.equal(12345); expect(requestContent.bidRequests[0]).to.have.property('auctionId').and.to.equal('0cb3144c-d084-4686-b0d6-f5dbe917c563'); @@ -152,7 +149,7 @@ describe('Inmar adapter tests', function () { const bid = bids[0]; expect(bid.cpm).to.equal(1.50); expect(bid.ad).to.equal(''); - expect(bid.mediaType).to.equal('js'); + expect(bid.mediaType).to.equal('banner'); expect(bid.width).to.equal(300); expect(bid.height).to.equal(250); expect(bid.creativeId).to.equal('189198063'); @@ -211,13 +208,6 @@ describe('Inmar adapter tests', function () { partnerId: 12345 } })).to.equal(true); - expect(spec.isBidRequestValid({ - params: { - adnetId: 'ADb1f40rmi', - partnerId: 12345, - bidFloor: 0.50, - } - })).to.equal(true); }); it('Verifies user syncs image', function () { From 014c39b4176f43de0aaba286c9001d974252b645 Mon Sep 17 00:00:00 2001 From: Zak Andree Date: Mon, 31 Aug 2020 16:05:39 -0700 Subject: [PATCH 6/7] Remove unused data --- modules/inmarBidAdapter.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/inmarBidAdapter.js b/modules/inmarBidAdapter.js index a62ac286be0..b5ab72266fc 100755 --- a/modules/inmarBidAdapter.js +++ b/modules/inmarBidAdapter.js @@ -79,9 +79,7 @@ export const spec = { creativeId: response.creativeId, netRevenue: response.netRevenue, vastUrl: response.vastUrl, - vastXml: response.vastXml, dealId: response.dealId, - mediaType: response.mediaType, meta: response.meta }; From 4d07cd02bac8dba812bb0f0b0b295e6e5f152145 Mon Sep 17 00:00:00 2001 From: Zak Andree Date: Tue, 1 Sep 2020 12:09:50 -0700 Subject: [PATCH 7/7] Fix unit tests --- test/spec/modules/inmarBidAdapter_spec.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/test/spec/modules/inmarBidAdapter_spec.js b/test/spec/modules/inmarBidAdapter_spec.js index 7956f4c9470..86b7ab3a8af 100644 --- a/test/spec/modules/inmarBidAdapter_spec.js +++ b/test/spec/modules/inmarBidAdapter_spec.js @@ -73,7 +73,9 @@ describe('Inmar adapter tests', function () { body: { cpm: 1.50, ad: '', - mediaType: 'banner', + meta: { + mediaType: 'banner', + }, width: 300, height: 250, creativeId: '189198063', @@ -88,14 +90,16 @@ describe('Inmar adapter tests', function () { var BID_RESPONSE_VIDEO = { body: { cpm: 1.50, - mediaType: 'video', + meta: { + mediaType: 'video', + }, width: 1, height: 1, creativeId: '189198063', netRevenue: true, currency: 'USD', ttl: 300, - vastXml: '', + vastUrl: 'https://vast.com/vast.xml', dealId: 'dealId' } }; @@ -149,7 +153,7 @@ describe('Inmar adapter tests', function () { const bid = bids[0]; expect(bid.cpm).to.equal(1.50); expect(bid.ad).to.equal(''); - expect(bid.mediaType).to.equal('banner'); + expect(bid.meta.mediaType).to.equal('banner'); expect(bid.width).to.equal(300); expect(bid.height).to.equal(250); expect(bid.creativeId).to.equal('189198063'); @@ -173,7 +177,7 @@ describe('Inmar adapter tests', function () { const bids = spec.interpretResponse(BID_RESPONSE_VIDEO, request); const bid = bids[0]; - expect(bid.vastXml).to.equal(''); + expect(bid.vastUrl).to.equal('https://vast.com/vast.xml'); }); it('Verifies bidder_code', function () {