forked from prebid/Prebid.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsmarthubBidAdapter.js
More file actions
122 lines (108 loc) · 3.81 KB
/
smarthubBidAdapter.js
File metadata and controls
122 lines (108 loc) · 3.81 KB
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
import {registerBidder} from '../src/adapters/bidderFactory.js';
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
import {
buildPlacementProcessingFunction,
buildRequestsBase,
interpretResponseBuilder,
isBidRequestValid,
getUserSyncs as baseSync
} from '../libraries/teqblazeUtils/bidderUtils.js';
const BIDDER_CODE = 'smarthub';
const SYNC_URLS = {
'1': 'https://us.shb-sync.com',
'4': 'https://us4.shb-sync.com',
};
const ALIASES = {
'attekmi': {area: '1', pid: '300'},
'markapp': {area: '4', pid: '360'},
'jdpmedia': {area: '1', pid: '382'},
'tredio': {area: '4', pid: '337'},
'felixads': {area: '1', pid: '406'},
'artechnology': {area: '1', pid: '420'},
'adinify': {area: '1', pid: '424'},
'addigi': {area: '1', pid: '425'},
'jambojar': {area: '1', pid: '426'},
'anzu': {area: '1', pid: '445'},
};
const BASE_URLS = {
'attekmi': 'https://prebid.attekmi.co/pbjs',
'smarthub': 'https://prebid.attekmi.co/pbjs',
'markapp': 'https://markapp-prebid.attekmi.co/pbjs',
'jdpmedia': 'https://jdpmedia-prebid.attekmi.co/pbjs',
'tredio': 'https://tredio-prebid.attekmi.co/pbjs',
'felixads': 'https://felixads-prebid.attekmi.co/pbjs',
'artechnology': 'https://artechnology-prebid.attekmi.co/pbjs',
'adinify': 'https://adinify-prebid.attekmi.co/pbjs',
'addigi': 'https://addigi-prebid.attekmi.co/pbjs',
'jambojar': 'https://jambojar-prebid.attekmi.co/pbjs',
'jambojar-apac': 'https://jambojar-apac-prebid.attekmi.co/pbjs',
'anzu': 'https://anzu-prebid.attekmi.co/pbjs',
};
const adapterState = {};
const _getPartnerUrl = (partner) => {
const region = ALIASES[partner]?.region;
const partnerRegion = region ? `${partner}-${String(region).toLocaleLowerCase()}` : partner;
const urls = Object.keys(BASE_URLS);
if (urls.includes(partnerRegion)) {
return BASE_URLS[partnerRegion];
}
return `${BASE_URLS[BIDDER_CODE]}?partnerName=${partnerRegion}`;
}
const _getPartnerName = (bid) => String(bid.params?.partnerName || bid.bidder).toLowerCase();
const getPlacementReqData = buildPlacementProcessingFunction({
addPlacementType() {},
addCustomFieldsToPlacement(bid, bidderRequest, placement) {
const { seat, token, iabCat, minBidfloor, pos } = bid.params;
Object.assign(placement, {
partnerName: _getPartnerName(bid),
seat,
token,
iabCat,
minBidfloor,
pos,
});
}
})
const buildRequests = (validBidRequests = [], bidderRequest = {}) => {
const bidsByPartner = validBidRequests.reduce((bidsByPartner, bid) => {
const partner = _getPartnerName(bid);
if (bid.params?.region) {
const region = String(bid.params.region).toLocaleLowerCase();
ALIASES[partner].region = region;
}
Object.assign(adapterState, ALIASES[partner]);
(bidsByPartner[partner] = bidsByPartner[partner] || []).push(bid);
return bidsByPartner;
}, {});
return Object.entries(bidsByPartner).map(([partner, validBidRequests]) => {
return buildRequestsBase({
adUrl: _getPartnerUrl(partner),
bidderRequest,
validBidRequests,
placementProcessingFunction: getPlacementReqData
})
})
}
const getUserSyncs = (syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent) => {
const syncs = baseSync('')(syncOptions, serverResponses, gdprConsent, uspConsent, gppConsent);
const syncUrl = SYNC_URLS[adapterState.area];
const pid = adapterState.pid;
return syncs.map(sync => ({
...sync,
url: `${syncUrl}${sync.url}&pid=${pid}`
}));
};
export const spec = {
code: BIDDER_CODE,
aliases: Object.keys(ALIASES),
supportedMediaTypes: [BANNER, VIDEO, NATIVE],
isBidRequestValid: isBidRequestValid(['seat', 'token'], 'every'),
buildRequests,
interpretResponse: interpretResponseBuilder({
addtlBidValidation(bid) {
return bid.hasOwnProperty('netRevenue')
}
}),
getUserSyncs
};
registerBidder(spec);