Skip to content

Commit

Permalink
Apply some updates to Valueimpression bid adapter (prebid#5356)
Browse files Browse the repository at this point in the history
- Update new adapter endpoint & usersync url
- Use window.top instead window object
- Use bidRequest.referrerInfo object to get page url, referrer
- Tracking ad position by size called targetKey
  • Loading branch information
thuyhq authored and iggyfisk committed Jun 22, 2020
1 parent a7ed98a commit 25960c9
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 32 deletions.
113 changes: 90 additions & 23 deletions modules/valueimpressionBidAdapter.js
@@ -1,8 +1,10 @@
import * as utils from '../src/utils.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
const BIDDER_CODE = 'valueimpression';
const ENDPOINT = 'https://adapter.valueimpression.com/bid';
const USER_SYNC_URL = 'https://adapter.valueimpression.com/usersync';
const ENDPOINT = 'https://useast.quantumdex.io/auction/adapter';
const USER_SYNC_URL = 'https://sync.quantumdex.io/usersync/adapter';
var bySlotTargetKey = {};
var bySlotSizesCount = {}

export const spec = {
code: BIDDER_CODE,
Expand Down Expand Up @@ -33,19 +35,41 @@ export const spec = {
},

buildRequests: function (validBidRequests, bidderRequest) {
var bids = JSON.parse(JSON.stringify(validBidRequests))
const payload = {};

bids.forEach(bidReq => {
var targetKey = 0;
if (bySlotTargetKey[bidReq.adUnitCode] != undefined) {
targetKey = bySlotTargetKey[bidReq.adUnitCode];
} else {
var biggestSize = _getBiggestSize(bidReq.sizes);
if (biggestSize) {
if (bySlotSizesCount[biggestSize] != undefined) {
bySlotSizesCount[biggestSize]++
targetKey = bySlotSizesCount[biggestSize];
} else {
bySlotSizesCount[biggestSize] = 0;
targetKey = 0
}
}
}
bySlotTargetKey[bidReq.adUnitCode] = targetKey;
bidReq.targetKey = targetKey;
});

payload.device = {};
payload.device.ua = navigator.userAgent;
payload.device.height = window.innerHeight;
payload.device.width = window.innerWidth;
payload.device.height = window.top.innerHeight;
payload.device.width = window.top.innerWidth;
payload.device.dnt = _getDoNotTrack();
payload.device.language = navigator.language;

payload.site = {};
payload.site.id = validBidRequests[0].params.siteId;
payload.site.page = window.location.href;
payload.site.referrer = document.referrer;
payload.site.hostname = window.location.hostname;
payload.site.id = bids[0].params.siteId;
payload.site.page = _extractTopWindowUrlFromBidderRequest(bidderRequest);
payload.site.referrer = _extractTopWindowReferrerFromBidderRequest(bidderRequest);
payload.site.hostname = window.top.location.hostname;

// Apply GDPR parameters to request.
payload.gdpr = {};
Expand All @@ -55,21 +79,23 @@ export const spec = {
payload.gdpr.consentString = bidderRequest.gdprConsent.consentString;
}
}
if (validBidRequests[0].schain) {
payload.schain = JSON.stringify(validBidRequests[0].schain)
// Apply schain.
if (bids[0].schain) {
payload.schain = JSON.stringify(bids[0].schain)
}
// Apply us_privacy.
if (bidderRequest && bidderRequest.uspConsent) {
payload.us_privacy = bidderRequest.uspConsent;
}

payload.bids = validBidRequests;
payload.bids = bids;

return {
method: 'POST',
url: ENDPOINT,
data: payload,
withCredentials: true,
bidderRequests: validBidRequests
bidderRequests: bids
};
},
interpretResponse: function (serverResponse, bidRequest) {
Expand Down Expand Up @@ -125,21 +151,26 @@ export const spec = {
}
} catch (e) { }
return syncs;
},

onTimeout: function (timeoutData) {
},

onBidWon: function (bid) {
},

onSetTargeting: function (bid) {
}
};

function _getBiggestSize(sizes) {
if (sizes.length <= 0) return false
var acreage = 0;
var index = 0;
for (var i = 0; i < sizes.length; i++) {
var currentAcreage = sizes[i][0] * sizes[i][1];
if (currentAcreage >= acreage) {
acreage = currentAcreage;
index = i;
}
}
return sizes[index][0] + 'x' + sizes[index][1];
}

function _getDoNotTrack() {
if (window.doNotTrack || navigator.doNotTrack || navigator.msDoNotTrack) {
if (window.doNotTrack == '1' || navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') {
if (window.top.doNotTrack || navigator.doNotTrack || navigator.msDoNotTrack) {
if (window.top.doNotTrack == '1' || navigator.doNotTrack == 'yes' || navigator.doNotTrack == '1' || navigator.msDoNotTrack == '1') {
return 1;
} else {
return 0;
Expand All @@ -149,4 +180,40 @@ function _getDoNotTrack() {
}
}

/**
* Extracts the page url from given bid request or use the (top) window location as fallback
*
* @param {*} bidderRequest
* @returns {string}
*/
function _extractTopWindowUrlFromBidderRequest(bidderRequest) {
if (bidderRequest && utils.deepAccess(bidderRequest, 'refererInfo.canonicalUrl')) {
return bidderRequest.refererInfo.canonicalUrl;
}

try {
return window.top.location.href;
} catch (e) {
return window.location.href;
}
}

/**
* Extracts the referrer from given bid request or use the (top) document referrer as fallback
*
* @param {*} bidderRequest
* @returns {string}
*/
function _extractTopWindowReferrerFromBidderRequest(bidderRequest) {
if (bidderRequest && utils.deepAccess(bidderRequest, 'refererInfo.referer')) {
return bidderRequest.refererInfo.referer;
}

try {
return window.top.document.referrer;
} catch (e) {
return window.document.referrer;
}
}

registerBidder(spec);
2 changes: 1 addition & 1 deletion modules/valueimpressionBidAdapter.md
Expand Up @@ -3,7 +3,7 @@
```
Module Name: Valueimpression Bidder Adapter
Module Type: Bidder Adapter
Maintainer: thuyhq@83.com.vn
Maintainer: k.vision@valueimpression.com
```

# Description
Expand Down
18 changes: 10 additions & 8 deletions test/spec/modules/valueimpressionBidAdapter_spec.js
Expand Up @@ -202,6 +202,7 @@ describe('ValueimpressionBidAdapter', function () {
},
'adUnitCode': 'adunit-code-1',
'sizes': [[300, 250], [300, 600]],
'targetKey': 0,
'bidId': '30b31c1838de1f',
},
{
Expand All @@ -213,6 +214,7 @@ describe('ValueimpressionBidAdapter', function () {
},
'adUnitCode': 'adunit-code-2',
'sizes': [[120, 600], [300, 600], [160, 600]],
'targetKey': 1,
'bidId': '30b31c1838de1e',
}];

Expand All @@ -233,14 +235,14 @@ describe('ValueimpressionBidAdapter', function () {

it('should return a properly formatted request', function () {
const bidRequests = spec.buildRequests(bidRequest, bidderRequests)
expect(bidRequests.url).to.equal('https://adapter.valueimpression.com/bid')
expect(bidRequests.url).to.equal('https://useast.quantumdex.io/auction/adapter')
expect(bidRequests.method).to.equal('POST')
expect(bidRequests.bidderRequests).to.eql(bidRequest);
})

it('should return a properly formatted request with GDPR applies set to true', function () {
const bidRequests = spec.buildRequests(bidRequest, bidderRequests)
expect(bidRequests.url).to.equal('https://adapter.valueimpression.com/bid')
expect(bidRequests.url).to.equal('https://useast.quantumdex.io/auction/adapter')
expect(bidRequests.method).to.equal('POST')
expect(bidRequests.data.gdpr.gdprApplies).to.equal('true')
expect(bidRequests.data.gdpr.consentString).to.equal('BOJ/P2HOJ/P2HABABMAAAAAZ+A==')
Expand All @@ -249,7 +251,7 @@ describe('ValueimpressionBidAdapter', function () {
it('should return a properly formatted request with GDPR applies set to false', function () {
bidderRequests.gdprConsent.gdprApplies = false;
const bidRequests = spec.buildRequests(bidRequest, bidderRequests)
expect(bidRequests.url).to.equal('https://adapter.valueimpression.com/bid')
expect(bidRequests.url).to.equal('https://useast.quantumdex.io/auction/adapter')
expect(bidRequests.method).to.equal('POST')
expect(bidRequests.data.gdpr.gdprApplies).to.equal('false')
expect(bidRequests.data.gdpr.consentString).to.equal('BOJ/P2HOJ/P2HABABMAAAAAZ+A==')
Expand All @@ -269,7 +271,7 @@ describe('ValueimpressionBidAdapter', function () {
}
};
const bidRequests = spec.buildRequests(bidRequest, bidderRequests)
expect(bidRequests.url).to.equal('https://adapter.valueimpression.com/bid')
expect(bidRequests.url).to.equal('https://useast.quantumdex.io/auction/adapter')
expect(bidRequests.method).to.equal('POST')
expect(bidRequests.data.gdpr.gdprApplies).to.equal('false')
expect(bidRequests.data.gdpr).to.not.include.keys('consentString')
Expand All @@ -289,7 +291,7 @@ describe('ValueimpressionBidAdapter', function () {
}
};
const bidRequests = spec.buildRequests(bidRequest, bidderRequests)
expect(bidRequests.url).to.equal('https://adapter.valueimpression.com/bid')
expect(bidRequests.url).to.equal('https://useast.quantumdex.io/auction/adapter')
expect(bidRequests.method).to.equal('POST')
expect(bidRequests.data.gdpr.gdprApplies).to.equal('true')
expect(bidRequests.data.gdpr).to.not.include.keys('consentString')
Expand All @@ -307,7 +309,7 @@ describe('ValueimpressionBidAdapter', function () {
describe('.interpretResponse', function () {
const bidRequests = {
'method': 'POST',
'url': 'https://adapter.valueimpression.com/bid',
'url': 'https://useast.quantumdex.io/auction/adapter',
'withCredentials': true,
'data': {
'device': {
Expand All @@ -319,9 +321,9 @@ describe('ValueimpressionBidAdapter', function () {
},
'site': {
'id': '343',
'page': 'https://www.includehelp.com/?pbjs_debug=true',
'page': 'https://www.example.com/tutorial',
'referrer': '',
'hostname': 'www.includehelp.com'
'hostname': 'www.example.com'
}
},
'bidderRequests': [
Expand Down

0 comments on commit 25960c9

Please sign in to comment.