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

easy-umami-js

v0.8.1

Published

A JavaScript client for interacting with the Umami analytics API.

Downloads

142

Readme

UmamiClient

Note: For self-hosted instances only. For Umami Cloud, consider using the official Umami API Client.

Documentation generated with the assistance of ChatGPT. Please report any inaccuracies.

The UmamiClient is a JavaScript ~class~ library designed to simplify interaction with the Umami Analytics API. It provides methods for user authentication, website management, session analysis, event tracking, and data retrieval. This ~client~ library streamlines the process of fetching statistics, sessions, and events from a self-hosted Umami instance for use in applications or reporting dashboards. ~The class definition resides in the umami.js file.~

FULL DOCUMENTATION

~This is not a published library; it's a standalone class intended for direct integration into projects.~ This is now a published library. It was developed to address specific needs and provide clearer documentation compared to the existing @umami/api-client.

Table of Contents

Key Features of UmamiClient

1. Automatic Authentication and Token Management

  • authenticate() initiates the login process and retrieves an authentication token.
  • #ensureValidToken() (private method) automatically checks token validity before each API request and refreshes it if expired, eliminating manual token management.

2. Private Helper Methods for Code Consistency

  • Private methods like #makeAuthenticatedRequest() and #formatQueryParams() handle common tasks:
    • Making authenticated requests.
    • Injecting authorization tokens into headers.
    • Formatting query parameters for clean URL construction.
  • This abstraction ensures consistent request structure, headers, and error handling for improved robustness.

3. Modular API Endpoint Coverage

  • UmamiClient provides methods for various Umami API endpoints, grouped by functionality:
    • Authentication: authenticate(), verifyToken()
    • User Management: createUser(), getUsers(), getUser(), updateUser(), deleteUser(), getUserWebsites(), getUserTeams()
    • Team Management: createTeam(), getTeams(), joinTeam(), getTeam(), updateTeam(), deleteTeam(), getTeamUsers(), addUserToTeam(), getTeamUser(), updateTeamUserRole(), removeUserFromTeam(), getTeamWebsites()
    • Website Management: getWebsites(), createWebsite(), getWebsite(), updateWebsite(), deleteWebsite(), resetWebsite()
    • Session Analysis: getSessions(), getSessionStats(), getSession(), getSessionActivity(), getSessionProperties(), getSessionDataProperties(), getSessionDataValues()
    • Event Tracking: getEventsSeries(), getWebsiteEvents(), getWebsiteStats(), getEventDataEvents(), getEventDataFields(), getEventDataValues(), getEventDataStats(), getPageviews(), getMetrics(), sendEvent() , getActiveUsers()
  • This modularity simplifies using the client for specific tasks.

4. Flexible Query Parameter Handling

  • #formatQueryParams() handles a wide range of query parameters, omitting undefined values for flexibility.
  • This allows precise control over filtering, pagination, and sorting without manual query string formatting.

5. Robust Error Handling

  • #makeAuthenticatedRequest() and authenticate() include error handling, throwing descriptive errors for authentication failures or network issues to aid debugging.

6. Frontend Compatibility

  • sendEvent() automatically detects frontend context (e.g., navigator.language, document.referrer) for seamless event tracking in web applications.

7. Typed Responses with JSDoc

  • Methods return specific data structures (e.g., Session, SessionStats, PropertyCount) or pagination information for predictable and easy-to-use responses. These types are documented using JSDoc typedefs.

Getting Started

Installation

npm install easy-umami-js

Basic Setup

ES6 Import

import UmamiClient from 'easy-umami-js'; 

const client = new UmamiClient({
  baseUrl: 'https://your-umami-instance.com', // Your Umami instance URL (no trailing slash)
  username: 'your-username',  // superadmin username
  password: 'your-password'   // superadmin password
});

CJS

const UmamiClient = require('easy-umami-js');

const client = new UmamiClient({
  baseUrl: 'https://your-umami-instance.com', // Your Umami instance URL (no trailing slash)
  username: 'your-username',  // superadmin username
  password: 'your-password'   // superadmin password
});

Authentication

  • authenticate(): Authenticates with the Umami API and stores the token.
  • verifyToken(): Verifies the current token and returns user information.

User Management

  • createUser(params): Creates a new user. Requires admin privileges.
  • getUsers(): Retrieves all users. Requires admin privileges.
  • getUser(userId): Retrieves a specific user by ID.
  • updateUser(userId, params): Updates a user's information.
  • deleteUser(userId): Deletes a user by ID. Requires admin privileges.
  • getUserWebsites(userId, params): Retrieves websites associated with a user.
  • getUserTeams(userId, params): Retrieves teams associated with a user.

Team Management

  • createTeam(params): Creates a new team.
  • getTeams(params): Retrieves all teams.
  • joinTeam(params): Joins a team using an access code.
  • getTeam(teamId): Retrieves a specific team by ID.
  • updateTeam(teamId, params): Updates a team's information.
  • deleteTeam(teamId): Deletes a team by ID.
  • getTeamUsers(teamId, params): Retrieves users belonging to a team.
  • addUserToTeam(teamId, params): Adds a user to a team.
  • getTeamUser(teamId, userId): Retrieves details of a user within a team.
  • updateTeamUserRole(teamId, userId, params): Updates a user's role within a team.
  • removeUserFromTeam(teamId, userId): Removes a user from a team.
  • getTeamWebsites(teamId, params): Retrieves websites associated with a team.

Website Management

  • getWebsites(params): Retrieves all websites.
  • createWebsite(params): Creates a new website.
  • getWebsite(websiteId): Retrieves a specific website by ID.
  • updateWebsite(websiteId, params): Updates website information.
  • deleteWebsite(websiteId): Deletes a website by ID.
  • resetWebsite(websiteId): Resets all data for a website.

Session Analysis

  • getSessions(websiteId, params): Retrieves sessions for a website within a time range.
  • getSessionStats(websiteId, params): Retrieves summarized session statistics for a website.
  • getSession(websiteId, sessionId): Retrieves a specific session by ID.
  • getSessionActivity(websiteId, sessionId, params): Retrieves activity details for a session.
  • getSessionProperties(websiteId, sessionId): Retrieves properties associated with a session.
  • getSessionDataProperties(websiteId, params): Retrieves session data counts by property name.
  • getSessionDataValues(websiteId, params): Retrieves session data counts for a given property.

Event Tracking and Data Retrieval

  • getActiveUsers(websiteId): Gets the number of active users on a website.
  • getEventsSeries(websiteId, params): Retrieves event series data for a website.
  • getWebsiteEvents(websiteId, params): Retrieves detailed event data for a website.
  • getWebsiteStats(websiteId, params): Retrieves summarized website statistics.
  • getEventDataEvents(websiteId, params): Retrieves event data summaries (names, properties, counts).
  • getEventDataFields(websiteId, params): Retrieves event data property and value counts.
  • getEventDataValues(websiteId, params): Retrieves event data counts for a specific event and property.
  • getEventDataStats(websiteId, params): Retrieves summarized event data (events, fields, records).
  • getPageviews(websiteId, params): Retrieves pageview data for a website.
  • getMetrics(websiteId, params): Retrieves various website metrics (e.g., URLs, referrers, browsers).
  • sendEvent(payload): Sends a custom event to Umami.

Examples

Authentication and Session Retrieval

async function getSessions() {
  try {
    const authResponse = await client.authenticate();
    console.log("Authentication successful:", authResponse);

    const sessions = await client.getSessions('your-website-id', {
      startAt: Date.now() - 7 * 24 * 60 * 60 * 1000, // Last 7 days
      endAt: Date.now()
    });
    console.log("Sessions:", sessions);
  } catch (error) {
    console.error("Error:", error);
  }
}

getSessions();

Sending a Custom Event

client.sendEvent({
  website: 'your-website-id',
  name: 'product_view',
  data: { product_id: '12345' }
});

Type Definitions

Refer to the JSDoc typedefs within the umami.js file for detailed information on the structure of objects like User, GetTokenResponse, EventPayload, Session, SessionStats, SessionActivity, SessionProperty, PropertyCount, and PropertyValue. These definitions provide clear documentation of the expected data structures for requests and responses. There's an documentation generated with jsdoc2md here


For complete API details and query parameter options, refer to the official Umami Analytics API Documentation.

TODO to v1:

  • [ ] Test all the endpoints
  • [ ] Add async-retry and add a retries parameter to class config and individual methods.
  • [ ] Add a timeout parameter to class config and individual methods.
  • [ ] Allow passing the opts type directly to class config and individual methods.