SDK for capturing runtime behavior - automatic incident response and debugging with enhanced autofix support
npm install @runtime-digital-twin/sdkIn-process instrumentation library for capturing runtime behavior and enabling automatic incident response.
``bash`
npm install @runtime-digital-twin/sdkor
pnpm add @runtime-digital-twin/sdkor
yarn add @runtime-digital-twin/sdk
`bash`
npm install @runtime-digital-twin/sdk
`typescript
import Fastify from 'fastify';
import { fastifyTracing } from '@runtime-digital-twin/sdk';
const fastify = Fastify();
// Register the tracing plugin
await fastify.register(fastifyTracing, {
mode: 'record', // or 'replay'
outputDir: './traces',
});
// Your routes work as normal
fastify.get('/api/users', async (request, reply) => {
return { users: [] };
});
await fastify.listen({ port: 3000 });
`
`typescript
import { createWrappedDbClient } from '@runtime-digital-twin/sdk';
import { Pool } from 'pg';
const db = await createWrappedDbClient({
realClient: new Pool({ connectionString: process.env.DATABASE_URL }),
});
// Use it like a normal DB client
const result = await db.query('SELECT * FROM users WHERE id = $1', [userId]);
`
`typescript
import { wrapFetch } from '@runtime-digital-twin/sdk';
// Wrap global fetch
const wrappedFetch = wrapFetch(fetch);
// Use wrapped fetch for outbound calls
const response = await wrappedFetch('https://api.example.com/data');
`
- ✅ HTTP Request/Response Capture - Automatic Fastify plugin
- ✅ Database Query Capture - Postgres wrapper with query/result recording
- ✅ HTTP Client Wrapping - Capture outbound HTTP calls
- ✅ Error Capture - Automatic error and stack trace recording
- ✅ Trace Bundle Writing - Self-contained trace format
- ✅ Correlation ID Generation - Cross-service tracing
- ✅ Span Tracking - Request/response span relationships
`typescript`
await fastify.register(fastifyTracing, {
serviceName: 'my-service', // Required: Service identifier
serviceVersion: '1.0.0', // Optional: Service version
environment: 'production', // Optional: Environment name
traceDir: './traces', // Optional: Where to store traces (default: './traces')
headerAllowlist: [], // Optional: Headers to capture
maxBodySize: 10 1024 1024, // Optional: Max body size to capture (default: 10MB)
enabled: true, // Optional: Enable/disable tracing (default: true)
// Upload options (optional)
uploadUrl: process.env.WRAITH_API_URL + '/api/traces/ingest',
apiKey: process.env.WRAITH_API_KEY,
uploadOnComplete: true, // Optional: Auto-upload after completion (default: true)
});
`typescript`
const db = await createWrappedDbClient({
realClient: new Pool({ connectionString: process.env.DATABASE_URL }),
traceDir: './traces', // Optional: custom trace directory
});
To automatically upload traces to your Wraith control plane:
`typescript
import { fastifyTracing } from '@runtime-digital-twin/sdk';
await fastify.register(fastifyTracing, {
serviceName: 'my-service',
serviceVersion: '1.0.0',
environment: process.env.ENVIRONMENT || 'production',
traceDir: './traces',
// Auto-upload traces after request completes
uploadUrl: process.env.WRAITH_API_URL
? ${process.env.WRAITH_API_URL}/api/traces/ingest`
: undefined,
apiKey: process.env.WRAITH_API_KEY,
uploadOnComplete: true, // Default: true
});
Environment Variables:
`bash`
WRAITH_API_URL=https://your-wraith-app.vercel.app
WRAITH_API_KEY=your-api-key-here
Traces are uploaded asynchronously after each request completes, so they don't slow down your application.
Active instrumentation that captures all runtime behavior:
- HTTP requests/responses
- Database queries and results
- Outbound HTTP calls
- Errors and stack traces
Disabled instrumentation (used during trace replay):
- No events written
- Service runs with mocked dependencies
- Used by replay engine for deterministic debugging
- RDT_MODE - Set to record or replay (default: record)RDT_TRACE_DIR
- - Directory for trace storage (default: ./traces)WRAITH_API_URL
- - Control plane URL for trace ingestionWRAITH_API_KEY
- - API key for authentication
`typescript`
import { fastifyTracing, FastifyTracingOptions } from '@runtime-digital-twin/sdk';
`typescript`
import {
createWrappedDbClient,
wrapDbClient,
CreateWrappedDbClientOptions
} from '@runtime-digital-twin/sdk';
`typescript`
import { wrapFetch, setTraceContext, getTraceContext } from '@runtime-digital-twin/sdk';
`typescript`
import {
createTrace,
loadTraceMeta,
validateTraceStructure,
TraceBundle
} from '@runtime-digital-twin/sdk';
`typescript``
import {
uploadTrace,
type TraceUploadOptions,
type TraceUploadResult
} from '@runtime-digital-twin/sdk';
See the Quickstart Guide for complete examples.
MIT