How to Add Audit Logs to Fastify

TL;DR: Integrate Trailbase with Fastify using hooks for automatic audit logging. Fastify's plugin architecture makes it easy to add Trailbase as a decorator.

Step 1: Install the SDK

npm install @trailbase/sdk

Step 2: Initialize the Client

import { TrailbaseClient } from '@trailbase/sdk';
import Fastify from 'fastify';

const trailbase = new TrailbaseClient({
  apiKey: process.env.TRAILBASE_API_KEY!,
  region: 'us-east-1',
});

const app = Fastify();

// Register as a decorator
app.decorate('trailbase', trailbase);

Fastify's decorator pattern lets you access trailbase from any route handler via request.server.trailbase. Use the onResponse hook for automatic logging across all routes.

Step 3: Track Audit Events

// Use onResponse hook for automatic logging
app.addHook('onResponse', async (request, reply) => {
  await trailbase.track(`api.${request.method.toLowerCase()}`, {
    actor: request.user?.id,
    metadata: {
      path: request.url,
      statusCode: reply.statusCode,
    },
  });
});

// Or track manually in route handlers
app.post('/api/invoices', async (request, reply) => {
  const invoice = await createInvoice(request.body);

  await trailbase.track('invoice.create', {
    actor: request.user.id,
    target: invoice.id,
    metadata: { amount: invoice.amount },
  });

  return invoice;
});

Step 4: Query Audit Logs

app.get('/api/audit', async (request, reply) => {
  const events = await trailbase.search({
    actor: request.query.userId,
    action: 'invoice.*',
  });
  return events;
});

Other Integrations

Next.jsTypeScriptExpress.jsJavaScript / TypeScriptNestJSTypeScript

Ready to Add Audit Logs to Fastify?

Join the waitlist for early access. Five-minute setup, no infrastructure changes.

Get Early Access