Node.js SDK for DevPulse — server-side error tracking with Express/Connect middleware support.
- Node.js ≥ 18
- A running DevPulse server
npm install @sekolahcode/devpulse-nodeNo external runtime dependencies — uses only Node.js built-in modules.
const { DevPulse } = require('@sekolahcode/devpulse-node');
DevPulse.init({
dsn: 'https://your-devpulse-host/api/ingest/YOUR_API_KEY',
environment: 'production',
release: '1.0.0',
});After init(), uncaught exceptions and unhandled promise rejections are captured automatically.
Mount errorHandler() after all other middleware and routes:
const express = require('express');
const { DevPulse } = require('@sekolahcode/devpulse-node');
DevPulse.init({ dsn: 'https://your-devpulse-host/api/ingest/YOUR_API_KEY' });
const app = express();
app.get('/', (req, res) => res.send('Hello'));
// Must be last — catches errors passed via next(err)
app.use(DevPulse.errorHandler());
app.listen(3000);| Option | Default | Description |
|---|---|---|
dsn |
(required) | https://<host>/api/ingest/<api_key> |
environment |
"production" |
Environment tag attached to every event |
release |
null |
Release/version tag (e.g. "1.2.3") |
enabled |
true |
Enable / disable the SDK globally |
timeout |
3000 |
HTTP request timeout in milliseconds |
maxBreadcrumbs |
20 |
Maximum breadcrumbs retained per event |
captureUnhandled |
true |
Auto-capture uncaughtException and unhandledRejection |
beforeSend |
null |
Hook to inspect/modify or drop events before sending |
Manually capture an Error or any thrown value.
try {
await riskyOperation();
} catch (err) {
await DevPulse.capture(err, { orderId: 42 });
}Capture a plain string message. level defaults to "info".
DevPulse.captureMessage('Payment gateway timeout', 'warning');Attach user identity to all subsequent events.
DevPulse.setUser({ id: 123, email: 'user@example.com' });
// Later, on logout:
DevPulse.clearUser();Manually add a breadcrumb to the trail included with the next event.
DevPulse.addBreadcrumb({
category: 'db',
message: 'SELECT users WHERE id = ?',
level: 'info',
});Returns an Express/Connect-compatible 4-argument error handler middleware. Captures the error, attaches request context (method, URL, scrubbed headers), then calls next(err) to pass the error along.
app.use(DevPulse.errorHandler());Request headers are automatically scrubbed — authorization, cookie, set-cookie, and x-api-key are replaced with [redacted] before being sent.
Inspect or modify the payload before it is sent. Return null or false to drop the event entirely.
DevPulse.init({
dsn: '...',
beforeSend(event) {
// Drop health-check noise
if (event.request?.url?.includes('/health')) return null;
return event;
},
});The package ships with TypeScript declarations (src/index.d.ts). No @types/ package needed.
import { DevPulse, DevPulseNodeConfig } from '@sekolahcode/devpulse-node';
const config: DevPulseNodeConfig = {
dsn: 'https://your-devpulse-host/api/ingest/YOUR_API_KEY',
environment: 'production',
};
DevPulse.init(config);MIT — see LICENSE