$ npm install --save bloody-snowplow-tracker
import { createTracker } from "bloody-snowplow-tracker"
-
config.appName
:string
, your app's name -
config.trackerName
:string
, the tracker's name -
config.networkLayer
:networkLayer
, the network layer object
Creates a new tracker.
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.
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"
The URL of the collector.
If not provided, these parameters are set automatically.
-
config.pageURL
:string
-
config.pageTitle
:string
-
config.pageReferrer
:string
-
config.middleware
:?function
-
config.structuredEventCategory
:string
-
config.structuredEventAction
:string
-
config.structuredEventLabel
:string
-
config.structuredEventProperty
:string
-
config.structuredEventValue
:string
-
config.socialAction
:string
-
config.socialNetwork
:string
-
config.socialTarget
:string
-
config.socialPagePath
:string
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
),
})
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()
}
})
},
}