npm install @trailbase/sdkimport { 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.
// 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;
});app.get('/api/audit', async (request, reply) => {
const events = await trailbase.search({
actor: request.query.userId,
action: 'invoice.*',
});
return events;
});Join the waitlist for early access. Five-minute setup, no infrastructure changes.
Get Early Access