Skip to content

Commit

Permalink
Merge pull request #25 from PubMatic-OpenWrap/prebid_1.x_upgrade_gdpr…
Browse files Browse the repository at this point in the history
…_1.9

Prebid 1.x upgrade gdpr 1.9
  • Loading branch information
PubMatic-OpenWrap committed May 7, 2018
2 parents c565b87 + 0894312 commit 4f3e247
Show file tree
Hide file tree
Showing 59 changed files with 3,011 additions and 680 deletions.
1 change: 1 addition & 0 deletions PR_REVIEW.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ For modules and core platform updates, the initial reviewer should request an ad
- Adapters may not use the $$PREBID_GLOBAL$$ variable
- All adapters must support the creation of multiple concurrent instances. This means, for example, that adapters cannot rely on mutable global variables.
- Adapters may not globally override or default the standard ad server targeting values: hb_adid, hb_bidder, hb_pb, hb_deal, or hb_size, hb_source, hb_format.
- After a new adapter is approved, let the submitter know they may open a PR in the [headerbid-expert repository](https://github.com/prebid/headerbid-expert) to have their adapter recognized by the [Headerbid Expert extension](https://chrome.google.com/webstore/detail/headerbid-expert/cgfkddgbnfplidghapbbnngaogeldmop). The PR should be to the [bidder patterns file](https://github.com/prebid/headerbid-expert/blob/master/bidderPatterns.js), adding an entry with their adapter's name and the url the adapter uses to send and receive bid responses.

## Ticket Coordinator

Expand Down
19 changes: 12 additions & 7 deletions modules/adformBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,15 @@ export const spec = {
isBidRequestValid: function (bid) {
return !!(bid.params.mid);
},
buildRequests: function (validBidRequests) {
var i, l, j, k, bid, _key, _value, reqParams;
buildRequests: function (validBidRequests, bidderRequest) {
var i, l, j, k, bid, _key, _value, reqParams, netRevenue;
var request = [];
var globalParams = [ [ 'adxDomain', 'adx.adform.net' ], [ 'fd', 1 ], [ 'url', null ], [ 'tid', null ], [ 'pt', null ] ];
var netRevenue = 'gross';
var globalParams = [ [ 'adxDomain', 'adx.adform.net' ], [ 'fd', 1 ], [ 'url', null ], [ 'tid', null ] ];
var bids = JSON.parse(JSON.stringify(validBidRequests));
for (i = 0, l = bids.length; i < l; i++) {
bid = bids[i];
if (bid.params.priceType === 'net') {
bid.params.pt = netRevenue = 'net';
if ((bid.params.priceType === 'net') || (bid.params.pt === 'net')) {
netRevenue = 'net';
}
for (j = 0, k = globalParams.length; j < k; j++) {
_key = globalParams[j][0];
Expand All @@ -35,9 +34,15 @@ export const spec = {
}

request.unshift('//' + globalParams[0][1] + '/adx/?rp=4');

netRevenue = netRevenue || 'gross';
request.push('pt=' + netRevenue);
request.push('stid=' + validBidRequests[0].auctionId);

if (bidderRequest && bidderRequest.gdprConsent) {
request.push('gdpr=' + bidderRequest.gdprConsent.gdprApplies);
request.push('gdpr_consent=' + bidderRequest.gdprConsent.consentString);
}

for (i = 1, l = globalParams.length; i < l; i++) {
_key = globalParams[i][0];
_value = globalParams[i][1];
Expand Down
147 changes: 147 additions & 0 deletions modules/admaticBidAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
import * as utils from 'src/utils';
import { registerBidder } from 'src/adapters/bidderFactory';

const BIDDER_CODE = 'admatic';
const ENDPOINT_URL = '//ads4.admatic.com.tr/prebid/v3/bidrequest';

export const spec = {
code: BIDDER_CODE,
aliases: ['admatic'], // short code
/**
* Determines whether or not the given bid request is valid.
*
* @param {BidRequest} bid The bid params to validate.
* @return boolean True if this is a valid bid, and false otherwise.
*/
isBidRequestValid: function (bid) {
return !!(bid.params.pid && bid.params.wid && bid.params.url);
},
/**
* Make a server request from the list of BidRequests.
*
* @param {validBidRequests[]} - an array of bids
* @return ServerRequest Info describing the request to the server.
*/
buildRequests: function (validBidRequests) {
const payload = {
request: []
};

for (var i = 0; i < validBidRequests.length; i++) {
var validBidRequest = validBidRequests[i];
payload.auctionId = validBidRequest.auctionId;
payload.bidder = validBidRequest.bidder;
payload.bidderRequestId = validBidRequest.bidderRequestId;
payload.pid = validBidRequest.params.pid;
payload.wid = validBidRequest.params.wid;
payload.url = validBidRequest.params.url;

var request = {
adUnitCode: validBidRequest.adUnitCode,
bidId: validBidRequest.bidId,
transactionId: validBidRequest.transactionId,
priceType: validBidRequest.params.priceType,
sizes: transformSizes(validBidRequest.sizes)
}

payload.request.push(request);
}

const payloadString = JSON.stringify(payload);

return {
method: 'POST',
url: ENDPOINT_URL,
data: payloadString,
bidder: 'admatic',
bids: validBidRequests
};
},

/**
* Unpack the response from the server into a list of bids.
*
* @param {ServerResponse} serverResponse A successful response from the server.
* @return {Bid[]} An array of bids which were nested inside the server.
*/
interpretResponse: function (serverResponse, bidRequest) {
const serverBody = serverResponse.body;
const bidResponses = [];

if (serverBody) {
if (serverBody.tags && serverBody.tags.length > 0) {
serverBody.tags.forEach(serverBid => {
if (serverBid != null) {
if (serverBid.cpm !== 0) {
const bidResponse = {
requestId: serverBid.bidId,
cpm: serverBid.cpm,
width: serverBid.width,
height: serverBid.height,
creativeId: serverBid.creativeId,
dealId: serverBid.dealId,
currency: serverBid.currency,
netRevenue: serverBid.netRevenue,
ttl: serverBid.ttl,
referrer: serverBid.referrer,
ad: serverBid.ad
};

bidResponses.push(bidResponse);
}
}
});
}
}

return bidResponses;
},
/**
* Register the user sync pixels which should be dropped after the auction.
*
* @param {SyncOptions} syncOptions Which user syncs are allowed?
* @param {ServerResponse[]} serverResponses List of server's responses.
* @return {UserSync[]} The user syncs which should be dropped.
*/
getUserSyncs: function (syncOptions, serverResponses) {
const syncs = [];
if (syncOptions.iframeEnabled) {
syncs.push({
type: 'iframe',
url: '//ads4.admatic.com.tr/prebid/static/usersync/v3/async_usersync.html'
});
}

if (syncOptions.pixelEnabled && serverResponses.length > 0) {
syncs.push({
type: 'image',
url: 'https://ads5.admatic.com.tr/prebid/v3/bidrequest/usersync'
});
}
return syncs;
}
}

/* Turn bid request sizes into ut-compatible format */
function transformSizes(requestSizes) {
let sizes = [];
let sizeObj = {};

if (utils.isArray(requestSizes) && requestSizes.length === 2 && !utils.isArray(requestSizes[0])) {
sizeObj.width = parseInt(requestSizes[0], 10);
sizeObj.height = parseInt(requestSizes[1], 10);
sizes.push(sizeObj);
} else if (typeof requestSizes === 'object') {
for (let i = 0; i < requestSizes.length; i++) {
let size = requestSizes[i];
sizeObj = {};
sizeObj.width = parseInt(size[0], 10);
sizeObj.height = parseInt(size[1], 10);
sizes.push(sizeObj);
}
}

return sizes;
}

registerBidder(spec);
54 changes: 54 additions & 0 deletions modules/admaticBidAdapter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Overview

```
Module Name: AdMatic Bidder Adapter
Module Type: Bidder Adapter
Maintainer: prebid@admatic.com.tr
```

# Description

Module that connects to AdMatic demand sources

# Test Parameters
```
var adUnits = [
{
code: 'test-div',
mediaTypes: {
banner: {
sizes: [[300, 250]], // a display size
}
},
bids: [
{
bidder: "admatic",
params: {
pid: 193937152158, // publisher id without "adm-pub-" prefix
wid: 104276324971, // website id
priceType: 'gross', // default is net
url: window.location.href || window.top.location.href //page url from js
}
}
]
},{
code: 'test-div',
mediaTypes: {
banner: {
sizes: [[320, 50]], // a mobile size
}
},
bids: [
{
bidder: "admatic",
params: {
pid: 193937152158, // publisher id without "adm-pub-" prefix
wid: 104276324971, // website id
priceType: 'gross', // default is net
url: window.location.href || window.top.location.href //page url from js
}
}
]
}
];
```
Loading

0 comments on commit 4f3e247

Please sign in to comment.