Skip to content

Commit 6dbad9a

Browse files
BidWatch Analytics Adapter: add new analytics adapter (#8302)
* New Analytics Adapter bidwatch * test for bidwatch Analytics Adapter * change maintainer address * Update bidwatchAnalyticsAdapter.js * Update bidwatchAnalyticsAdapter.js * Update bidwatchAnalyticsAdapter.md * Update bidwatchAnalyticsAdapter.md
1 parent 7f0a56b commit 6dbad9a

File tree

3 files changed

+399
-0
lines changed

3 files changed

+399
-0
lines changed

modules/bidwatchAnalyticsAdapter.js

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import adapter from '../src/AnalyticsAdapter.js';
2+
import adapterManager from '../src/adapterManager.js';
3+
import CONSTANTS from '../src/constants.json';
4+
import { ajax } from '../src/ajax.js';
5+
6+
const analyticsType = 'endpoint';
7+
const url = 'URL_TO_SERVER_ENDPOINT';
8+
9+
const {
10+
EVENTS: {
11+
AUCTION_END,
12+
BID_WON,
13+
}
14+
} = CONSTANTS;
15+
16+
let allEvents = {}
17+
let initOptions = {}
18+
let endpoint = 'https://default'
19+
let objectToSearchForBidderCode = ['bidderRequests', 'bidsReceived', 'noBids']
20+
21+
function getAdapterNameForAlias(aliasName) {
22+
return adapterManager.aliasRegistry[aliasName] || aliasName;
23+
}
24+
25+
function setOriginalBidder(arg) {
26+
Object.keys(arg).forEach(key => {
27+
arg[key]['originalBidder'] = getAdapterNameForAlias(arg[key]['bidderCode']);
28+
if (typeof arg[key]['creativeId'] == 'number') { arg[key]['creativeId'] = arg[key]['creativeId'].toString(); }
29+
});
30+
return arg
31+
}
32+
33+
function checkBidderCode(args) {
34+
if (typeof args == 'object') {
35+
for (let i = 0; i < objectToSearchForBidderCode.length; i++) {
36+
if (typeof args[objectToSearchForBidderCode[i]] == 'object') { args[objectToSearchForBidderCode[i]] = setOriginalBidder(args[objectToSearchForBidderCode[i]]) }
37+
}
38+
}
39+
if (typeof args['bidderCode'] == 'string') { args['originalBidder'] = getAdapterNameForAlias(args['bidderCode']); } else if (typeof args['bidder'] == 'string') { args['originalBidder'] = getAdapterNameForAlias(args['bidder']); }
40+
if (typeof args['creativeId'] == 'number') { args['creativeId'] = args['creativeId'].toString(); }
41+
return args
42+
}
43+
44+
function addEvent(eventType, args) {
45+
if (allEvents[eventType] == undefined) { allEvents[eventType] = [] }
46+
if (eventType && args) { args = checkBidderCode(args); }
47+
allEvents[eventType].push(args);
48+
}
49+
50+
function handleBidWon(args) {
51+
if (typeof allEvents.bidRequested == 'object' && allEvents.bidRequested.length > 0 && allEvents.bidRequested[0].gdprConsent) { args.gdpr = allEvents.bidRequested[0].gdprConsent; }
52+
ajax(endpoint + '.bidwatch.io/analytics/bid_won', null, JSON.stringify(args), {method: 'POST', withCredentials: true});
53+
}
54+
55+
function handleAuctionEnd() {
56+
ajax(endpoint + '.bidwatch.io/analytics/auctions', null, JSON.stringify(allEvents), {method: 'POST', withCredentials: true});
57+
}
58+
59+
let bidwatchAnalytics = Object.assign(adapter({url, analyticsType}), {
60+
track({
61+
eventType,
62+
args
63+
}) {
64+
addEvent(eventType, args);
65+
switch (eventType) {
66+
case AUCTION_END:
67+
handleAuctionEnd();
68+
break;
69+
case BID_WON:
70+
handleBidWon(args);
71+
break;
72+
}
73+
}});
74+
75+
// save the base class function
76+
bidwatchAnalytics.originEnableAnalytics = bidwatchAnalytics.enableAnalytics;
77+
78+
// override enableAnalytics so we can get access to the config passed in from the page
79+
bidwatchAnalytics.enableAnalytics = function (config) {
80+
bidwatchAnalytics.originEnableAnalytics(config); // call the base class function
81+
initOptions = config.options;
82+
if (initOptions.domain) { endpoint = 'https://' + initOptions.domain; }
83+
};
84+
85+
adapterManager.registerAnalyticsAdapter({
86+
adapter: bidwatchAnalytics,
87+
code: 'bidwatch'
88+
});
89+
90+
export default bidwatchAnalytics;

modules/bidwatchAnalyticsAdapter.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Overview
2+
Module Name: bidwatch Analytics Adapter
3+
4+
Module Type: Analytics Adapter
5+
6+
Maintainer: [email protected]
7+
8+
# Description
9+
10+
Analytics adapter for bidwatch.io.
11+
12+
# Test Parameters
13+
14+
```
15+
{
16+
provider: 'bidwatch',
17+
options : {
18+
domain: 'test.endpoint'
19+
}
20+
}
21+
```

0 commit comments

Comments
 (0)