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";
37import { StatusPageService } from "./gen/openstatus/status_page/v1/service_pb.ts";
38import { MaintenanceService } from "./gen/openstatus/maintenance/v1/service_pb.ts";
39
40// Re-export monitor types
41export type {
42 Headers,
43 HTTPMonitor,
44 OpenTelemetryConfig,
45} from "./gen/openstatus/monitor/v1/http_monitor_pb.ts";
46
47export type { TCPMonitor } from "./gen/openstatus/monitor/v1/tcp_monitor_pb.ts";
48
49export type { DNSMonitor } from "./gen/openstatus/monitor/v1/dns_monitor_pb.ts";
50
51// Re-export assertion types
52export type {
53 BodyAssertion,
54 HeaderAssertion,
55 RecordAssertion,
56 StatusCodeAssertion,
57} from "./gen/openstatus/monitor/v1/assertions_pb.ts";
58
59// Re-export assertion comparator enums
60export {
61 NumberComparator,
62 RecordComparator,
63 StringComparator,
64} from "./gen/openstatus/monitor/v1/assertions_pb.ts";
65
66// Re-export enums
67export { HTTPMethod } from "./gen/openstatus/monitor/v1/http_monitor_pb.ts";
68
69export { Periodicity, Region } from "./gen/openstatus/monitor/v1/monitor_pb.ts";
70
71export { MonitorStatus } from "./gen/openstatus/monitor/v1/monitor_pb.ts";
72
73// Re-export request/response types
74export type {
75 CreateDNSMonitorRequest,
76 CreateDNSMonitorResponse,
77 CreateHTTPMonitorRequest,
78 CreateHTTPMonitorResponse,
79 CreateTCPMonitorRequest,
80 CreateTCPMonitorResponse,
81 DeleteMonitorRequest,
82 DeleteMonitorResponse,
83 GetMonitorStatusRequest,
84 GetMonitorStatusResponse,
85 GetMonitorSummaryRequest,
86 GetMonitorSummaryResponse,
87 ListMonitorsRequest,
88 ListMonitorsResponse,
89 RegionStatus,
90 TriggerMonitorRequest,
91 TriggerMonitorResponse,
92 UpdateDNSMonitorRequest,
93 UpdateDNSMonitorResponse,
94 UpdateHTTPMonitorRequest,
95 UpdateHTTPMonitorResponse,
96 UpdateTCPMonitorRequest,
97 UpdateTCPMonitorResponse,
98} from "./gen/openstatus/monitor/v1/service_pb.ts";
99
100export { TimeRange } from "./gen/openstatus/monitor/v1/service_pb.ts";
101
102// Re-export health types
103export type {
104 CheckRequest,
105 CheckResponse,
106} from "./gen/openstatus/health/v1/health_pb.ts";
107
108export { CheckResponse_ServingStatus as ServingStatus } from "./gen/openstatus/health/v1/health_pb.ts";
109
110// Re-export status report types
111export type {
112 StatusReport,
113 StatusReportSummary,
114 StatusReportUpdate,
115} from "./gen/openstatus/status_report/v1/status_report_pb.ts";
116
117export { StatusReportStatus } from "./gen/openstatus/status_report/v1/status_report_pb.ts";
118
119// Re-export status report request/response types
120export type {
121 AddStatusReportUpdateRequest,
122 AddStatusReportUpdateResponse,
123 CreateStatusReportRequest,
124 CreateStatusReportResponse,
125 DeleteStatusReportRequest,
126 DeleteStatusReportResponse,
127 GetStatusReportRequest,
128 GetStatusReportResponse,
129 ListStatusReportsRequest,
130 ListStatusReportsResponse,
131 UpdateStatusReportRequest,
132 UpdateStatusReportResponse,
133} from "./gen/openstatus/status_report/v1/service_pb.ts";
134
135// Re-export status page types
136export type {
137 StatusPage,
138 StatusPageSummary,
139} from "./gen/openstatus/status_page/v1/status_page_pb.ts";
140
141export {
142 OverallStatus,
143 PageAccessType,
144 PageTheme,
145} from "./gen/openstatus/status_page/v1/status_page_pb.ts";
146
147// Re-export page component types
148export type {
149 PageComponent,
150 PageComponentGroup,
151} from "./gen/openstatus/status_page/v1/page_component_pb.ts";
152
153export { PageComponentType } from "./gen/openstatus/status_page/v1/page_component_pb.ts";
154
155// Re-export page subscriber types
156export type { PageSubscriber } from "./gen/openstatus/status_page/v1/page_subscriber_pb.ts";
157
158// Re-export status page request/response types
159export type {
160 AddMonitorComponentRequest,
161 AddMonitorComponentResponse,
162 AddStaticComponentRequest,
163 AddStaticComponentResponse,
164 ComponentStatus,
165 CreateComponentGroupRequest,
166 CreateComponentGroupResponse,
167 CreateStatusPageRequest,
168 CreateStatusPageResponse,
169 DeleteComponentGroupRequest,
170 DeleteComponentGroupResponse,
171 DeleteStatusPageRequest,
172 DeleteStatusPageResponse,
173 GetOverallStatusRequest,
174 GetOverallStatusResponse,
175 GetStatusPageContentRequest,
176 GetStatusPageContentResponse,
177 GetStatusPageRequest,
178 GetStatusPageResponse,
179 ListStatusPagesRequest,
180 ListStatusPagesResponse,
181 ListSubscribersRequest,
182 ListSubscribersResponse,
183 RemoveComponentRequest,
184 RemoveComponentResponse,
185 SubscribeToPageRequest,
186 SubscribeToPageResponse,
187 UnsubscribeFromPageRequest,
188 UnsubscribeFromPageResponse,
189 UpdateComponentGroupRequest,
190 UpdateComponentGroupResponse,
191 UpdateComponentRequest,
192 UpdateComponentResponse,
193 UpdateStatusPageRequest,
194 UpdateStatusPageResponse,
195} from "./gen/openstatus/status_page/v1/service_pb.ts";
196
197// Re-export maintenance types
198export type {
199 Maintenance,
200 MaintenanceSummary,
201} from "./gen/openstatus/maintenance/v1/maintenance_pb.ts";
202
203// Re-export maintenance request/response types
204export type {
205 CreateMaintenanceRequest,
206 CreateMaintenanceResponse,
207 DeleteMaintenanceRequest,
208 DeleteMaintenanceResponse,
209 GetMaintenanceRequest,
210 GetMaintenanceResponse,
211 ListMaintenancesRequest,
212 ListMaintenancesResponse,
213 UpdateMaintenanceRequest,
214 UpdateMaintenanceResponse,
215} from "./gen/openstatus/maintenance/v1/service_pb.ts";
216
217/**
218 * Default OpenStatus API URL.
219 */
220const DEFAULT_API_URL = "https://api.openstatus.dev/rpc";
221
222/**
223 * Creates a Connect RPC transport configured for the OpenStatus API.
224 */
225const transport = createConnectTransport({
226 baseUrl: process.env.OPENSTATUS_API_URL ?? DEFAULT_API_URL,
227 httpVersion: "2",
228});
229
230/**
231 * OpenStatus API client interface.
232 *
233 * Provides access to Monitor and Health services.
234 */
235export interface OpenStatusClient {
236 /**
237 * Monitor service namespace (v1).
238 */
239 monitor: {
240 v1: {
241 /**
242 * MonitorService provides CRUD and operational commands for monitors.
243 *
244 * Methods:
245 * - `createHTTPMonitor` - Create a new HTTP monitor
246 * - `createTCPMonitor` - Create a new TCP monitor
247 * - `createDNSMonitor` - Create a new DNS monitor
248 * - `updateHTTPMonitor` - Update an existing HTTP monitor
249 * - `updateTCPMonitor` - Update an existing TCP monitor
250 * - `updateDNSMonitor` - Update an existing DNS monitor
251 * - `listMonitors` - List all monitors
252 * - `triggerMonitor` - Trigger an immediate check
253 * - `deleteMonitor` - Delete a monitor
254 * - `getMonitorStatus` - Get status of all regions for a monitor
255 * - `getMonitorSummary` - Get aggregated metrics for a monitor
256 */
257 MonitorService: Client<typeof MonitorService>;
258 };
259 };
260 /**
261 * Health service namespace (v1).
262 */
263 health: {
264 v1: {
265 /**
266 * HealthService provides health check endpoints.
267 *
268 * Methods:
269 * - `check` - Check API health status
270 */
271 HealthService: Client<typeof HealthService>;
272 };
273 };
274 /**
275 * Status report service namespace (v1).
276 */
277 statusReport: {
278 v1: {
279 /**
280 * StatusReportService provides CRUD operations for status reports.
281 *
282 * Methods:
283 * - `createStatusReport` - Create a new status report
284 * - `getStatusReport` - Get a status report by ID
285 * - `listStatusReports` - List all status reports
286 * - `updateStatusReport` - Update a status report
287 * - `deleteStatusReport` - Delete a status report
288 * - `addStatusReportUpdate` - Add an update to a status report
289 */
290 StatusReportService: Client<typeof StatusReportService>;
291 };
292 };
293 /**
294 * Status page service namespace (v1).
295 */
296 statusPage: {
297 v1: {
298 /**
299 * StatusPageService provides CRUD and management operations for status pages.
300 *
301 * Methods:
302 * - `createStatusPage` - Create a new status page
303 * - `getStatusPage` - Get a status page by ID
304 * - `listStatusPages` - List all status pages
305 * - `updateStatusPage` - Update a status page
306 * - `deleteStatusPage` - Delete a status page
307 * - `addMonitorComponent` - Add a monitor-based component
308 * - `addStaticComponent` - Add a static component
309 * - `removeComponent` - Remove a component
310 * - `updateComponent` - Update a component
311 * - `createComponentGroup` - Create a component group
312 * - `deleteComponentGroup` - Delete a component group
313 * - `updateComponentGroup` - Update a component group
314 * - `subscribeToPage` - Subscribe an email to a status page
315 * - `unsubscribeFromPage` - Unsubscribe from a status page
316 * - `listSubscribers` - List all subscribers
317 * - `getStatusPageContent` - Get full status page content
318 * - `getOverallStatus` - Get aggregated status
319 */
320 StatusPageService: Client<typeof StatusPageService>;
321 };
322 };
323 /**
324 * Maintenance service namespace (v1).
325 */
326 maintenance: {
327 v1: {
328 /**
329 * MaintenanceService provides CRUD operations for maintenance windows.
330 *
331 * Methods:
332 * - `createMaintenance` - Create a new maintenance window
333 * - `getMaintenance` - Get a maintenance window by ID
334 * - `listMaintenances` - List all maintenance windows
335 * - `updateMaintenance` - Update a maintenance window
336 * - `deleteMaintenance` - Delete a maintenance window
337 */
338 MaintenanceService: Client<typeof MaintenanceService>;
339 };
340 };
341}
342
343/**
344 * OpenStatus SDK client.
345 *
346 * Provides access to the OpenStatus API for managing monitors and checking service health.
347 *
348 * @example
349 * ```typescript
350 * import { openstatus, Periodicity } from "@openstatus/sdk-node";
351 *
352 * // Check API health (no auth required)
353 * const { status } = await openstatus.health.v1.HealthService.check({});
354 *
355 * // Create a monitor (auth required)
356 * const headers = { "x-openstatus-key": `Bearer ${process.env.OPENSTATUS_API_KEY}` };
357 * const { monitor } = await openstatus.monitor.v1.MonitorService.createHTTPMonitor({
358 * monitor: {
359 * name: "My Website",
360 * url: "https://example.com",
361 * periodicity: Periodicity.PERIODICITY_1M,
362 * active: true,
363 * },
364 * }, { headers });
365 * ```
366 */
367export const openstatus: OpenStatusClient = {
368 monitor: {
369 v1: {
370 MonitorService: createClient(MonitorService, transport),
371 },
372 },
373 health: {
374 v1: {
375 HealthService: createClient(HealthService, transport),
376 },
377 },
378 statusReport: {
379 v1: {
380 StatusReportService: createClient(StatusReportService, transport),
381 },
382 },
383 statusPage: {
384 v1: {
385 StatusPageService: createClient(StatusPageService, transport),
386 },
387 },
388 maintenance: {
389 v1: {
390 MaintenanceService: createClient(MaintenanceService, transport),
391 },
392 },
393};