npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

whyat-js

v0.9.2

Published

Y@ (whyat) helps you to track your user’s action within your application and store it directly in the data source of your choice Edit

Downloads

8

Readme

Build Status

whyat-js

Y@ (whyat) helps you to track your user’s actions within your application and store it directly in the data source of your choice

Use with Y@ Server to store your user's events.

Installation

$ npm install whyat-js --save

Getting Started

import {init} from 'whyat-js';
  
//init the tracker  
let user = {id: '[email protected]', name: 'John Doe'};
const tracker = init({
                        url: '127.0.0.1:5000',
                        area: 'datacenter 1'
                        tenant: 'myTenantName',   
                        platform: 'production',
                        application: 'myApplicationName', 
                        user
                    });

  
//use it  
track.linkClicked('My link name');

Overview

Y@-js give you the ability to simply track your user's behaviour on your website or webapp.

Init the tracker with the environment configuration :

const tracker = init(
{
      url: urlOfTheWhyatServer,
      application: yourApplicationNameOrId,
      platform: yourPlatformNameOrId,  
      area: yourDatacenterOrDeploymentArea,  
      tenant: yourTenantNameOrId
      browser: {
        appCodeName: window.navigator.appCodeName,
        appName: window.navigator.appName,
        appVersion: window.navigator.appVersion,
        platform: window.navigator.platform,
        userAgent: window.navigator.userAgent,
      },
      autoTrackPageVisited: {
        domContentLoaded: true, 
        hashChange: true
      },
      user: {
        id: your user id
        ... // others informations about your user
      }
    });

By default Y@-js track when a page is loaded (event listener on domContentLoaded) or the url's hash change (event listener on hashchange).
If you don't want automatic tracking of visited pages, you can override the defaultAutoPageTracking configuration.

Tracking a event is done with only one method postEvent()

tracker.postEvent({ type: typeOfYourEvent',
                    user : {id: 'myCustomId', firstName:'John', lastName: 'Doe' ...},
                    payload: {...}, // extra data to add context to your event
                    uri: 'http://my.website.com/awesome/resource'
                    });

But you can use some of the helper functions to facilitate the tracking of common events

let user =  {id: 'myCustomId', firstName:'John', lastName: 'Doe' ...};
  
// When a user view a page
tracker.pageViewed(user);
  
//When a user click a link
tracker.linkClicked(user, myLinkNameOrId);
  
//When a user submit a form
tracker.formSubmitted(user, myFormNameOrIf, {...myFormValues});

Usage

Initialisation of the tracker

The init method of the tracker take 3 parameters :

  • A configuration object
  • An optional post function (by default we use whatwg-fetch)
  • An optional log function (by default log looks like [Y@]: your log message)

The configuration object is composed of :

  • url : the url of Y@ server
  • area: your data center/ deployment area id or name (optional)
  • tenant: your customer/client id or name
  • application: your application id or name
  • platform: your platform id or name (production, test, dev, as you wish ...)
  • user: an object to define properties of your user, only an id attribute is mandatory
  • an optional browser configuration object with the following attributes :
    • appCodeName
    • appName
    • appVersion
    • platform
    • userAgent
  • autoTrackPageVisited: a optional configuration to enable/disable auto-tracking of page visited.
    • domContentLoaded: true by default, track page visited on DOMContentLoaded event
    • hashChange: true by default, track page visited on hashchange event, when url hash is modified (useful for app single page app)
  • tenantConfig: a optional configuration to specify how to set tenant if not already define
    • extractTenant: is a function declaration with document.location as default parameter to define how get the tenant name or id

By default the tenant (if not already define via the tenant option) is set from the document.location.hostname, we take the first part before the first - or .
Example: mytenant-myapp.mydomain.com or mytenant.myapp.mydomain.com, we set tenant with mytenant value

const tracker = init({
      url: 'https://tracker.saagie.io/track/event',
      area: 'datacenter1',
      tenant: 'Saagie',
      application: 'Saagie Datagovernance',
      platform: 'Production',
      user: {
        id: your user id
        ... // others informations about your user
      }
      browser: {
        appCodeName: window.navigator.appCodeName,
        appName: window.navigator.appName,
        appVersion: window.navigator.appVersion,
        platform: window.navigator.platform,
        userAgent: window.navigator.userAgent,
      },
      autoTrackPageVisited: {
        domContentLoaded: true, // Track a PAGE_VISITED event each time 'domContentLoaded' is triggered 
        hashChange: true // Track a PAGE_VISITED event each time url's hash change
       },
      tenantConfig: {
        extractTenant: url => extractTenant: url => url.pathname.split('/')[1], // function to extract tenant from first path element
      },
    });

Post a generic event

There is one main function in Y@-js : postEvent() This function use post and log methods defined via the init function and take only 1 parameter : an Event object

The structure of the event object is :

  • type: the type of the event (PAGE_VIEWED, LINK_CLICKED, your custom event ...)
  • payload: to add some context informations to your event
  • user: an object to override the configuration user's informations
  • uri: uri of the event's page
tracker.postEvent({
                      type: 'PAGE_VIEWED',
                      payload: {aCustomInfo: 'aCustomValue', ...},
                      user: {id: '123456', firstName: 'John', lastName: 'Doe, ...},
                      uri: 'http://my.website.com/awesome/resource'
                  });

Page viewed event helper

Reminder: by default page viewed are automatically tracker by Y@-js
If you want to track a page viewed event, you can use the helper function : pageViewed
This function take as parameters :

  • user: an object to override the configuration user's informations
  • name: the name of the page, by default we use the document.title value
  • payload: an object to add contextual information (if your provide a name attribut, it will be replace by the value of the name attribute of this function)
  • uri: uri of the event's location, by default we use the document.location.href value
let user = {id: '123456', firstName: 'John', lastName: 'Doe, ...};

//Simplest option using document title and no contextual informations
track.pageViewed();

// Version with an override version of the user data
track.pageViewed(user);
  
//Version with a custom title and no contextual informations
track.pageViewed(user, 'My custom title');
  
//Version with a custom title and contextual informations
track.pageViewed(user, 'My custom title', {aCustomInfo: 'aCustomValue', ...});
  
//Full version of the helper function
track.pageViewed(user, 'My custom title', {aCustomInfo: 'aCustomValue', ...}, 'http://my.website.com/awesome/resource');

Link clicked event helper

If you want to track a link clicked event, you can use the helper function : linkClicked
This function take as parameters :

  • user: an object to override the configuration user's informations
  • name: the name of the link
  • payload: an object to add contextual information (if your provide a name attribut, it will be replace by the value of the name attribute of this function)
  • uri: uri of the event's location, by default we use the document.location.href value
let user = {id: '123456', firstName: 'John', lastName: 'Doe, ...};

//Version with a link name  
track.linkClicked('My link name');
  
//Version with an override version of the user data and link name
track.linkClicked(user, 'My link name');
  
//Version with a link name and contextual informations
track.linkClicked(user, 'My link name', {aCustomInfo: 'aCustomValue', ...});
  
//Full version of the helper function
track.linkClicked(user, 'My link name', {aCustomInfo: 'aCustomValue', ...}, 'http://my.website.com/awesome/resource');

Form submitted event helper

If you want to track a link clicked event, you can use the helper function : formSubmitted
This function take as parameters :

  • user: an object to override the configuration user's informations
  • name: the name of the form
  • payload: an object to add contextual information, usually data of the form (if your provide a name attribut, it will be replace by the value of the name attribute of this function)
  • uri: uri of the event's location, by default we use the document.location.href value
let user = {id: '123456', firstName: 'John', lastName: 'Doe, ...};
 
//Version with a form name
track.formSubmitted('My form name');
  
//Version with an override version of the user data and a form name
track.formSubmitted(user, 'My form name');
  
//Version with a form name and contextual informations
track.formSubmitted(user, 'My form name', {myform: {form.attr1, form.attr2 ...});
  
//Full version of the helper function
track.formSubmitted(user, 'My form name', {myform: {form.attr1, form.attr2 ...}, 'http://my.website.com/awesome/resource');

##Tests

To run test you can simply :

$ npm test

if you are in a TDD loop, you can watch changes to auto execute tests

$ npm test -- -w

Authors

See also the list of contributors who participated in this project.

License

This project is licensed under the Apache Licence version 2.0 - see the LICENSE file for details