Openstatus sdk
www.openstatus.dev
1/**
2 * @module
3 *
4 * Official Node.js SDK for OpenStatus - the open-source monitoring platform.
5 *
6 * @example Basic usage
7 * ```typescript
8 * import { openstatus, Periodicity, Region } from "@openstatus/sdk-node";
9 *
10 * const headers = {
11 * "x-openstatus-key": `Bearer ${process.env.OPENSTATUS_API_KEY}`,
12 * };
13 *
14 * // List all monitors
15 * const { httpMonitors, tcpMonitors, dnsMonitors } =
16 * await openstatus.monitor.v1.MonitorService.listMonitors({}, { headers });
17 *
18 * // Create an HTTP monitor
19 * const { monitor } = await openstatus.monitor.v1.MonitorService.createHTTPMonitor({
20 * monitor: {
21 * name: "My API",
22 * url: "https://api.example.com/health",
23 * periodicity: Periodicity.PERIODICITY_1M,
24 * regions: [Region.FLY_AMS, Region.FLY_IAD, Region.FLY_SYD],
25 * active: true,
26 * },
27 * }, { headers });
28 * ```
29 */
30
31import type { Client } from "@connectrpc/connect";
32import { createClient } from "@connectrpc/connect";
33import { createConnectTransport } from "@connectrpc/connect-node";
34import { MonitorService } from "./gen/openstatus/monitor/v1/service_pb.ts";
35import { HealthService } from "./gen/openstatus/health/v1/health_pb.ts";
36import { StatusReportService } from "./gen/openstatus/status_report/v1/service_pb.ts";
37
38// Re-export monitor types
39export type {
40 Headers,
41 HTTPMonitor,
42 OpenTelemetryConfig,
43} from "./gen/openstatus/monitor/v1/http_monitor_pb.ts";
44
45export type { TCPMonitor } from "./gen/openstatus/monitor/v1/tcp_monitor_pb.ts";
46
47export type { DNSMonitor } from "./gen/openstatus/monitor/v1/dns_monitor_pb.ts";
48
49// Re-export assertion types
50export type {
51 BodyAssertion,
52 HeaderAssertion,
53 RecordAssertion,
54 StatusCodeAssertion,
55} from "./gen/openstatus/monitor/v1/assertions_pb.ts";
56
57// Re-export assertion comparator enums
58export {
59 NumberComparator,
60 RecordComparator,
61 StringComparator,
62} from "./gen/openstatus/monitor/v1/assertions_pb.ts";
63
64// Re-export enums
65export { HTTPMethod } from "./gen/openstatus/monitor/v1/http_monitor_pb.ts";
66
67export { Periodicity, Region } from "./gen/openstatus/monitor/v1/monitor_pb.ts";
68
69export { MonitorStatus } from "./gen/openstatus/monitor/v1/monitor_pb.ts";
70
71// Re-export request/response types
72export type {
73 CreateDNSMonitorRequest,
74 CreateDNSMonitorResponse,
75 CreateHTTPMonitorRequest,
76 CreateHTTPMonitorResponse,
77 CreateTCPMonitorRequest,
78 CreateTCPMonitorResponse,
79 DeleteMonitorRequest,
80 DeleteMonitorResponse,
81 GetMonitorStatusRequest,
82 GetMonitorStatusResponse,
83 GetMonitorSummaryRequest,
84 GetMonitorSummaryResponse,
85 ListMonitorsRequest,
86 ListMonitorsResponse,
87 RegionStatus,
88 TriggerMonitorRequest,
89 TriggerMonitorResponse,
90 UpdateDNSMonitorRequest,
91 UpdateDNSMonitorResponse,
92 UpdateHTTPMonitorRequest,
93 UpdateHTTPMonitorResponse,
94 UpdateTCPMonitorRequest,
95 UpdateTCPMonitorResponse,
96} from "./gen/openstatus/monitor/v1/service_pb.ts";
97
98export { TimeRange } from "./gen/openstatus/monitor/v1/service_pb.ts";
99
100// Re-export health types
101export type {
102 CheckRequest,
103 CheckResponse,
104} from "./gen/openstatus/health/v1/health_pb.ts";
105
106export { CheckResponse_ServingStatus as ServingStatus } from "./gen/openstatus/health/v1/health_pb.ts";
107
108// Re-export status report types
109export type {
110 StatusReport,
111 StatusReportSummary,
112 StatusReportUpdate,
113} from "./gen/openstatus/status_report/v1/status_report_pb.ts";
114
115export { StatusReportStatus } from "./gen/openstatus/status_report/v1/status_report_pb.ts";
116
117// Re-export status report request/response types
118export type {
119 AddStatusReportUpdateRequest,
120 AddStatusReportUpdateResponse,
121 CreateStatusReportRequest,
122 CreateStatusReportResponse,
123 DeleteStatusReportRequest,
124 DeleteStatusReportResponse,
125 GetStatusReportRequest,
126 GetStatusReportResponse,
127 ListStatusReportsRequest,
128 ListStatusReportsResponse,
129 UpdateStatusReportRequest,
130 UpdateStatusReportResponse,
131} from "./gen/openstatus/status_report/v1/service_pb.ts";
132
133/**
134 * Default OpenStatus API URL.
135 */
136const DEFAULT_API_URL = "https://api.openstatus.dev/rpc";
137
138/**
139 * Creates a Connect RPC transport configured for the OpenStatus API.
140 */
141const transport = createConnectTransport({
142 baseUrl: process.env.OPENSTATUS_API_URL ?? DEFAULT_API_URL,
143 httpVersion: "2",
144});
145
146/**
147 * OpenStatus API client interface.
148 *
149 * Provides access to Monitor and Health services.
150 */
151export interface OpenStatusClient {
152 /**
153 * Monitor service namespace (v1).
154 */
155 monitor: {
156 v1: {
157 /**
158 * MonitorService provides CRUD and operational commands for monitors.
159 *
160 * Methods:
161 * - `createHTTPMonitor` - Create a new HTTP monitor
162 * - `createTCPMonitor` - Create a new TCP monitor
163 * - `createDNSMonitor` - Create a new DNS monitor
164 * - `updateHTTPMonitor` - Update an existing HTTP monitor
165 * - `updateTCPMonitor` - Update an existing TCP monitor
166 * - `updateDNSMonitor` - Update an existing DNS monitor
167 * - `listMonitors` - List all monitors
168 * - `triggerMonitor` - Trigger an immediate check
169 * - `deleteMonitor` - Delete a monitor
170 * - `getMonitorStatus` - Get status of all regions for a monitor
171 * - `getMonitorSummary` - Get aggregated metrics for a monitor
172 */
173 MonitorService: Client<typeof MonitorService>;
174 };
175 };
176 /**
177 * Health service namespace (v1).
178 */
179 health: {
180 v1: {
181 /**
182 * HealthService provides health check endpoints.
183 *
184 * Methods:
185 * - `check` - Check API health status
186 */
187 HealthService: Client<typeof HealthService>;
188 };
189 };
190 /**
191 * Status report service namespace (v1).
192 */
193 statusReport: {
194 v1: {
195 /**
196 * StatusReportService provides CRUD operations for status reports.
197 *
198 * Methods:
199 * - `createStatusReport` - Create a new status report
200 * - `getStatusReport` - Get a status report by ID
201 * - `listStatusReports` - List all status reports
202 * - `updateStatusReport` - Update a status report
203 * - `deleteStatusReport` - Delete a status report
204 * - `addStatusReportUpdate` - Add an update to a status report
205 */
206 StatusReportService: Client<typeof StatusReportService>;
207 };
208 };
209}
210
211/**
212 * OpenStatus SDK client.
213 *
214 * Provides access to the OpenStatus API for managing monitors and checking service health.
215 *
216 * @example
217 * ```typescript
218 * import { openstatus, Periodicity } from "@openstatus/sdk-node";
219 *
220 * // Check API health (no auth required)
221 * const { status } = await openstatus.health.v1.HealthService.check({});
222 *
223 * // Create a monitor (auth required)
224 * const headers = { "x-openstatus-key": `Bearer ${process.env.OPENSTATUS_API_KEY}` };
225 * const { monitor } = await openstatus.monitor.v1.MonitorService.createHTTPMonitor({
226 * monitor: {
227 * name: "My Website",
228 * url: "https://example.com",
229 * periodicity: Periodicity.PERIODICITY_1M,
230 * active: true,
231 * },
232 * }, { headers });
233 * ```
234 */
235export const openstatus: OpenStatusClient = {
236 monitor: {
237 v1: {
238 MonitorService: createClient(MonitorService, transport),
239 },
240 },
241 health: {
242 v1: {
243 HealthService: createClient(HealthService, transport),
244 },
245 },
246 statusReport: {
247 v1: {
248 StatusReportService: createClient(StatusReportService, transport),
249 },
250 },
251};