UNPKG

@defra/hapi-gapi

Version:

hapi plugin to enable server-side google analytics platform integration

42 lines (37 loc) 1.42 kB
const debug = require('debug')('hapi-gapi') const fetch = require('node-fetch') module.exports = class Analytics { constructor({ propertySettings, sessionIdProducer }) { this._propertySettings = propertySettings this._sessionIdProducer = sessionIdProducer } ga() { return { view: (_request, metrics) => this.view(_request, metrics) } } async view(request, metrics) { debug('Processing post request for Event: \n%s ', metrics.name) if (this._propertySettings.length === 0) { debug('No property settings') return } const sessionId = await this._sessionIdProducer(request) this._propertySettings.forEach(async propertySetting => { const measurementId = propertySetting.id const apiSecret = propertySetting.key await this.sendEvent(metrics, measurementId, apiSecret, sessionId) }) } async sendEvent(events, measurementId, apiSecret, sessionId) { await fetch(`https://www.google-analytics.com/mp/collect?measurement_id=${measurementId}&api_secret=${apiSecret}`, { method: 'POST', body: JSON.stringify({ client_id: sessionId, user_id: sessionId, events: events // array of events }) }).then(res => console.log('Completed request to google analytics measurement protocol API', res.status, res.statusText)) .catch(err => console.error('Error sending GA request:', err)) } }