• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

prebid / Prebid.js / #290

03 Apr 2025 06:15PM UTC coverage: 90.188% (-0.3%) from 90.449%
#290

push

travis-ci

prebidjs-release
Prebid 9.38.0 release

42568 of 53450 branches covered (79.64%)

63111 of 69977 relevant lines covered (90.19%)

173.89 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

61.18
/modules/hadronAnalyticsAdapter.js
1
import { ajax } from '../src/ajax.js';
1✔
2
import adapter from '../libraries/analyticsAdapter/AnalyticsAdapter.js';
3
import adapterManager from '../src/adapterManager.js';
4
import * as utils from '../src/utils.js';
5
import { EVENTS } from '../src/constants.js';
6
import {getStorageManager} from '../src/storageManager.js';
7
import {getRefererInfo} from '../src/refererDetection.js';
8
import {MODULE_TYPE_ANALYTICS} from '../src/activities/modules.js';
9

10
/**
11
 * hadronAnalyticsAdapter.js - Audigent Hadron Analytics Adapter
12
 */
13

14
const HADRON_ANALYTICS_URL = 'https://analytics.hadron.ad.gt/api/v1/analytics';
1✔
15
const HADRONID_ANALYTICS_VER = 'pbadgt0';
1✔
16
const DEFAULT_PARTNER_ID = 0;
1✔
17
const AU_GVLID = 561;
1✔
18
const MODULE_CODE = 'hadronAnalytics';
1✔
19

20
export const storage = getStorageManager({moduleType: MODULE_TYPE_ANALYTICS, moduleName: MODULE_CODE});
1✔
21

22
var viewId = utils.generateUUID();
1✔
23

24
var partnerId = DEFAULT_PARTNER_ID;
1✔
25
var eventsToTrack = [];
1✔
26

27
var w = window;
1✔
28
var d = document;
1✔
29
var e = d.documentElement;
1✔
30
var g = d.getElementsByTagName('body')[0];
1✔
31
var x = w.innerWidth || e.clientWidth || g.clientWidth;
1!
32
var y = w.innerHeight || e.clientHeight || g.clientHeight;
1!
33

34
var pageView = {
1✔
35
  eventType: 'pageView',
36
  userAgent: window.navigator.userAgent,
37
  timestamp: Date.now(),
38
  timezoneOffset: new Date().getTimezoneOffset(),
39
  language: window.navigator.language,
40
  vendor: window.navigator.vendor,
41
  pageUrl: getRefererInfo().page,
42
  screenWidth: x,
43
  screenHeight: y
44
};
45

46
var eventQueue = [
1✔
47
  pageView
48
];
49

50
var startAuction = 0;
1✔
51
var bidRequestTimeout = 0;
1✔
52
let analyticsType = 'endpoint';
1✔
53

54
let hadronAnalyticsAdapter = Object.assign(adapter({url: HADRON_ANALYTICS_URL, analyticsType}), {
1✔
55
  track({eventType, args}) {
56
    args = args ? utils.deepClone(args) : {};
2!
57
    var data = {};
2✔
58
    if (!eventsToTrack.includes(eventType)) return;
2✔
59
    switch (eventType) {
1!
60
      case EVENTS.AUCTION_INIT: {
61
        data = args;
×
62
        startAuction = data.timestamp;
×
63
        bidRequestTimeout = data.timeout;
×
64
        break;
×
65
      }
66

67
      case EVENTS.AUCTION_END: {
68
        data = args;
1✔
69
        data.start = startAuction;
1✔
70
        data.end = Date.now();
1✔
71
        break;
1✔
72
      }
73

74
      case EVENTS.BID_ADJUSTMENT: {
75
        data.bidders = args;
×
76
        break;
×
77
      }
78

79
      case EVENTS.BID_TIMEOUT: {
80
        data.bidders = args;
×
81
        data.duration = bidRequestTimeout;
×
82
        break;
×
83
      }
84

85
      case EVENTS.BID_REQUESTED: {
86
        data = args;
×
87
        break;
×
88
      }
89

90
      case EVENTS.BID_RESPONSE: {
91
        data = args;
×
92
        delete data.ad;
×
93
        break;
×
94
      }
95

96
      case EVENTS.BID_WON: {
97
        data = args;
×
98
        delete data.ad;
×
99
        delete data.adUrl;
×
100
        break;
×
101
      }
102

103
      case EVENTS.BIDDER_DONE: {
104
        data = args;
×
105
        break;
×
106
      }
107

108
      case EVENTS.SET_TARGETING: {
109
        data.targetings = args;
×
110
        break;
×
111
      }
112

113
      case EVENTS.REQUEST_BIDS: {
114
        data = args;
×
115
        break;
×
116
      }
117

118
      case EVENTS.ADD_AD_UNITS: {
119
        data = args;
×
120
        break;
×
121
      }
122

123
      case EVENTS.AD_RENDER_FAILED: {
124
        data = args;
×
125
        break;
×
126
      }
127

128
      default:
129
        return;
×
130
    }
131

132
    data.eventType = eventType;
1✔
133
    data.timestamp = data.timestamp || Date.now();
1✔
134

135
    sendEvent(data);
1✔
136
  }
137
});
138

139
hadronAnalyticsAdapter.originEnableAnalytics = hadronAnalyticsAdapter.enableAnalytics;
1✔
140

141
hadronAnalyticsAdapter.enableAnalytics = function(conf = {}) {
1!
142
  if (typeof conf.options === 'object') {
3!
143
    if (conf.options.partnerId) {
3!
144
      partnerId = conf.options.partnerId;
3✔
145
    } else {
146
      partnerId = DEFAULT_PARTNER_ID;
×
147
    }
148
    if (conf.options.eventsToTrack) {
3!
149
      eventsToTrack = conf.options.eventsToTrack;
3✔
150
    }
151
  } else {
152
    utils.logError('HADRON_ANALYTICS_NO_CONFIG_ERROR');
×
153
    return;
×
154
  }
155

156
  hadronAnalyticsAdapter.originEnableAnalytics(conf);
3✔
157
};
158

159
function flush() {
160
  // Don't send anything if no partner id was declared
161
  if (partnerId === DEFAULT_PARTNER_ID) return;
1!
162
  if (eventQueue.length > 1) {
1!
163
    var data = {
1✔
164
      pageViewId: viewId,
165
      ver: HADRONID_ANALYTICS_VER,
166
      partnerId: partnerId,
167
      events: eventQueue
168
    };
169

170
    ajax(HADRON_ANALYTICS_URL,
1✔
171
      () => utils.logInfo('HADRON_ANALYTICS_BATCH_SEND'),
×
172
      JSON.stringify(data),
173
      {
174
        contentType: 'application/json',
175
        method: 'POST'
176
      }
177
    );
178

179
    eventQueue = [
1✔
180
      pageView
181
    ];
182
  }
183
}
184

185
function sendEvent(event) {
186
  eventQueue.push(event);
1✔
187
  utils.logInfo(`HADRON_ANALYTICS_EVENT ${event.eventType} `, event);
1✔
188

189
  if (event.eventType === EVENTS.AUCTION_END) {
1!
190
    flush();
1✔
191
  }
192
}
193

194
adapterManager.registerAnalyticsAdapter({
1✔
195
  adapter: hadronAnalyticsAdapter,
196
  code: MODULE_CODE,
197
  gvlid: AU_GVLID
198
});
199

200
hadronAnalyticsAdapter.flush = flush;
1✔
201

202
export default hadronAnalyticsAdapter;
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc