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