forked from prebid/Prebid.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgnetBidAdapter.js
128 lines (106 loc) · 3.43 KB
/
gnetBidAdapter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { _each, isEmpty, parseSizesInput } from '../src/utils.js';
import { BANNER } from '../src/mediaTypes.js';
import { getStorageManager } from '../src/storageManager.js';
import {ajax} from '../src/ajax.js';
/**
* @typedef {import('../src/adapters/bidderFactory.js').BidRequest} BidRequest
* @typedef {import('../src/adapters/bidderFactory.js').Bid} Bid
* @typedef {import('../src/adapters/bidderFactory.js').BidderRequest} BidderRequest
* @typedef {import('../src/adapters/bidderFactory.js').validBidRequests} validBidRequests
*/
const BIDDER_CODE = 'gnet';
const ENDPOINT = 'https://service.gnetrtb.com/api';
const storage = getStorageManager({bidderCode: BIDDER_CODE});
export const spec = {
code: BIDDER_CODE,
supportedMediaTypes: [BANNER],
/**
* 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.websiteId && bid.params.adunitId);
},
/**
* Make a server request from the list of BidRequests.
*
* @param {validBidRequests} validBidRequests an array of bids
* @param {BidderRequest} bidderRequest
* @return ServerRequest Info describing the request to the server.
*/
buildRequests: function (validBidRequests, bidderRequest) {
const bidRequests = [];
// TODO: is 'page' the right value?
const referer = bidderRequest.refererInfo.page;
_each(validBidRequests, (request) => {
const data = {};
data.referer = referer;
data.adUnitCode = request.adUnitCode;
data.bidId = request.bidId;
data.transactionId = request.ortb2Imp?.ext?.tid;
data.gftuid = _getCookie();
data.sizes = parseSizesInput(request.sizes);
data.params = request.params;
const payloadString = JSON.stringify(data);
bidRequests.push({
method: 'POST',
url: ENDPOINT + '/adrequest',
options: {
withCredentials: false,
},
data: payloadString
});
});
return bidRequests;
},
/**
* Unpack the response from the server into a list of bids.
*
* @param {*} serverResponse A successful response from the server.
* @return {Bid[]} An array of bids which were nested inside the server.
*/
interpretResponse: function (serverResponse, requests) {
if (typeof serverResponse !== 'object') {
return [];
}
const res = serverResponse && serverResponse.body;
if (isEmpty(res)) {
return [];
}
if (res.bids) {
const bids = [];
_each(res.bids, (bidData) => {
const bid = {
requestId: bidData.bidId,
cpm: bidData.cpm,
currency: bidData.currency,
width: bidData.width,
height: bidData.height,
ad: bidData.ad,
ttl: 300,
meta: {
advertiserDomains: bidData.adomain ? bidData.adomain : []
},
creativeId: bidData.creativeId,
netRevenue: true,
};
bids.push(bid);
});
return bids;
}
return [];
},
onBidWon: function (bid) {
ajax(ENDPOINT + '/bid-won', null, JSON.stringify(bid), {
method: 'POST',
});
return true;
},
};
function _getCookie() {
return storage.cookiesAreEnabled() ? storage.getCookie('gftuid') : null;
}
registerBidder(spec);