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

ahoy.js

v0.4.4

Published

Simple, powerful JavaScript analytics

Downloads

122,155

Readme

Ahoy.js

:fire: Visit and event tracking for JavaScript

  • Easily track unique visitors
  • Track events across page navigation

Use it with any backend. For Rails, check out the Ahoy gem.

Build Status

Installation

Download ahoy.js and include it on your page.

<script src="ahoy.js"></script>

Or use Yarn:

yarn add ahoy.js

And import it with:

import ahoy from 'ahoy.js';

How It Works

When someone lands on your website, they are assigned a visit token and a visitor token.

The visit token expires after 4 hours, in which a new visit is created. Visits are useful for tracking metrics like monthly active users. The visitor token expires after 2 years. A POST request is sent to /ahoy/visits with:

  • visit_token
  • visitor_token
  • referrer
  • landing_page

The server can capture:

  • ip
  • user_agent
  • user - from app authentication

And calculate things like:

  • referring_domain and search_keyword from referrer
  • utm_source, utm_medium, utm_term, utm_content, and utm_campaign from landing_page
  • city, region, and country from ip
  • browser, os, and device_type from user_agent

Events

Track events with:

ahoy.track(name, properties);

A POST request is sent to /ahoy/events with:

  • name
  • properties
  • time

The server can capture:

  • visit_token - from cookies
  • user - from app authentication

As a precaution, the server should reject times that do not match:

1 minute ago < time <= now

Views

ahoy.trackView();

Name - $view

Properties

  • url - https://www.streamflip.com
  • title - Streamflip
  • page - /

The page defaults to the path. Set the page with:

ahoy.configure({page: "Landing page"});

Clicks

ahoy.trackClicks("#link1, #link2");

Name - $click

Properties

  • tag - a
  • id - account-link
  • class - btn btn-primary
  • page - /
  • text - View Account
  • href - /account

Submits

ahoy.trackSubmits("#form1, #form2");

Name - $submit

Properties

  • tag - form
  • id - form1
  • class - form-inline
  • page - /

Changes

Deprecated

ahoy.trackChanges("#input1, #input2");

Name - $change

Properties

  • tag - input
  • id - input1
  • class - form-control
  • page - /

Development

Ahoy is built with developers in mind. You can run the following code in your browser’s console.

Force a new visit

ahoy.reset(); // then reload the page

Log messages

ahoy.debug();

Turn off logging

ahoy.debug(false);

Configuration

Here’s the default configuration:

ahoy.configure({
  urlPrefix: "",
  visitsUrl: "/ahoy/visits",
  eventsUrl: "/ahoy/events",
  page: null,
  platform: "Web",
  useBeacon: true,
  startOnReady: true,
  trackVisits: true,
  cookies: true,
  cookieDomain: null,
  headers: {},
  visitParams: {},
  withCredentials: false,
  visitDuration: 4 * 60, // 4 hours
  visitorDuration: 2 * 365 * 24 * 60 // 2 years
});

When trackVisits is set to false, Ahoy.js will not attempt to create a visit on the server, but assumes that the server itself will return visit and visitor cookies.

Subdomains

To track visits across multiple subdomains, use:

ahoy.configure({cookieDomain: "yourdomain.com"});

Users

Ahoy automatically associates users with visits and events if the user is authenticated on the server.

If you use cookies for authentication and the JavaScript library is on the same subdomain as the server, no additional configuration is needed.

If you use cookies and the JavaScript library is on a different domain or subdomain as the server, set:

ahoy.configure({withCredentials: true});

This will send credentials such as cookies, authorization headers or TLS client certificates to the server.

If you use headers for authentication, pass them with:

ahoy.configure({headers: {"Authorization": "Bearer ..."}});

Fetch

If you use the Fetch API to make requests and the JavaScript library is on a different domain or subdomain as the server, Ahoy cookies are not sent to the server by default. You can pass the info in headers with:

fetch(url, {
  headers: {"Ahoy-Visit": ahoy.getVisitId(), "Ahoy-Visitor": ahoy.getVisitorId()}
});

Upgrading

0.4.0

The trackClicks, trackSubmits, and trackChanges functions now require selectors. The previous defaults were:

ahoy.trackClicks("a, button, input[type=submit]");
ahoy.trackSubmits("form");
ahoy.trackChanges("input, textarea, select");

The trackAll function has been removed. The equivalent code is:

ahoy.trackView();
ahoy.trackClicks("a, button, input[type=submit]");
ahoy.trackSubmits("form");
ahoy.trackChanges("input, textarea, select");

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development:

git clone https://github.com/ankane/ahoy.js.git
cd ahoy.js
yarn install
yarn build