Analytics
/
Event Validation
Validating events before sending to third parties
Validation for tracking events with analytics.
This ensures events passing through to third party analytic tools are valid and conform to naming conventions.
This plugin uses the conventions described in this post about conventions to keep analytics data clean
Pattern
Context => Object => Action
The format answers these questions:
- Where is the event from?
Context
- What is the event effecting?
Object
- What was the action taken?
Action
Some examples of how this might look in various contexts:
- App => site => deployed
- App => function => invoked
- Site => docs => rated
- Site => docs => searched
- CLI => user => loggedIn
- API => user => passwordReset
Format/Syntax
contextName:objectName_actionName
Here are some examples:
site:newsletter_subscribed
app:site_deployed
cli:user_login
api:site_created
For more information on this naming convention checkout this post
If you'd like to bring your own validation, no problem! See bringing your own validation
Install
npm install analytics
npm install analytics-plugin-event-validation
Usage
import Analytics from 'analytics'
import eventValidation from 'analytics-plugin-event-validation'
import customerIOPlugin from '@analytics/customerio'
const analytics = Analytics({
app: 'awesomesauce',
plugins: [
eventValidation({
// name of current application
context: 'app',
// Allowed objects
objects: [
'sites', // example app:sites_cdConfigured
'user', // example app:user_signup
'widget' // example app:widget_created
]
}),
customerIOPlugin({
siteId: '123-xyz'
}),
]
})
// Event names must now conform to this format:
analytics.track('app:sites_whatever')
analytics.track('app:user_action')
analytics.track('app:widget_deleted')
Writing your own validation
If you'd like to have your own naming conventions & rules for analytics, you can create another plugin like so:
import Analytics from 'analytics'
import googleAnalytics from '@analytics/google-analytics'
const customValidationPlugin = {
name: 'company-xyz-event-validation',
trackStart: ({ payload, abort }) => {
// Your custom validation logic here
if (!isEventValid(payload.event)) {
// Abort the call or throw error in dev mode
return abort('Event name does not meet validation requirements')
}
}
}
const analytics = Analytics({
app: 'app-name',
plugins: [
customValidationPlugin,
googleAnalytics({
trackingId: 'UA-121991123',
})
]
})