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";
38
39// Re-export monitor types
40export type {
41 Headers,
42 HTTPMonitor,
43 OpenTelemetryConfig,
44} from "./gen/openstatus/monitor/v1/http_monitor_pb.ts";
45
46export type { TCPMonitor } from "./gen/openstatus/monitor/v1/tcp_monitor_pb.ts";
47
48export type { DNSMonitor } from "./gen/openstatus/monitor/v1/dns_monitor_pb.ts";
49
50// Re-export assertion types
51export type {
52 BodyAssertion,
53 HeaderAssertion,
54 RecordAssertion,
55 StatusCodeAssertion,
56} from "./gen/openstatus/monitor/v1/assertions_pb.ts";
57
58// Re-export assertion comparator enums
59export {
60 NumberComparator,
61 RecordComparator,
62 StringComparator,
63} from "./gen/openstatus/monitor/v1/assertions_pb.ts";
64
65// Re-export enums
66export { HTTPMethod } from "./gen/openstatus/monitor/v1/http_monitor_pb.ts";
67
68export { Periodicity, Region } from "./gen/openstatus/monitor/v1/monitor_pb.ts";
69
70export { MonitorStatus } from "./gen/openstatus/monitor/v1/monitor_pb.ts";
71
72// Re-export request/response types
73export type {
74 CreateDNSMonitorRequest,
75 CreateDNSMonitorResponse,
76 CreateHTTPMonitorRequest,
77 CreateHTTPMonitorResponse,
78 CreateTCPMonitorRequest,
79 CreateTCPMonitorResponse,
80 DeleteMonitorRequest,
81 DeleteMonitorResponse,
82 GetMonitorStatusRequest,
83 GetMonitorStatusResponse,
84 GetMonitorSummaryRequest,
85 GetMonitorSummaryResponse,
86 ListMonitorsRequest,
87 ListMonitorsResponse,
88 RegionStatus,
89 TriggerMonitorRequest,
90 TriggerMonitorResponse,
91 UpdateDNSMonitorRequest,
92 UpdateDNSMonitorResponse,
93 UpdateHTTPMonitorRequest,
94 UpdateHTTPMonitorResponse,
95 UpdateTCPMonitorRequest,
96 UpdateTCPMonitorResponse,
97} from "./gen/openstatus/monitor/v1/service_pb.ts";
98
99export { TimeRange } from "./gen/openstatus/monitor/v1/service_pb.ts";
100
101// Re-export health types
102export type {
103 CheckRequest,
104 CheckResponse,
105} from "./gen/openstatus/health/v1/health_pb.ts";
106
107export { CheckResponse_ServingStatus as ServingStatus } from "./gen/openstatus/health/v1/health_pb.ts";
108
109// Re-export status report types
110export type {
111 StatusReport,
112 StatusReportSummary,
113 StatusReportUpdate,
114} from "./gen/openstatus/status_report/v1/status_report_pb.ts";
115
116export { StatusReportStatus } from "./gen/openstatus/status_report/v1/status_report_pb.ts";
117
118// Re-export status report request/response types
119export type {
120 AddStatusReportUpdateRequest,
121 AddStatusReportUpdateResponse,
122 CreateStatusReportRequest,
123 CreateStatusReportResponse,
124 DeleteStatusReportRequest,
125 DeleteStatusReportResponse,
126 GetStatusReportRequest,
127 GetStatusReportResponse,
128 ListStatusReportsRequest,
129 ListStatusReportsResponse,
130 UpdateStatusReportRequest,
131 UpdateStatusReportResponse,
132} from "./gen/openstatus/status_report/v1/service_pb.ts";
133
134// Re-export status page types
135export type {
136 Maintenance,
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/**
198 * Default OpenStatus API URL.
199 */
200const DEFAULT_API_URL = "https://api.openstatus.dev/rpc";
201
202/**
203 * Creates a Connect RPC transport configured for the OpenStatus API.
204 */
205const transport = createConnectTransport({
206 baseUrl: process.env.OPENSTATUS_API_URL ?? DEFAULT_API_URL,
207 httpVersion: "2",
208});
209
210/**
211 * OpenStatus API client interface.
212 *
213 * Provides access to Monitor and Health services.
214 */
215export interface OpenStatusClient {
216 /**
217 * Monitor service namespace (v1).
218 */
219 monitor: {
220 v1: {
221 /**
222 * MonitorService provides CRUD and operational commands for monitors.
223 *
224 * Methods:
225 * - `createHTTPMonitor` - Create a new HTTP monitor
226 * - `createTCPMonitor` - Create a new TCP monitor
227 * - `createDNSMonitor` - Create a new DNS monitor
228 * - `updateHTTPMonitor` - Update an existing HTTP monitor
229 * - `updateTCPMonitor` - Update an existing TCP monitor
230 * - `updateDNSMonitor` - Update an existing DNS monitor
231 * - `listMonitors` - List all monitors
232 * - `triggerMonitor` - Trigger an immediate check
233 * - `deleteMonitor` - Delete a monitor
234 * - `getMonitorStatus` - Get status of all regions for a monitor
235 * - `getMonitorSummary` - Get aggregated metrics for a monitor
236 */
237 MonitorService: Client<typeof MonitorService>;
238 };
239 };
240 /**
241 * Health service namespace (v1).
242 */
243 health: {
244 v1: {
245 /**
246 * HealthService provides health check endpoints.
247 *
248 * Methods:
249 * - `check` - Check API health status
250 */
251 HealthService: Client<typeof HealthService>;
252 };
253 };
254 /**
255 * Status report service namespace (v1).
256 */
257 statusReport: {
258 v1: {
259 /**
260 * StatusReportService provides CRUD operations for status reports.
261 *
262 * Methods:
263 * - `createStatusReport` - Create a new status report
264 * - `getStatusReport` - Get a status report by ID
265 * - `listStatusReports` - List all status reports
266 * - `updateStatusReport` - Update a status report
267 * - `deleteStatusReport` - Delete a status report
268 * - `addStatusReportUpdate` - Add an update to a status report
269 */
270 StatusReportService: Client<typeof StatusReportService>;
271 };
272 };
273 /**
274 * Status page service namespace (v1).
275 */
276 statusPage: {
277 v1: {
278 /**
279 * StatusPageService provides CRUD and management operations for status pages.
280 *
281 * Methods:
282 * - `createStatusPage` - Create a new status page
283 * - `getStatusPage` - Get a status page by ID
284 * - `listStatusPages` - List all status pages
285 * - `updateStatusPage` - Update a status page
286 * - `deleteStatusPage` - Delete a status page
287 * - `addMonitorComponent` - Add a monitor-based component
288 * - `addStaticComponent` - Add a static component
289 * - `removeComponent` - Remove a component
290 * - `updateComponent` - Update a component
291 * - `createComponentGroup` - Create a component group
292 * - `deleteComponentGroup` - Delete a component group
293 * - `updateComponentGroup` - Update a component group
294 * - `subscribeToPage` - Subscribe an email to a status page
295 * - `unsubscribeFromPage` - Unsubscribe from a status page
296 * - `listSubscribers` - List all subscribers
297 * - `getStatusPageContent` - Get full status page content
298 * - `getOverallStatus` - Get aggregated status
299 */
300 StatusPageService: Client<typeof StatusPageService>;
301 };
302 };
303}
304
305/**
306 * OpenStatus SDK client.
307 *
308 * Provides access to the OpenStatus API for managing monitors and checking service health.
309 *
310 * @example
311 * ```typescript
312 * import { openstatus, Periodicity } from "@openstatus/sdk-node";
313 *
314 * // Check API health (no auth required)
315 * const { status } = await openstatus.health.v1.HealthService.check({});
316 *
317 * // Create a monitor (auth required)
318 * const headers = { "x-openstatus-key": `Bearer ${process.env.OPENSTATUS_API_KEY}` };
319 * const { monitor } = await openstatus.monitor.v1.MonitorService.createHTTPMonitor({
320 * monitor: {
321 * name: "My Website",
322 * url: "https://example.com",
323 * periodicity: Periodicity.PERIODICITY_1M,
324 * active: true,
325 * },
326 * }, { headers });
327 * ```
328 */
329export const openstatus: OpenStatusClient = {
330 monitor: {
331 v1: {
332 MonitorService: createClient(MonitorService, transport),
333 },
334 },
335 health: {
336 v1: {
337 HealthService: createClient(HealthService, transport),
338 },
339 },
340 statusReport: {
341 v1: {
342 StatusReportService: createClient(StatusReportService, transport),
343 },
344 },
345 statusPage: {
346 v1: {
347 StatusPageService: createClient(StatusPageService, transport),
348 },
349 },
350};