|
| 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; |
0 commit comments