bloody-snowplow-tracker
v3.2.0
Published
## Install
Readme
Snowplow tracker
Install
$ npm install --save bloody-snowplow-trackerImport
import { createTracker } from "bloody-snowplow-tracker"API
createTracker(config): tracker
config
config.appName:string, your app's nameconfig.trackerName:string, the tracker's nameconfig.networkLayer:networkLayer, the network layer object
Creates a new tracker.
defaultNetworkLayer(url: string)
The default network layer relies on loading a pixel. In order for this to work,
the url you provide to the default network layer must be an image.
import
In order for custom configurations not to bring an extra network layer,
you have to require defaultNetworkLayer alone:
import { defaultNetworkLayer } from "bloody-snowplow-tracker/lib/NetworkLayer"url
The URL of the collector.
tracker.trackPageView(?config): Promise
config
If not provided, these parameters are set automatically.
config.pageURL:stringconfig.pageTitle:stringconfig.pageReferrer:stringconfig.middleware:?function
tracker.trackStructuredEvent(config): Promise
config
config.structuredEventCategory:stringconfig.structuredEventAction:stringconfig.structuredEventLabel:stringconfig.structuredEventProperty:stringconfig.structuredEventValue:string
tracker.trackSocialAction(config): Promise
config
config.socialAction:stringconfig.socialNetwork:stringconfig.socialTarget:stringconfig.socialPagePath:string
compose(...functions): function
In order to use multiple middlewares, you can use the compose utility provided by the tracker:
import { createTracker } from "bloody-snowplow-tracker"
import { compose } from "bloody-snowplow-tracker/lib/compose"
const postfixFingerprint = (event) => {
return {
...event,
fingerprint: event.fingerpring.then((item) => item + cookie.get("foo"))
}
}
const postfixAppName = (event) => {
return {
...event,
appName: event.appName + ".ok"
}
}
const tracker = createTracker({
appName: "foo",
trackerName: "bar",
// … networkLayer
middleware: compose(
postfixFingerprint,
postfixAppName
),
})Implementing your own networkLayer
Your networkLayer must contain a send method, taking a single event object argument, and return a promise reflecting the state of the request.
If you want to transform human-readable events to the snowplow format, you can use the transformEvent module.
import { transformEvent } from "bloody-snowplow-tracker/lib/transformEvent"
const myCustomNetworkLayer = {
send: (event) => {
return fetch("/collector", {
method: "POST",
body: JSON.stringify(transformEvent(event)),
})
.then((res) => {
if(res.status !== 200) {
throw new Error()
}
})
},
}