Error tracking and monitoring for Node.js applications using Express, Fastify, or any HTTP framework.

Node.js Integration

Use @codmir/sdk/overseer for generic Node.js error tracking, or @codmir/sdk/express for Express-specific middleware.

npm install @codmir/sdk

Quick Start

import * as Codmir from '@codmir/sdk/overseer';

Codmir.init({
  dsn: process.env.CODMIR_DSN,
  environment: process.env.NODE_ENV,
  release: process.env.APP_VERSION,
});

// Capture errors
process.on('uncaughtException', (error) => {
  Codmir.captureException(error);
  Codmir.flush(2000).then(() => process.exit(1));
});

process.on('unhandledRejection', (reason) => {
  Codmir.captureException(reason);
});

Express

For Express applications, use the dedicated Express integration with built-in middleware:

import * as Codmir from '@codmir/sdk/express';
import express from 'express';

Codmir.init({ dsn: process.env.CODMIR_DSN });

const app = express();
app.use(Codmir.requestHandler());
app.use(Codmir.tracingHandler());

// ... your routes ...

app.use(Codmir.errorHandler());

See the Express guide for full details.

Fastify

import * as Codmir from '@codmir/sdk/overseer';

Codmir.init({ dsn: process.env.CODMIR_DSN });

fastify.setErrorHandler((error, request, reply) => {
  Codmir.captureException(error, {
    request: {
      method: request.method,
      url: request.url,
      headers: request.headers,
    },
  });
  reply.status(500).send({ error: 'Internal Server Error' });
});

Manual Capture

import {
  captureException,
  captureMessage,
  setUser,
  addBreadcrumb,
  flush,
} from '@codmir/sdk/overseer';

setUser({ id: 'user-123', email: 'user@example.com' });

addBreadcrumb({
  category: 'db.query',
  message: 'SELECT * FROM users WHERE id = ?',
  data: { duration: 45 },
});

try {
  await riskyDatabaseOperation();
} catch (error) {
  captureException(error, {
    tags: { service: 'user-service' },
  });
}

// Flush before process exit
await flush(2000);