73 lines
1.4 KiB
JavaScript
Executable File
73 lines
1.4 KiB
JavaScript
Executable File
|
|
// Declare a route
|
|
module.exports = function (fastify, opts, done) {
|
|
|
|
const mixpanel = opts.mixpanel;
|
|
const UAParser = opts.UAParser;
|
|
|
|
fastify.post('/mixpanel', async (request, reply) => {
|
|
|
|
const data = request.body;
|
|
|
|
const { browser, cpu, device, os } = UAParser(data.userAgent)
|
|
|
|
let options = {
|
|
path: data.path,
|
|
browser: browser.name,
|
|
browser_version: browser.version,
|
|
device: device.vendor,
|
|
cpu: cpu.architecture,
|
|
os: os.name,
|
|
}
|
|
|
|
|
|
if (data.type === 'trackPageError')
|
|
{
|
|
options.status = data.status;
|
|
options.message = data.message;
|
|
mixpanel.track('Error status', options);
|
|
console.log('Send error page data to mixpanel')
|
|
}
|
|
|
|
else if (data.type === 'trackPageVisit')
|
|
{
|
|
mixpanel.track('Page Visit', options);
|
|
|
|
}
|
|
|
|
else if (data.type === 'trackPageDuration')
|
|
{
|
|
options.time_spent = data.time;
|
|
|
|
mixpanel.track('Page Duration', options);
|
|
|
|
}
|
|
|
|
else if (data.type === 'trackAsset')
|
|
{
|
|
const options = {
|
|
symbol: data.symbol,
|
|
assetType: data.assetType,
|
|
}
|
|
|
|
mixpanel.track('asset', options);
|
|
|
|
}
|
|
|
|
else if (data.type === 'trackButton')
|
|
{
|
|
const options = {
|
|
name: data.name,
|
|
}
|
|
|
|
mixpanel.track('buttonClick', options);
|
|
|
|
}
|
|
|
|
reply.send({ message: 'success' })
|
|
})
|
|
|
|
done();
|
|
};
|
|
|