Openstatus sdk www.openstatus.dev
at notification 466 lines 14 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"; 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};