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 🙏

© 2026 – Pkg Stats / Ryan Hefner

oluso

v2.1.0

Published

AI-powered error monitoring library for Node.js applications with automatic error reporting, context tracking, and intelligent error grouping

Readme

Oluso

AI-powered error monitoring library for Node.js applications with automatic error reporting, context tracking, and intelligent error grouping.

Installation

npm install oluso

Features

  • Framework Support: Seamless integration with Express and NestJS.
  • Automatic Context: Captures headers, body, query, and params (sanitized).
  • Breadcrumbs: Tracks events leading to an error for better debugging.
  • User Context: Tie errors to specific users.
  • Deduplication: Intelligent fingerprinting groups similar errors together.
  • Offline Reliability: Queues reports when the API is unreachable.
  • Global Capture: Handles uncaught exceptions, unhandled rejections, and worker errors.
  • Rate Limiting: Protects your API from being flooded by repetitive errors.

Usage with Express

olusoExpress() returns two middlewares that must be mounted at different points in your app -- Express dispatches request vs. error middleware based on each function's parameter count, so one function can't do both jobs.

import express from 'express';
import { olusoExpress } from 'oluso';

const app = express();
app.use(express.json());

const oluso = olusoExpress({
  apiKey: 'your-api-key',
  environment: 'production',
  sensitiveKeys: ['password', 'card_number'] // Optional custom sanitization
});

// requestHandler first, before your routes
app.use(oluso.requestHandler);

app.get('/api/test', (req, res) => {
  throw new Error('Something went wrong!');
});

// errorHandler last, after all your routes -- Express only routes an
// error to handlers registered after the route that produced it.
app.use(oluso.errorHandler);

app.listen(3000);

Note: Express 4 does not automatically forward a rejected promise from an async route handler into error-handling middleware. For async routes, either catch and call next(err) yourself, or use a wrapper like express-async-errors/Express 5 -- otherwise a thrown/rejected error in an async handler never reaches oluso.errorHandler at all.

Cron jobs, queue workers, and other non-request code

requestHandler/errorHandler only see errors that pass through Express's request/response cycle. A node-cron/BullMQ job, a setInterval loop, or a message-queue consumer is invisible to both of them -- and invisible to uncaught-exception reporting too, if that code catches its own errors (even just to log them) rather than letting them throw. The object olusoExpress() returns also exposes captureException (and addBreadcrumb/setUserContext/ setCustomContext/flush) on the same instance, for exactly this case:

const oluso = olusoExpress({ apiKey: 'your-api-key' });

cron.schedule('0 21 * * *', async () => {
  try {
    await deleteStaleRecords();
  } catch (err) {
    oluso.captureException(err); // otherwise this failure is invisible
  }
});

Usage with NestJS

Use the OlusoExceptionFilter to capture errors globally across HTTP, WebSockets, and RPC.

import { Module } from '@nestjs/common';
import { APP_FILTER } from '@nestjs/core';
import { OlusoExceptionFilter } from 'oluso';

@Module({
  providers: [
    {
      provide: APP_FILTER,
      useClass: OlusoExceptionFilter({
        apiKey: 'your-api-key',
        environment: 'production',
        tags: ['nest-api']
      })
    }
  ]
})
export class AppModule {}

Manual Reporting & Context

import { Oluso } from 'oluso';

const oluso = new Oluso({ apiKey: 'your-api-key' });

// Add breadcrumbs for debugging trails
oluso.addBreadcrumb({
  message: 'User started checkout',
  category: 'action',
  data: { cartId: '123' }
});

// Set user context
oluso.setUserContext({
  id: 'user_456',
  email: '[email protected]'
});

try {
  doWork();
} catch (error) {
  oluso.captureException(error, { custom_meta: 'extra-info' });
}

Advanced Configuration

const oluso = new Oluso({
  apiKey: 'your-api-key',
  environment: 'staging',
  defaultSeverity: 'medium',
  maxBreadcrumbs: 50,
  maxErrorsPerMinute: 100,
  enableOfflineQueue: true,
  sensitiveKeys: ['ssn', 'api_key'],
  shouldReport: (err, req) => {
    // Don't report 404s
    if (req?.res?.statusCode === 404) return false;
    return true;
  }
});

Error Report Structure

Reports sent to the API include:

  • Metadata: Title, message, stack trace, severity, tags.
  • Context: Request details (URL, method, headers, etc.), Server details (hostname, node version, memory).
  • History: Breadcrumbs leading up to the error.
  • Identification: Fingerprint for deduplication and User ID.

License

MIT