Error capturing SDK for Node.js that sends notifications to Google Chat via webhook cards.
npm install @gchat-notifier/node
import { GChatNotifier } from "@gchat-notifier/node";
GChatNotifier.init({
webhookUrl: "https://chat.googleapis.com/v1/spaces/...",
});
// Capture an error with optional request context
try {
throw new Error("API Timeout");
} catch (error) {
GChatNotifier.captureException(error, {
url: "/api/v1/data",
method: "POST"
});
}
GChatNotifier.captureLatency({
endpoint: "/api/v1/users",
durationMs: 450,
thresholdMs: 300 // Optional: shows threshold in the card
});
interface SDKOptions {
/** Google Chat webhook URL (required) */
webhookUrl: string;
/** Service/application name */
service?: string;
/** Environment (e.g., 'production', 'staging') */
environment?: string;
/** Application version/release */
release?: string;
/** Enable debug logging to console */
debug?: boolean;
/** Maximum events per minute (default: 30) */
maxEventsPerMinute?: number;
/** Transform or filter events before sending */
beforeSend?: (event: GChatEvent) => GChatEvent | null;
}
Use withScope to add contextual information to captured events:
GChatNotifier.withScope((scope) => {
scope.setTag("userId", "12345");
scope.setTag("feature", "checkout");
scope.setExtra("cart", { items: 3, total: 99.99 });
GChatNotifier.captureException(error);
});
import express from "express";
import { GChatNotifier, gchatExpress } from "@gchat-notifier/node";
const app = express();
GChatNotifier.init({ webhookUrl: "..." });
// Your routes
app.get("/", (req, res) => {
res.send("Hello!");
});
// Error handler - must be after all routes
app.use(gchatExpress());
app.listen(3000);
import Fastify from "fastify";
import { GChatNotifier, gchatFastify } from "@gchat-notifier/node";
const fastify = Fastify();
GChatNotifier.init({ webhookUrl: "..." });
// Register the plugin
await fastify.register(gchatFastify);
fastify.listen({ port: 3000 });
import { Module, APP_FILTER } from "@nestjs/core";
import { GChatNotifier, GChatExceptionFilter } from "@gchat-notifier/node";
GChatNotifier.init({ webhookUrl: "..." });
@Module({
providers: [
{
provide: APP_FILTER,
useClass: GChatExceptionFilter,
},
],
})
export class AppModule {}
Use beforeSend to filter or modify events before they're sent:
GChatNotifier.init({
webhookUrl: "...",
beforeSend: (event) => {
// Don't send 404 errors
if (event.message.includes("Not Found")) {
return null;
}
// Add custom data
event.extra = {
...event.extra,
serverVersion: process.env.VERSION,
};
return event;
},
});
The package exports the following types for TypeScript users:
import type {
GChatEvent,
SDKOptions,
Severity
} from "@gchat-notifier/node";
Contributions are welcome! See CONTRIBUTING.md for guidelines.
MIT