Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
MDX
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263---category: SDKtitle: Error Handlingdescription: "Handle errors and implement retry strategies with the openstatus Node.js SDK"---
The SDK uses ConnectRPC. Errors are thrown as `ConnectError` instances from the `@connectrpc/connect` package.
```typescriptimport { ConnectError } from "@connectrpc/connect";
try { await client.monitor.v1.MonitorService.deleteMonitor({ id: "invalid" });} catch (error) { if (error instanceof ConnectError) { console.error(`Code: ${error.code}`); console.error(`Message: ${error.message}`); }}```
## Common Error Codes
| Code | Description ||------|-------------|| `unauthenticated` | Missing or invalid API key || `not_found` | Resource does not exist || `invalid_argument` | Validation failure (e.g., missing required field, value out of range) || `permission_denied` | No access to this workspace or resource || `already_exists` | Duplicate resource (e.g., slug already taken) |
## Retry Strategy
ConnectRPC does not retry by default. For transient failures (`unavailable`, `deadline_exceeded`), implement your own retry logic:
```typescriptimport { Code, ConnectError } from "@connectrpc/connect";
async function withRetry<T>(fn: () => Promise<T>, maxRetries = 3): Promise<T> { for (let attempt = 0; attempt <= maxRetries; attempt++) { try { return await fn(); } catch (error) { if ( error instanceof ConnectError && (error.code === Code.Unavailable || error.code === Code.DeadlineExceeded) && attempt < maxRetries ) { await new Promise((resolve) => setTimeout(resolve, 1000 * 2 ** attempt)); continue; } throw error; } } throw new Error("Unreachable");}
const { httpMonitors } = await withRetry(() => client.monitor.v1.MonitorService.listMonitors({}));```