JavaScript / TypeScript
Installation
Copy
npm install @kodo-status/sdk
Quick Start
Copy
import { Kodo } from '@kodo-status/sdk';
const kodo = new Kodo({
apiKey: process.env.KODO_API_KEY
});
// Update service status
await kodo.service.update('api-gateway', {
status: 'degraded'
});
// Create incident
await kodo.incident.create({
title: 'High latency detected',
status: 'investigating',
severity: 'minor',
services: ['api-gateway']
});
// Send heartbeat
await kodo.heartbeat('worker-1');
Service Methods
Copy
// List services
const services = await kodo.services.list();
// Get service
const service = await kodo.service.get('svc_abc123');
// Update status
await kodo.service.update('api-gateway', {
status: 'operational'
});
Incident Methods
Copy
// List incidents
const incidents = await kodo.incidents.list({
status: 'investigating'
});
// Create incident
const incident = await kodo.incident.create({
title: 'Database issues',
status: 'investigating',
severity: 'major',
services: ['database'],
message: 'We are investigating'
});
// Add update
await kodo.incident.update(incident.id, {
status: 'identified',
message: 'Root cause found'
});
// Resolve
await kodo.incident.resolve(incident.id, {
message: 'Issue resolved'
});
Monitor Methods
Copy
// List monitors
const monitors = await kodo.monitors.list();
// Create monitor
const monitor = await kodo.monitor.create({
name: 'API Health',
url: 'https://api.example.com/health',
interval: 300
});
// Pause monitor
await kodo.monitor.disable(monitor.id);
Heartbeat
Copy
// Simple heartbeat
await kodo.heartbeat('hb_abc123');
// With status
await kodo.heartbeat('hb_abc123', {
status: 'up',
message: 'Job completed successfully',
duration: 1523
});
// Report failure
await kodo.heartbeat('hb_abc123', {
status: 'down',
message: 'Job failed'
});
Express Middleware
Copy
import { createKodoMiddleware } from '@kodo-status/express';
const kodo = createKodoMiddleware({
apiKey: process.env.KODO_API_KEY,
monitorId: process.env.KODO_MONITOR_ID
});
// Health endpoint
app.get('/health', kodo.healthCheck);
// Error tracking (add as last middleware)
app.use(kodo.errorHandler);
Next.js
Copy
// app/api/health/route.ts
import { createHealthHandler } from '@kodo-status/nextjs';
export const GET = createHealthHandler({
apiKey: process.env.KODO_API_KEY,
monitorId: process.env.KODO_MONITOR_ID
});
Error Handling
Copy
import { KodoError } from '@kodo-status/sdk';
try {
await kodo.incident.create({ ... });
} catch (error) {
if (error instanceof KodoError) {
console.error(`Kodo error: ${error.code} - ${error.message}`);
}
}
TypeScript
Full TypeScript support with types:Copy
import { Kodo, Incident, Service, IncidentStatus } from '@kodo-status/sdk';
const kodo = new Kodo({ apiKey: '...' });
const incident: Incident = await kodo.incident.create({
title: 'Issue',
status: 'investigating' as IncidentStatus
});