bloody-snowplow-tracker

3.2.0 • Public • Published

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 name
  • config.trackerName: string, the tracker's name
  • config.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()
        }
      })
  },
}

Readme

Keywords

none

Package Sidebar

Install

npm i bloody-snowplow-tracker

Weekly Downloads

1

Version

3.2.0

License

MIT

Last publish

Collaborators

  • bloodyowl