forked from prebid/Prebid.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathescalaxBidAdapter.js
106 lines (94 loc) · 3.19 KB
/
escalaxBidAdapter.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
import { ortbConverter } from '../libraries/ortbConverter/converter.js';
import { registerBidder } from '../src/adapters/bidderFactory.js';
import { config } from '../src/config.js';
import { BANNER, NATIVE, VIDEO } from '../src/mediaTypes.js';
const BIDDER_CODE = 'escalax';
const ESCALAX_SOURCE_ID_MACRO = '[sourceId]';
const ESCALAX_ACCOUNT_ID_MACRO = '[accountId]';
const ESCALAX_SUBDOMAIN_MACRO = '[subdomain]';
const ESCALAX_URL = `https://${ESCALAX_SUBDOMAIN_MACRO}.escalax.io/bid?type=pjs&partner=${ESCALAX_SOURCE_ID_MACRO}&token=${ESCALAX_ACCOUNT_ID_MACRO}`;
const ESCALAX_DEFAULT_CURRENCY = 'USD';
const ESCALAX_DEFAULT_SUBDOMAIN = 'bidder_us';
function createImp(buildImp, bidRequest, context) {
const imp = buildImp(bidRequest, context);
imp.ext = {
[BIDDER_CODE]: {
sourceId: bidRequest.params.sourceId,
accountId: bidRequest.params.accountId,
}
};
if (!imp.bidfloor) imp.bidfloor = bidRequest.params.bidfloor;
return imp;
}
function createRequest(buildRequest, imps, bidderRequest, context) {
const request = buildRequest(imps, bidderRequest, context);
const bid = context.bidRequests[0];
request.test = config.getConfig('debug') ? 1 : 0;
if (!request.cur) request.cur = [bid.params.currency || ESCALAX_DEFAULT_CURRENCY];
return request;
}
function createBidResponse(buildBidResponse, bid, context) {
const bidResponse = buildBidResponse(bid, context);
bidResponse.cur = 'USD';
return bidResponse;
}
function getSubdomain() {
const regionMap = {
'Europe': 'bidder_eu',
'Africa': 'bidder_eu',
'Atlantic': 'bidder_eu',
'Arctic': 'bidder_eu',
'Asia': 'bidder_apac',
'Australia': 'bidder_apac',
'Antarctica': 'bidder_apac',
'Pacific': 'bidder_apac',
'Indian': 'bidder_apac',
'America': 'bidder_us'
};
try {
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
const region = timezone.split('/')[0];
return regionMap[region] || 'bidder_us';
} catch (err) {
return 'bidder_us';
}
}
const converter = ortbConverter({
context: {
netRevenue: true,
ttl: 20,
},
imp: createImp,
request: createRequest,
bidResponse: createBidResponse
});
export const spec = {
code: BIDDER_CODE,
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
isBidRequestValid: (bid) => {
return Boolean(bid.params.sourceId) && Boolean(bid.params.accountId);
},
buildRequests: (validBidRequests, bidderRequest) => {
if (validBidRequests && validBidRequests.length === 0) return [];
const { sourceId, accountId } = validBidRequests[0].params;
const subdomain = getSubdomain();
const endpointURL = ESCALAX_URL
.replace(ESCALAX_SUBDOMAIN_MACRO, subdomain || ESCALAX_DEFAULT_SUBDOMAIN)
.replace(ESCALAX_SOURCE_ID_MACRO, sourceId)
.replace(ESCALAX_ACCOUNT_ID_MACRO, accountId);
const request = converter.toORTB({ bidRequests: validBidRequests, bidderRequest });
return {
method: 'POST',
url: endpointURL,
data: request
};
},
interpretResponse: (response, request) => {
if (response?.body) {
const bids = converter.fromORTB({ response: response.body, request: request.data }).bids;
return bids;
}
return [];
},
};
registerBidder(spec);