bloody-snowplow-tracker
v3.2.0
Published
## Install
Downloads
10
Readme
Snowplow tracker
Install
$ npm install --save bloody-snowplow-tracker
Import
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
:string
config.pageTitle
:string
config.pageReferrer
:string
config.middleware
:?function
tracker.trackStructuredEvent(config): Promise
config
config.structuredEventCategory
:string
config.structuredEventAction
:string
config.structuredEventLabel
:string
config.structuredEventProperty
:string
config.structuredEventValue
:string
tracker.trackSocialAction(config): Promise
config
config.socialAction
:string
config.socialNetwork
:string
config.socialTarget
:string
config.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()
}
})
},
}