API Reference
Complete reference for all classes, methods, and types available in Sentinel Guard.
SentinelGuard Class
The main class for monitoring and heartbeat functionality.
Constructor
new SentinelGuard(config: SentinelGuardConfig)
Creates a new SentinelGuard instance with the specified configuration.
Parameters:
config
- Configuration object containing API credentials and settings
Example:
const sentinel = new SentinelGuard({
apiKey: process.env.SENTINEL_API_KEY!,
baseUrl: process.env.SENTINEL_API_URL!,
monitorApiKey: process.env.SENTINEL_MONITOR_API_KEY!,
timeout: 10000,
});
Methods
startMonitoring()
startMonitoring(config: HeartbeatConfig): void
Starts automatic heartbeat monitoring with the specified configuration.
Parameters:
config.interval
- Heartbeat interval in milliseconds (minimum: 5000)config.maxConsecutiveErrors
- Maximum consecutive errors before stopping (optional, default: 5)
Example:
sentinel.startMonitoring({
interval: 30000,
maxConsecutiveErrors: 5,
});
stopMonitoring()
stopMonitoring(): void
Stops automatic heartbeat monitoring and clears the interval timer.
Example:
sentinel.stopMonitoring();
sendHeartbeat()
sendHeartbeat(data: Partial<HeartbeatData>): Promise<HeartbeatResponse>
Sends a manual heartbeat to the monitoring service.
Parameters:
data.status
- Application status (“ONLINE” | “OFFLINE” | “ERROR” | “HIGH_LATENCY”)data.metadata
- Additional metadata to include (optional)
Returns:
- Promise resolving to HeartbeatResponse object
Example:
const response = await sentinel.sendHeartbeat({
status: "ONLINE",
metadata: {
service: "my-app",
version: "1.0.0",
environment: "production",
},
});
if (response.success) {
console.log("Heartbeat sent successfully");
} else {
console.error("Heartbeat failed:", response.error);
}
isMonitoringActive()
isMonitoringActive(): boolean
Returns whether automatic monitoring is currently active.
Returns:
true
if monitoring is active,false
otherwise
Example:
const isActive = sentinel.isMonitoringActive();
console.log("Monitoring active:", isActive);
getErrorCount()
getErrorCount(): number
Returns the current consecutive error count.
Returns:
- Number of consecutive errors
Example:
const errorCount = sentinel.getErrorCount();
console.log("Error count:", errorCount);
setPrismaClient()
setPrismaClient(client: PrismaClientLike): void
Sets a Prisma client for database latency monitoring.
Parameters:
client
- Prisma client instance
Example:
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
sentinel.setPrismaClient(prisma);
setRedisClient()
setRedisClient(client: RedisClientLike): void
Sets a Redis client for cache latency monitoring.
Parameters:
client
- Redis client instance
Example:
import { createClient } from "redis";
const redis = createClient();
await redis.connect();
sentinel.setRedisClient(redis);
destroy()
destroy(): void
Cleans up resources and stops all monitoring activities.
Example:
sentinel.destroy();
Interfaces
SentinelGuardConfig
Configuration object for SentinelGuard initialization.
interface SentinelGuardConfig {
apiKey: string;
baseUrl: string;
monitorApiKey: string;
timeout?: number;
retryConfig?: RetryConfig;
}
Properties:
apiKey
- Your UptimeBeacon.cloud API keybaseUrl
- API base URL (typically “https://api.uptimebeacon.cloud ”)monitorApiKey
- Monitor-specific API keytimeout
- Request timeout in milliseconds (optional, default: 10000)retryConfig
- Retry configuration (optional)
RetryConfig
Configuration for automatic retry behavior.
interface RetryConfig {
maxRetries: number;
baseDelay: number;
backoffMultiplier: number;
}
Properties:
maxRetries
- Maximum number of retry attemptsbaseDelay
- Base delay between retries in millisecondsbackoffMultiplier
- Exponential backoff multiplier
HeartbeatConfig
Configuration for automatic heartbeat monitoring.
interface HeartbeatConfig {
interval: number;
maxConsecutiveErrors?: number;
}
Properties:
interval
- Heartbeat interval in millisecondsmaxConsecutiveErrors
- Maximum consecutive errors before stopping (optional, default: 5)
HeartbeatData
Data structure for heartbeat payloads.
interface HeartbeatData {
status: "ONLINE" | "OFFLINE" | "ERROR" | "HIGH_LATENCY";
type: "CUSTOM";
latencyMs?: number;
performance?: PerformanceMetrics;
metadata?: Record<string, unknown>;
}
Properties:
status
- Current application statustype
- Heartbeat type (always “CUSTOM”)latencyMs
- Service latency in milliseconds (optional)performance
- Performance metrics (optional)metadata
- Additional metadata (optional)
PerformanceMetrics
Performance data included in heartbeats.
interface PerformanceMetrics {
serviceLatency: number;
prismaLatency?: number;
redisLatency?: number;
timestamp: string;
}
Properties:
serviceLatency
- Service response time in millisecondsprismaLatency
- Database query latency in milliseconds (optional)redisLatency
- Redis operation latency in milliseconds (optional)timestamp
- ISO 8601 timestamp of measurement
HeartbeatResponse
Response object from heartbeat operations.
interface HeartbeatResponse {
success: boolean;
timestamp: string;
message?: string;
}
Properties:
success
- Whether the heartbeat was successfultimestamp
- ISO 8601 timestamp of the responsemessage
- Optional response message
ApiResponse
Generic API response wrapper.
interface ApiResponse<T = unknown> {
success: boolean;
data?: T;
error?: string;
timestamp: string;
}
Properties:
success
- Whether the request was successfuldata
- Response data (optional)error
- Error message if unsuccessful (optional)timestamp
- ISO 8601 timestamp of the response
PrismaClientLike
Interface for Prisma client compatibility.
interface PrismaClientLike {
$queryRaw: (
query: TemplateStringsArray,
...values: unknown[]
) => Promise<unknown>;
}
Properties:
$queryRaw
- Method for executing raw database queries
RedisClientLike
Interface for Redis client compatibility.
interface RedisClientLike {
ping: () => Promise<string>;
}
Properties:
ping
- Method for testing Redis connection
Error Classes
SentinelGuardError
Base error class for all Sentinel Guard errors.
class SentinelGuardError extends Error {
constructor(message: string, statusCode?: number);
}
Properties:
message
- Error messagestatusCode
- HTTP status code (optional)
NetworkError
Error thrown for network-related issues.
class NetworkError extends SentinelGuardError {
constructor(message: string, originalError?: Error);
}
Properties:
message
- Error messageoriginalError
- Original error that caused the network error (optional)
AuthenticationError
Error thrown for authentication failures.
class AuthenticationError extends SentinelGuardError {
constructor(message?: string);
}
Properties:
message
- Error message (default: “Authentication failed”)statusCode
- Always 401
RateLimitError
Error thrown when rate limits are exceeded.
class RateLimitError extends SentinelGuardError {
constructor(message?: string);
}
Properties:
message
- Error message (default: “Rate limit exceeded”)statusCode
- Always 429
Usage Examples
Basic Usage
import { SentinelGuard } from "@uptimebeacon/sentinel-guard";
const sentinel = new SentinelGuard({
apiKey: process.env.SENTINEL_API_KEY!,
baseUrl: process.env.SENTINEL_API_URL!,
monitorApiKey: process.env.SENTINEL_MONITOR_API_KEY!,
});
sentinel.startMonitoring({
interval: 30000,
maxConsecutiveErrors: 5,
});
Error Handling
import {
SentinelGuard,
NetworkError,
AuthenticationError,
RateLimitError,
} from "@uptimebeacon/sentinel-guard";
try {
const response = await sentinel.sendHeartbeat({
status: "ONLINE",
});
} catch (error) {
if (error instanceof AuthenticationError) {
console.error("Authentication failed - check your API keys");
} else if (error instanceof NetworkError) {
console.error("Network error - check your connection");
} else if (error instanceof RateLimitError) {
console.error("Rate limit exceeded - slow down requests");
} else {
console.error("Unknown error:", error);
}
}
Advanced Configuration
const sentinel = new SentinelGuard({
apiKey: process.env.SENTINEL_API_KEY!,
baseUrl: process.env.SENTINEL_API_URL!,
monitorApiKey: process.env.SENTINEL_MONITOR_API_KEY!,
timeout: 15000,
retryConfig: {
maxRetries: 5,
baseDelay: 2000,
backoffMultiplier: 2,
},
});
// Set up database monitoring
const prisma = new PrismaClient();
const redis = createClient();
await redis.connect();
sentinel.setPrismaClient(prisma);
sentinel.setRedisClient(redis);
// Start monitoring with custom configuration
sentinel.startMonitoring({
interval: 45000,
maxConsecutiveErrors: 3,
});
Graceful Shutdown
process.on("SIGINT", () => {
console.log("Shutting down...");
sentinel.stopMonitoring();
sentinel.destroy();
process.exit(0);
});
Type Exports
All types are exported from the main module:
import type {
SentinelGuardConfig,
HeartbeatConfig,
HeartbeatData,
PerformanceMetrics,
HeartbeatResponse,
ApiResponse,
PrismaClientLike,
RedisClientLike,
RetryConfig,
} from "@uptimebeacon/sentinel-guard";