diff --git a/modules/adhashBidAdapter.js b/modules/adhashBidAdapter.js index 33a85a81525..08f9466823b 100644 --- a/modules/adhashBidAdapter.js +++ b/modules/adhashBidAdapter.js @@ -1,7 +1,7 @@ import {registerBidder} from '../src/adapters/bidderFactory.js'; import { getStorageManager } from '../src/storageManager.js'; import { includes } from '../src/polyfill.js'; -import { BANNER } from '../src/mediaTypes.js'; +import { BANNER, VIDEO } from '../src/mediaTypes.js'; const VERSION = '3.2'; const BAD_WORD_STEP = 0.1; @@ -130,13 +130,13 @@ function brandSafety(badWords, maxScore) { export const spec = { code: ADHASH_BIDDER_CODE, - supportedMediaTypes: [ BANNER ], + supportedMediaTypes: [ BANNER, VIDEO ], isBidRequestValid: (bid) => { try { const { publisherId, platformURL, bidderURL } = bid.params; return ( - includes(Object.keys(bid.mediaTypes), BANNER) && + (includes(Object.keys(bid.mediaTypes), BANNER) || includes(Object.keys(bid.mediaTypes), VIDEO)) && typeof publisherId === 'string' && publisherId.length === 42 && typeof platformURL === 'string' && @@ -168,7 +168,14 @@ export const spec = { const url = `${bidderURL}/rtb?version=${VERSION}&prebid=true`; const index = Math.floor(Math.random() * validBidRequests[i].sizes.length); const size = validBidRequests[i].sizes[index].join('x'); - + const creativeData = includes(Object.keys(validBidRequests[i].mediaTypes), VIDEO) ? { + size: 'preroll', + position: validBidRequests[i].adUnitCode, + playerSize: size + } : { + size: size, + position: validBidRequests[i].adUnitCode + }; let recentAds = []; if (storage.localStorageIsEnabled()) { const prefix = validBidRequests[i].params.prefix || 'adHash'; @@ -204,10 +211,7 @@ export const spec = { language: window.navigator.language, userAgent: window.navigator.userAgent }, - creatives: [{ - size: size, - position: validBidRequests[i].adUnitCode - }], + creatives: [creativeData], blockedCreatives: [], currentTimestamp: (new Date().getTime() / 1000) | 0, recentAds: recentAds, @@ -229,7 +233,6 @@ export const spec = { interpretResponse: (serverResponse, request) => { const responseBody = serverResponse ? serverResponse.body : {}; - if ( !responseBody.creatives || responseBody.creatives.length === 0 || @@ -241,18 +244,12 @@ export const spec = { const publisherURL = JSON.stringify(request.bidRequest.params.platformURL); const bidderURL = request.bidRequest.params.bidderURL || 'https://bidder.adhash.com'; const oneTimeId = request.bidRequest.adUnitCode + Math.random().toFixed(16).replace('0.', '.'); - const globalScript = !request.bidRequest.params.globalScript - ? `` - : ''; const bidderResponse = JSON.stringify({ responseText: JSON.stringify(responseBody) }); const requestData = JSON.stringify(request.data); - return [{ + var response = { requestId: request.bidRequest.bidId, cpm: responseBody.creatives[0].costEUR, - ad: - `
${globalScript} - `, width: request.bidRequest.sizes[0][0], height: request.bidRequest.sizes[0][1], creativeId: request.bidRequest.adUnitCode, @@ -262,7 +259,21 @@ export const spec = { meta: { advertiserDomains: responseBody.advertiserDomains ? [responseBody.advertiserDomains] : [] } - }]; + }; + if (typeof request == 'object' && typeof request.bidRequest == 'object' && typeof request.bidRequest.mediaTypes == 'object' && includes(Object.keys(request.bidRequest.mediaTypes), BANNER)) { + response = Object.assign({ + ad: + `
+ + ` + }, response); + } else if (includes(Object.keys(request.bidRequest.mediaTypes), VIDEO)) { + response = Object.assign({ + vastUrl: responseBody.creatives[0].vastURL, + mediaType: VIDEO + }, response); + } + return [response]; } }; diff --git a/test/spec/modules/adhashBidAdapter_spec.js b/test/spec/modules/adhashBidAdapter_spec.js index 4ea525c59d5..2d3458fff79 100644 --- a/test/spec/modules/adhashBidAdapter_spec.js +++ b/test/spec/modules/adhashBidAdapter_spec.js @@ -74,7 +74,12 @@ describe('adhashBidAdapter', function () { publisherId: '0xc3b09b27e9c6ef73957901aa729b9e69e5bbfbfb' }, sizes: [[300, 250]], - adUnitCode: 'adUnitCode' + adUnitCode: 'adUnitCode', + mediaTypes: { + banner: { + sizes: [[300, 250]] + } + } }; it('should build the request correctly', function () { const result = spec.buildRequests( @@ -122,6 +127,11 @@ describe('adhashBidAdapter', function () { sizes: [[300, 250]], params: { platformURL: 'https://adhash.com/p/struma/' + }, + mediaTypes: { + banner: { + sizes: [[300, 250]] + } } } }; @@ -267,5 +277,45 @@ describe('adhashBidAdapter', function () { it('should return empty array when something is not right', function () { expect(spec.interpretResponse(null, request).length).to.equal(0); }); + + it('should interpret the video response correctly', function () { + const result = spec.interpretResponse({ + body: { + creatives: [{ costEUR: 1.234, vastURL: 'https://example.com/vast' }], + advertiserDomains: 'adhash.com' + } + }, { + data: { some: 'data' }, + bidRequest: { + bidId: '12345678901234', + adUnitCode: 'adunit-code', + sizes: [[300, 250]], + params: { + platformURL: 'https://adhash.com/p/struma/' + }, + mediaTypes: { + video: { + context: 'instream', + playerSize: [300, 250], + mimes: ['video/mp4'], + protocols: [1, 2, 3, 4, 5, 6, 7, 8], + playbackmethod: [2], + skip: 1 + } + } + } + }); + expect(result.length).to.equal(1); + expect(result[0].requestId).to.equal('12345678901234'); + expect(result[0].cpm).to.equal(1.234); + expect(result[0].width).to.equal(300); + expect(result[0].height).to.equal(250); + expect(result[0].creativeId).to.equal('adunit-code'); + expect(result[0].netRevenue).to.equal(true); + expect(result[0].currency).to.equal('EUR'); + expect(result[0].ttl).to.equal(60); + expect(result[0].meta.advertiserDomains).to.eql(['adhash.com']); + expect(result[0].vastUrl).to.equal('https://example.com/vast'); + }); }); });