Openstatus sdk www.openstatus.dev
at status-page 350 lines 10 kB view raw
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};