From 67ee96a0745973ef6662ec1e17341dcffbc37b20 Mon Sep 17 00:00:00 2001 From: Thibault Le Ouay Date: Mon, 26 Jan 2026 22:07:28 +0100 Subject: [PATCH] 0.0.1 (#1) * small improvment * more improvment * improve sdk * improve sdk * typo readme --- .gitignore | 1 + LICENSE | 21 + README.md | 412 ++++++++++++++++++ deno.json | 25 +- deno.lock | 52 ++- example.ts | 54 ++- scripts/build_npm.ts | 31 ++ .../openstatus/monitor/v1/dns_monitor_pb.ts | 20 +- .../openstatus/monitor/v1/http_monitor_pb.ts | 83 +--- src/gen/openstatus/monitor/v1/monitor_pb.ts | 339 +++++++++++--- src/gen/openstatus/monitor/v1/service_pb.ts | 344 ++++++++++++++- .../openstatus/monitor/v1/tcp_monitor_pb.ts | 25 +- src/mod.ts | 175 +++++++- 13 files changed, 1424 insertions(+), 158 deletions(-) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 scripts/build_npm.ts diff --git a/.gitignore b/.gitignore index 4c49bd7..7e97497 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .env +npm diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c665f86 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Openstatus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..13886c3 --- /dev/null +++ b/README.md @@ -0,0 +1,412 @@ +# OpenStatus Node.js SDK + +[![JSR](https://jsr.io/badges/@openstatus/sdk-node)](https://jsr.io/@openstatus/sdk-node) +[![npm](https://img.shields.io/npm/v/@openstatushq/sdk-node)](https://www.npmjs.com/package/@openstatushq/sdk-node) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + +Official Node.js SDK for [OpenStatus](https://openstatus.dev) - the open-source +monitoring platform. + +## Features + +- **HTTP Monitoring** - Monitor websites and APIs with customizable assertions +- **TCP Monitoring** - Check database connections and other TCP services +- **DNS Monitoring** - Verify DNS records and resolution +- **Global Regions** - Monitor from 28 locations worldwide +- **Type-safe** - Full TypeScript support with generated types + +## Installation + +### JSR + +```bash +npx jsr add @openstatus/node-sdk +``` + +### npm + +```bash +npm install @openstatus/node-sdk +``` + +### Deno + +```typescript +import { openstatus } from "jsr:@openstatus/node-sdk"; +``` + +## Quick Start + +```typescript +import { openstatus } from "@openstatus/node-sdk"; + +const headers = { + "x-openstatus-key": `Bearer ${process.env.OPENSTATUS_API_KEY}`, +}; + +// Create a monitor +const monitor = await openstatus.monitor.v1.MonitorService.createHTTPMonitor( + { + name: "My API", + url: "https://api.example.com/health", + periodicity: "1m", + method: "GET", + regions: ["ams", "iad", "syd"], + active: true, + statusCodeAssertions: [{ comparator: "EQUAL", target: 200 }], + }, + { headers }, +); + +console.log(`Monitor created: ${monitor.monitor?.id}`); + +// List all monitors +const { httpMonitors, tcpMonitors, dnsMonitors, totalSize } = + await openstatus.monitor.v1.MonitorService.listMonitors({}, { headers }); + +console.log(`Found ${totalSize} monitors`); +``` + +## Authentication + +All API requests require an API key. Get yours from the +[OpenStatus dashboard](https://www.openstatus.dev/app). + +```typescript +const headers = { + "x-openstatus-key": `Bearer ${process.env.OPENSTATUS_API_KEY}`, +}; + +// Pass headers to any service method +await openstatus.monitor.v1.MonitorService.listMonitors({}, { headers }); +``` + +## Environment Variables + +| Variable | Description | Default | +| -------------------- | ----------------------- | -------------------------------- | +| `OPENSTATUS_API_KEY` | Your OpenStatus API key | - | +| `OPENSTATUS_API_URL` | Custom API endpoint | `https://api.openstatus.dev/rpc` | + +## API Reference + +### Monitor Service + +#### `createHTTPMonitor(request, options)` + +Create an HTTP/HTTPS monitor. + +```typescript +const { monitor } = await openstatus.monitor.v1.MonitorService + .createHTTPMonitor( + { + name: "My Website", + url: "https://example.com", + periodicity: "1m", + method: "GET", + regions: ["ams", "iad", "syd"], + active: true, + }, + { headers }, + ); +``` + +#### `createTCPMonitor(request, options)` + +Create a TCP connection monitor. + +```typescript +const { monitor } = await openstatus.monitor.v1.MonitorService.createTCPMonitor( + { + name: "Database", + uri: "db.example.com:5432", + periodicity: "5m", + regions: ["ams", "iad"], + active: true, + }, + { headers }, +); +``` + +#### `createDNSMonitor(request, options)` + +Create a DNS resolution monitor. + +```typescript +const { monitor } = await openstatus.monitor.v1.MonitorService.createDNSMonitor( + { + name: "DNS Check", + uri: "example.com", + periodicity: "10m", + regions: ["ams"], + active: true, + recordAssertions: [{ + recordType: "A", + comparator: "EQUAL", + target: "93.184.216.34", + }], + }, + { headers }, +); +``` + +#### `listMonitors(request, options)` + +List all monitors with pagination. Returns monitors grouped by type. + +```typescript +const { httpMonitors, tcpMonitors, dnsMonitors, nextPageToken, totalSize } = + await openstatus.monitor.v1.MonitorService.listMonitors( + { pageSize: 10, pageToken: "" }, + { headers }, + ); +``` + +#### `triggerMonitor(request, options)` + +Trigger an immediate check. + +```typescript +await openstatus.monitor.v1.MonitorService.triggerMonitor( + { id: "mon_123" }, + { headers }, +); +``` + +#### `deleteMonitor(request, options)` + +Delete a monitor. + +```typescript +await openstatus.monitor.v1.MonitorService.deleteMonitor( + { id: "mon_123" }, + { headers }, +); +``` + +#### `getMonitorStatus(request, options)` + +Get the current status of a monitor across all configured regions. + +```typescript +const { id, regions } = + await openstatus.monitor.v1.MonitorService.getMonitorStatus( + { id: "mon_123" }, + { headers }, + ); + +// regions is an array of { region, status } +// status: ACTIVE, DEGRADED, or ERROR +for (const { region, status } of regions) { + console.log(`${region}: ${status}`); +} +``` + +#### `getMonitorSummary(request, options)` + +Get aggregated metrics and latency percentiles for a monitor. + +```typescript +import { TimeRange } from "@openstatus/node-sdk"; + +const summary = await openstatus.monitor.v1.MonitorService.getMonitorSummary( + { + id: "mon_123", + timeRange: TimeRange.TIME_RANGE_7D, // 1D, 7D, or 14D + regions: [], // optional: filter by specific regions + }, + { headers }, +); + +console.log(`Last ping: ${summary.lastPingAt}`); +console.log(`Success: ${summary.totalSuccessful}`); +console.log(`Degraded: ${summary.totalDegraded}`); +console.log(`Failed: ${summary.totalFailed}`); +console.log(`P50 latency: ${summary.p50}ms`); +console.log(`P95 latency: ${summary.p95}ms`); +console.log(`P99 latency: ${summary.p99}ms`); +``` + +### Health Service + +Check API health status (no authentication required). + +```typescript +const { status } = await openstatus.health.v1.HealthService.check({}); +console.log(status); // "SERVING" +``` + +## Monitor Options + +### HTTP Monitor + +| Option | Type | Required | Description | +| ---------------------- | -------- | -------- | ------------------------------------------------- | +| `name` | string | Yes | Monitor name (max 256 chars) | +| `url` | string | Yes | URL to monitor | +| `periodicity` | string | No | `30s`, `1m`, `5m`, `10m`, `30m`, `1h` | +| `method` | string | No | `GET`, `POST`, `HEAD`, `PUT`, `PATCH`, `DELETE` | +| `body` | string | No | Request body | +| `headers` | object | No | Custom headers | +| `timeout` | number | No | Timeout in ms (default: 45000, max: 120000) | +| `retry` | number | No | Retry attempts (default: 3, max: 10) | +| `followRedirects` | boolean | No | Follow redirects (default: true) | +| `regions` | string[] | No | [Regions](#regions) for checks | +| `active` | boolean | No | Enable monitoring (default: false) | +| `public` | boolean | No | Public visibility (default: false) | +| `degradedAt` | number | No | Latency threshold (ms) for degraded status | +| `statusCodeAssertions` | array | No | [Status code assertions](#status-code-assertions) | +| `bodyAssertions` | array | No | [Body assertions](#body-assertions) | +| `headerAssertions` | array | No | [Header assertions](#header-assertions) | + +### TCP Monitor + +| Option | Type | Required | Description | +| ------------- | -------- | -------- | ------------------------------ | +| `name` | string | Yes | Monitor name | +| `uri` | string | Yes | `host:port` to monitor | +| `periodicity` | string | No | Check interval | +| `timeout` | number | No | Timeout in ms (default: 45000) | +| `retry` | number | No | Retry attempts (default: 3) | +| `regions` | string[] | No | [Regions](#regions) for checks | +| `active` | boolean | No | Enable monitoring | + +### DNS Monitor + +| Option | Type | Required | Description | +| ------------------ | -------- | -------- | ----------------------------------------------- | +| `name` | string | Yes | Monitor name | +| `uri` | string | Yes | Domain to resolve | +| `periodicity` | string | No | Check interval | +| `timeout` | number | No | Timeout in ms (default: 45000) | +| `retry` | number | No | Retry attempts (default: 3) | +| `regions` | string[] | No | [Regions](#regions) for checks | +| `recordAssertions` | array | No | [DNS record assertions](#dns-record-assertions) | + +## Assertions + +### Status Code Assertions + +Validate HTTP response status codes. + +```typescript +{ + statusCodeAssertions: [ + { comparator: "EQUAL", target: 200 }, + { comparator: "LESS_THAN", target: 400 }, + ]; +} +``` + +**Comparators:** `EQUAL`, `NOT_EQUAL`, `GREATER_THAN`, `GREATER_THAN_OR_EQUAL`, +`LESS_THAN`, `LESS_THAN_OR_EQUAL` + +### Body Assertions + +Validate response body content. + +```typescript +{ + bodyAssertions: [ + { comparator: "CONTAINS", target: '"status":"ok"' }, + { comparator: "NOT_EMPTY" }, + ]; +} +``` + +**Comparators:** `CONTAINS`, `NOT_CONTAINS`, `EQUAL`, `NOT_EQUAL`, `EMPTY`, +`NOT_EMPTY` + +### Header Assertions + +Validate response headers. + +```typescript +{ + headerAssertions: [ + { key: "content-type", comparator: "CONTAINS", target: "application/json" }, + ]; +} +``` + +### DNS Record Assertions + +Validate DNS records. + +```typescript +{ + recordAssertions: [ + { recordType: "A", comparator: "EQUAL", target: "93.184.216.34" }, + { recordType: "CNAME", comparator: "CONTAINS", target: "cdn" }, + ]; +} +``` + +**Record types:** `A`, `AAAA`, `CNAME`, `MX`, `TXT` + +## Regions + +Monitor from 28 global locations across multiple providers: + +### Fly.io Regions + +| Code | Location | Code | Location | +| ----- | --------------- | ----- | ------------ | +| `ams` | Amsterdam | `lax` | Los Angeles | +| `arn` | Stockholm | `lhr` | London | +| `bom` | Mumbai | `nrt` | Tokyo | +| `cdg` | Paris | `ord` | Chicago | +| `dfw` | Dallas | `sjc` | San Jose | +| `ewr` | Newark | `sin` | Singapore | +| `fra` | Frankfurt | `syd` | Sydney | +| `gru` | São Paulo | `yyz` | Toronto | +| `iad` | Washington D.C. | `jnb` | Johannesburg | + +### Koyeb Regions + +| Code | Location | +| ----------- | ------------- | +| `koyeb_fra` | Frankfurt | +| `koyeb_par` | Paris | +| `koyeb_sfo` | San Francisco | +| `koyeb_sin` | Singapore | +| `koyeb_tyo` | Tokyo | +| `koyeb_was` | Washington | + +### Railway Regions + +| Code | Location | +| ----------------------- | -------------- | +| `railway_us_west2` | US West | +| `railway_us_east4` | US East | +| `railway_europe_west4` | Europe West | +| `railway_asia_southeast1` | Asia Southeast | + +## Error Handling + +The SDK uses Connect RPC. Errors include a `code` and `message`: + +```typescript +import { ConnectError } from "@connectrpc/connect"; + +try { + await openstatus.monitor.v1.MonitorService.deleteMonitor( + { id: "invalid" }, + { headers }, + ); +} catch (error) { + if (error instanceof ConnectError) { + console.error(`Error ${error.code}: ${error.message}`); + } +} +``` + +## Related + +- [OpenStatus](https://openstatus.dev) - Open-source monitoring platform +- [Documentation](https://docs.openstatus.dev) - Full API documentation +- [Status Page](https://status.openstatus.dev) - OpenStatus service status + +## License + +MIT diff --git a/deno.json b/deno.json index 419cbc3..db661b1 100644 --- a/deno.json +++ b/deno.json @@ -1,17 +1,32 @@ { - "tasks": { - "dev": "deno run --env-file --allow-env --allow-net --watch example.ts", - "generate": "buf generate buf.build/openstatus/api" - }, + "name": "@openstatus/sdk-node", + "version": "0.0.1", + "description": "SDK for openstatus", + "license": "MIT", "exports": { ".": "./src/mod.ts" }, + "publish": { + "include": ["src/**/*.ts", "README.md", "LICENSE"], + "exclude": ["**/*_test.ts", "**/*.test.ts"] + }, + "tasks": { + "dev": "deno run --env-file --allow-env --allow-net --watch example.ts", + "generate": "buf generate buf.build/openstatus/api", + "check": "deno check src/mod.ts", + "lint": "deno lint", + "fmt": "deno fmt" + }, "imports": { "@bufbuild/buf": "npm:@bufbuild/buf@^1.64.0", "@bufbuild/protobuf": "npm:@bufbuild/protobuf@^2.11.0", "@bufbuild/protoc-gen-es": "npm:@bufbuild/protoc-gen-es@^2.11.0", "@connectrpc/connect": "npm:@connectrpc/connect@^2.1.1", "@connectrpc/connect-node": "npm:@connectrpc/connect-node@^2.1.1", - "@std/assert": "jsr:@std/assert@1" + "@deno/dnt": "jsr:@deno/dnt@^0.42.3" + }, + "compilerOptions": { + "strict": true, + "noImplicitAny": true } } diff --git a/deno.lock b/deno.lock index f9a844d..488c94a 100644 --- a/deno.lock +++ b/deno.lock @@ -1,8 +1,15 @@ { "version": "5", "specifiers": { - "jsr:@std/assert@1": "1.0.17", + "jsr:@david/code-block-writer@^13.0.3": "13.0.3", + "jsr:@deno/dnt@~0.42.3": "0.42.3", + "jsr:@std/fmt@1": "1.0.8", + "jsr:@std/fs@1": "1.0.16", "jsr:@std/internal@^1.0.12": "1.0.12", + "jsr:@std/path@1": "1.1.4", + "jsr:@std/path@^1.0.8": "1.1.4", + "jsr:@ts-morph/bootstrap@0.27": "0.27.0", + "jsr:@ts-morph/common@0.27": "0.27.0", "npm:@bufbuild/buf@^1.64.0": "1.64.0", "npm:@bufbuild/protobuf@^2.11.0": "2.11.0", "npm:@bufbuild/protoc-gen-es@^2.11.0": "2.11.0_@bufbuild+protobuf@2.11.0", @@ -10,14 +17,49 @@ "npm:@connectrpc/connect@^2.1.1": "2.1.1_@bufbuild+protobuf@2.11.0" }, "jsr": { - "@std/assert@1.0.17": { - "integrity": "df5ebfffe77c03b3fa1401e11c762cc8f603d51021c56c4d15a8c7ab45e90dbe", + "@david/code-block-writer@13.0.3": { + "integrity": "f98c77d320f5957899a61bfb7a9bead7c6d83ad1515daee92dbacc861e13bb7f" + }, + "@deno/dnt@0.42.3": { + "integrity": "62a917a0492f3c8af002dce90605bb0d41f7d29debc06aca40dba72ab65d8ae3", "dependencies": [ - "jsr:@std/internal" + "jsr:@david/code-block-writer", + "jsr:@std/fmt", + "jsr:@std/fs", + "jsr:@std/path@1", + "jsr:@ts-morph/bootstrap" + ] + }, + "@std/fmt@1.0.8": { + "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" + }, + "@std/fs@1.0.16": { + "integrity": "81878f62b6eeda0bf546197fc3daa5327c132fee1273f6113f940784a468b036", + "dependencies": [ + "jsr:@std/path@^1.0.8" ] }, "@std/internal@1.0.12": { "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" + }, + "@std/path@1.1.4": { + "integrity": "1d2d43f39efb1b42f0b1882a25486647cb851481862dc7313390b2bb044314b5", + "dependencies": [ + "jsr:@std/internal" + ] + }, + "@ts-morph/bootstrap@0.27.0": { + "integrity": "b8d7bc8f7942ce853dde4161b28f9aa96769cef3d8eebafb379a81800b9e2448", + "dependencies": [ + "jsr:@ts-morph/common" + ] + }, + "@ts-morph/common@0.27.0": { + "integrity": "c7b73592d78ce8479b356fd4f3d6ec3c460d77753a8680ff196effea7a939052", + "dependencies": [ + "jsr:@std/fs", + "jsr:@std/path@1" + ] } }, "npm": { @@ -128,7 +170,7 @@ }, "workspace": { "dependencies": [ - "jsr:@std/assert@1", + "jsr:@deno/dnt@~0.42.3", "npm:@bufbuild/buf@^1.64.0", "npm:@bufbuild/protobuf@^2.11.0", "npm:@bufbuild/protoc-gen-es@^2.11.0", diff --git a/example.ts b/example.ts index 95f77d6..f6255bd 100644 --- a/example.ts +++ b/example.ts @@ -1,12 +1,50 @@ -import { openstatus } from "./src/mod.ts"; +/** + * Example usage of the OpenStatus Node.js SDK. + * + * Run with: deno task dev + */ +import { type HTTPMonitor, openstatus } from "./src/mod.ts"; -console.log("OpenStatus SDK Node.js"); -const heatlh = await openstatus.health.v1.HealthService.check({}); +async function main(): Promise { + console.log("OpenStatus SDK Example\n"); -console.log("Health status:", heatlh.status); + // 1. Health check (no authentication required) + console.log("1. Checking API health..."); + const health = await openstatus.health.v1.HealthService.check({}); + console.log(` Status: ${health.status}\n`); -const monitors = await openstatus.monitor.v1.MonitorService.listMonitors({}, { - headers: { "x-openstatus-key": `Bearer ${process.env.OPENSTATUS_API_KEY}` }, -}); + // 2. List monitors (requires authentication) + const apiKey = process.env.OPENSTATUS_API_KEY; + if (!apiKey) { + console.log("2. Skipping monitor operations (OPENSTATUS_API_KEY not set)"); + console.log( + " Set OPENSTATUS_API_KEY environment variable to test monitor operations.", + ); + return; + } -console.log("Monitors:", monitors); + const headers = { "x-openstatus-key": `${apiKey}` }; + + console.log("2. Listing monitors..."); + const { httpMonitors, tcpMonitors, dnsMonitors, totalSize } = await openstatus + .monitor.v1.MonitorService.listMonitors({}, { headers }); + + console.log(` Found ${totalSize} monitors:`); + console.log(` - HTTP: ${httpMonitors.length}`); + console.log(` - TCP: ${tcpMonitors.length}`); + console.log(` - DNS: ${dnsMonitors.length}`); + + // 3. Display HTTP monitors + if (httpMonitors.length > 0) { + console.log("\n3. HTTP Monitors:"); + httpMonitors.forEach((monitor: HTTPMonitor) => { + console.log( + ` - ${monitor.name}: ${monitor.url} (${ + monitor.active ? "active" : "paused" + })`, + ); + }); + } +} + +main().catch(console.error); diff --git a/scripts/build_npm.ts b/scripts/build_npm.ts new file mode 100644 index 0000000..022504e --- /dev/null +++ b/scripts/build_npm.ts @@ -0,0 +1,31 @@ +import { build, emptyDir } from "@deno/dnt"; + +await emptyDir("./npm"); + +await build({ + entryPoints: ["./src/mod.ts"], + outDir: "./npm", + shims: { + // see JS docs for overview and more options + deno: true, + }, + package: { + // package.json properties + name: "@openstatus/sdk-node", + version: Deno.args[0], + description: "SDK for openstatus.", + license: "MIT", + repository: { + type: "git", + url: "git+https://github.com/openstatushq/sdk-node.git", + }, + bugs: { + url: "https://github.com/openstatushq/sdk-nod/issues", + }, + }, + postBuild() { + // steps to run after building and before running the tests + Deno.copyFileSync("LICENSE", "npm/LICENSE"); + Deno.copyFileSync("README.md", "npm/README.md"); + }, +}); diff --git a/src/gen/openstatus/monitor/v1/dns_monitor_pb.ts b/src/gen/openstatus/monitor/v1/dns_monitor_pb.ts index 04f9a0c..358c79a 100644 --- a/src/gen/openstatus/monitor/v1/dns_monitor_pb.ts +++ b/src/gen/openstatus/monitor/v1/dns_monitor_pb.ts @@ -9,6 +9,8 @@ import type { RecordAssertion } from "./assertions_pb.ts"; import { file_openstatus_monitor_v1_assertions } from "./assertions_pb.ts"; import type { OpenTelemetryConfig } from "./http_monitor_pb.ts"; import { file_openstatus_monitor_v1_http_monitor } from "./http_monitor_pb.ts"; +import type { MonitorStatus, Periodicity, Region } from "./monitor_pb.ts"; +import { file_openstatus_monitor_v1_monitor } from "./monitor_pb.ts"; import type { Message } from "@bufbuild/protobuf"; /** @@ -16,11 +18,12 @@ import type { Message } from "@bufbuild/protobuf"; */ export const file_openstatus_monitor_v1_dns_monitor: GenFile = /*@__PURE__*/ fileDesc( - "CidvcGVuc3RhdHVzL21vbml0b3IvdjEvZG5zX21vbml0b3IucHJvdG8SFW9wZW5zdGF0dXMubW9uaXRvci52MSLrBQoKRE5TTW9uaXRvchIKCgJpZBgBIAEoCRIYCgRuYW1lGAIgASgJQgq6SAdyBRABGIACEhcKA3VyaRgDIAEoCUIKukgHcgUQARiAEBI1CgtwZXJpb2RpY2l0eRgEIAEoCUIgukgdchtSAzMwc1ICMW1SAjVtUgMxMG1SAzMwbVICMWgSHAoHdGltZW91dBgFIAEoA0ILukgIIgYYwKkHKAASJQoLZGVncmFkZWRfYXQYBiABKANCC7pICCIGGMCpBygASACIAQESGAoFcmV0cnkYByABKANCCbpIBiIEGAooABJLChFyZWNvcmRfYXNzZXJ0aW9ucxgIIAMoCzImLm9wZW5zdGF0dXMubW9uaXRvci52MS5SZWNvcmRBc3NlcnRpb25CCLpIBZIBAhAKEh0KC2Rlc2NyaXB0aW9uGAkgASgJQgi6SAVyAxiACBIOCgZhY3RpdmUYCiABKAgSDgoGcHVibGljGAsgASgIEqcCCgdyZWdpb25zGAwgAygJQpUCukiRApIBjQIQHCKIAnKFAlIDYW1zUgNhcm5SA2JvbVIDY2RnUgNkZndSA2V3clIDZnJhUgNncnVSA2lhZFIDam5iUgNsYXhSA2xoclIDbnJ0UgNvcmRSA3NqY1IDc2luUgNzeWRSA3l5elIJa295ZWJfZnJhUglrb3llYl9wYXJSCWtveWViX3Nmb1IJa295ZWJfc2luUglrb3llYl90eW9SCWtveWViX3dhc1IQcmFpbHdheV91cy13ZXN0MlIXcmFpbHdheV91cy1lYXN0NC1lcWRjNGFSHHJhaWx3YXlfZXVyb3BlLXdlc3Q0LWRyYW1zM2FSHnJhaWx3YXlfYXNpYS1zb3V0aGVhc3QxLWVxc2czYRJCCg5vcGVuX3RlbGVtZXRyeRgNIAEoCzIqLm9wZW5zdGF0dXMubW9uaXRvci52MS5PcGVuVGVsZW1ldHJ5Q29uZmlnQg4KDF9kZWdyYWRlZF9hdEJTWlFnaXRodWIuY29tL29wZW5zdGF0dXNocS9vcGVuc3RhdHVzL3BhY2thZ2VzL3Byb3RvL29wZW5zdGF0dXMvbW9uaXRvci92MTttb25pdG9ydjFiBnByb3RvMw", + "CidvcGVuc3RhdHVzL21vbml0b3IvdjEvZG5zX21vbml0b3IucHJvdG8SFW9wZW5zdGF0dXMubW9uaXRvci52MSLEBAoKRE5TTW9uaXRvchIKCgJpZBgBIAEoCRIYCgRuYW1lGAIgASgJQgq6SAdyBRABGIACEhcKA3VyaRgDIAEoCUIKukgHcgUQARiAEBJBCgtwZXJpb2RpY2l0eRgEIAEoDjIiLm9wZW5zdGF0dXMubW9uaXRvci52MS5QZXJpb2RpY2l0eUIIukgFggECIAASHAoHdGltZW91dBgFIAEoA0ILukgIIgYYwKkHKAASJQoLZGVncmFkZWRfYXQYBiABKANCC7pICCIGGMCpBygASACIAQESGAoFcmV0cnkYByABKANCCbpIBiIEGAooABJLChFyZWNvcmRfYXNzZXJ0aW9ucxgIIAMoCzImLm9wZW5zdGF0dXMubW9uaXRvci52MS5SZWNvcmRBc3NlcnRpb25CCLpIBZIBAhAKEh0KC2Rlc2NyaXB0aW9uGAkgASgJQgi6SAVyAxiACBIOCgZhY3RpdmUYCiABKAgSDgoGcHVibGljGAsgASgIEj8KB3JlZ2lvbnMYDCADKA4yHS5vcGVuc3RhdHVzLm1vbml0b3IudjEuUmVnaW9uQg+6SAySAQkQHCIFggECIAASQgoOb3Blbl90ZWxlbWV0cnkYDSABKAsyKi5vcGVuc3RhdHVzLm1vbml0b3IudjEuT3BlblRlbGVtZXRyeUNvbmZpZxI0CgZzdGF0dXMYDiABKA4yJC5vcGVuc3RhdHVzLm1vbml0b3IudjEuTW9uaXRvclN0YXR1c0IOCgxfZGVncmFkZWRfYXRCU1pRZ2l0aHViLmNvbS9vcGVuc3RhdHVzaHEvb3BlbnN0YXR1cy9wYWNrYWdlcy9wcm90by9vcGVuc3RhdHVzL21vbml0b3IvdjE7bW9uaXRvcnYxYgZwcm90bzM", [ file_buf_validate_validate, file_openstatus_monitor_v1_assertions, file_openstatus_monitor_v1_http_monitor, + file_openstatus_monitor_v1_monitor, ], ); @@ -54,9 +57,9 @@ export type DNSMonitor = Message<"openstatus.monitor.v1.DNSMonitor"> & { /** * Check periodicity (required). * - * @generated from field: string periodicity = 4; + * @generated from field: openstatus.monitor.v1.Periodicity periodicity = 4; */ - periodicity: string; + periodicity: Periodicity; /** * Timeout in milliseconds (0-120000, defaults to 45000). @@ -110,9 +113,9 @@ export type DNSMonitor = Message<"openstatus.monitor.v1.DNSMonitor"> & { /** * Geographic regions to run checks from. * - * @generated from field: repeated string regions = 12; + * @generated from field: repeated openstatus.monitor.v1.Region regions = 12; */ - regions: string[]; + regions: Region[]; /** * OpenTelemetry configuration for exporting metrics. @@ -120,6 +123,13 @@ export type DNSMonitor = Message<"openstatus.monitor.v1.DNSMonitor"> & { * @generated from field: openstatus.monitor.v1.OpenTelemetryConfig open_telemetry = 13; */ openTelemetry?: OpenTelemetryConfig; + + /** + * Current operational status of the monitor. + * + * @generated from field: openstatus.monitor.v1.MonitorStatus status = 14; + */ + status: MonitorStatus; }; /** diff --git a/src/gen/openstatus/monitor/v1/http_monitor_pb.ts b/src/gen/openstatus/monitor/v1/http_monitor_pb.ts index d27d18b..d18c388 100644 --- a/src/gen/openstatus/monitor/v1/http_monitor_pb.ts +++ b/src/gen/openstatus/monitor/v1/http_monitor_pb.ts @@ -15,6 +15,8 @@ import type { StatusCodeAssertion, } from "./assertions_pb.ts"; import { file_openstatus_monitor_v1_assertions } from "./assertions_pb.ts"; +import type { MonitorStatus, Periodicity, Region } from "./monitor_pb.ts"; +import { file_openstatus_monitor_v1_monitor } from "./monitor_pb.ts"; import type { Message } from "@bufbuild/protobuf"; /** @@ -22,8 +24,12 @@ import type { Message } from "@bufbuild/protobuf"; */ export const file_openstatus_monitor_v1_http_monitor: GenFile = /*@__PURE__*/ fileDesc( - "CihvcGVuc3RhdHVzL21vbml0b3IvdjEvaHR0cF9tb25pdG9yLnByb3RvEhVvcGVuc3RhdHVzLm1vbml0b3IudjEiLgoHSGVhZGVycxIUCgNrZXkYASABKAlCB7pIBHICEAESDQoFdmFsdWUYAiABKAkibAoTT3BlblRlbGVtZXRyeUNvbmZpZxIaCghlbmRwb2ludBgBIAEoCUIIukgFcgMYgBASOQoHaGVhZGVycxgCIAMoCzIeLm9wZW5zdGF0dXMubW9uaXRvci52MS5IZWFkZXJzQgi6SAWSAQIQFCLICAoLSFRUUE1vbml0b3ISCgoCaWQYASABKAkSGAoEbmFtZRgCIAEoCUIKukgHcgUQARiAAhIaCgN1cmwYAyABKAlCDbpICnIIEAEYgBCIAQESNQoLcGVyaW9kaWNpdHkYBCABKAlCILpIHXIbUgMzMHNSAjFtUgI1bVIDMTBtUgMzMG1SAjFoElUKBm1ldGhvZBgFIAEoCUJFukhCckBSAFIDR0VUUgRQT1NUUgRIRUFEUgNQVVRSBVBBVENIUgZERUxFVEVSBVRSQUNFUgdDT05ORUNUUgdPUFRJT05TEgwKBGJvZHkYBiABKAkSHAoHdGltZW91dBgHIAEoA0ILukgIIgYYwKkHKAASJQoLZGVncmFkZWRfYXQYCCABKANCC7pICCIGGMCpBygASACIAQESGAoFcmV0cnkYCSABKANCCbpIBiIEGAooABIYChBmb2xsb3dfcmVkaXJlY3RzGAogASgIEjkKB2hlYWRlcnMYCyADKAsyHi5vcGVuc3RhdHVzLm1vbml0b3IudjEuSGVhZGVyc0IIukgFkgECEBQSVAoWc3RhdHVzX2NvZGVfYXNzZXJ0aW9ucxgMIAMoCzIqLm9wZW5zdGF0dXMubW9uaXRvci52MS5TdGF0dXNDb2RlQXNzZXJ0aW9uQgi6SAWSAQIQChJHCg9ib2R5X2Fzc2VydGlvbnMYDSADKAsyJC5vcGVuc3RhdHVzLm1vbml0b3IudjEuQm9keUFzc2VydGlvbkIIukgFkgECEAoSSwoRaGVhZGVyX2Fzc2VydGlvbnMYDiADKAsyJi5vcGVuc3RhdHVzLm1vbml0b3IudjEuSGVhZGVyQXNzZXJ0aW9uQgi6SAWSAQIQChIdCgtkZXNjcmlwdGlvbhgPIAEoCUIIukgFcgMYgAgSDgoGYWN0aXZlGBAgASgIEg4KBnB1YmxpYxgRIAEoCBKnAgoHcmVnaW9ucxgSIAMoCUKVArpIkQKSAY0CEBwiiAJyhQJSA2Ftc1IDYXJuUgNib21SA2NkZ1IDZGZ3UgNld3JSA2ZyYVIDZ3J1UgNpYWRSA2puYlIDbGF4UgNsaHJSA25ydFIDb3JkUgNzamNSA3NpblIDc3lkUgN5eXpSCWtveWViX2ZyYVIJa295ZWJfcGFyUglrb3llYl9zZm9SCWtveWViX3NpblIJa295ZWJfdHlvUglrb3llYl93YXNSEHJhaWx3YXlfdXMtd2VzdDJSF3JhaWx3YXlfdXMtZWFzdDQtZXFkYzRhUhxyYWlsd2F5X2V1cm9wZS13ZXN0NC1kcmFtczNhUh5yYWlsd2F5X2FzaWEtc291dGhlYXN0MS1lcXNnM2ESQgoOb3Blbl90ZWxlbWV0cnkYEyABKAsyKi5vcGVuc3RhdHVzLm1vbml0b3IudjEuT3BlblRlbGVtZXRyeUNvbmZpZ0IOCgxfZGVncmFkZWRfYXQq9wEKCkhUVFBNZXRob2QSGwoXSFRUUF9NRVRIT0RfVU5TUEVDSUZJRUQQABITCg9IVFRQX01FVEhPRF9HRVQQARIUChBIVFRQX01FVEhPRF9QT1NUEAISFAoQSFRUUF9NRVRIT0RfSEVBRBADEhMKD0hUVFBfTUVUSE9EX1BVVBAEEhUKEUhUVFBfTUVUSE9EX1BBVENIEAUSFgoSSFRUUF9NRVRIT0RfREVMRVRFEAYSFQoRSFRUUF9NRVRIT0RfVFJBQ0UQBxIXChNIVFRQX01FVEhPRF9DT05ORUNUEAgSFwoTSFRUUF9NRVRIT0RfT1BUSU9OUxAJKqUBCgtQZXJpb2RpY2l0eRIbChdQRVJJT0RJQ0lUWV9VTlNQRUNJRklFRBAAEhMKD1BFUklPRElDSVRZXzMwUxABEhIKDlBFUklPRElDSVRZXzFNEAISEgoOUEVSSU9ESUNJVFlfNU0QAxITCg9QRVJJT0RJQ0lUWV8xME0QBBITCg9QRVJJT0RJQ0lUWV8zME0QBRISCg5QRVJJT0RJQ0lUWV8xSBAGQlNaUWdpdGh1Yi5jb20vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMvcGFja2FnZXMvcHJvdG8vb3BlbnN0YXR1cy9tb25pdG9yL3YxO21vbml0b3J2MWIGcHJvdG8z", - [file_buf_validate_validate, file_openstatus_monitor_v1_assertions], + "CihvcGVuc3RhdHVzL21vbml0b3IvdjEvaHR0cF9tb25pdG9yLnByb3RvEhVvcGVuc3RhdHVzLm1vbml0b3IudjEiLgoHSGVhZGVycxIUCgNrZXkYASABKAlCB7pIBHICEAESDQoFdmFsdWUYAiABKAkibAoTT3BlblRlbGVtZXRyeUNvbmZpZxIaCghlbmRwb2ludBgBIAEoCUIIukgFcgMYgBASOQoHaGVhZGVycxgCIAMoCzIeLm9wZW5zdGF0dXMubW9uaXRvci52MS5IZWFkZXJzQgi6SAWSAQIQFCKhBwoLSFRUUE1vbml0b3ISCgoCaWQYASABKAkSGAoEbmFtZRgCIAEoCUIKukgHcgUQARiAAhIaCgN1cmwYAyABKAlCDbpICnIIEAEYgBCIAQESQQoLcGVyaW9kaWNpdHkYBCABKA4yIi5vcGVuc3RhdHVzLm1vbml0b3IudjEuUGVyaW9kaWNpdHlCCLpIBYIBAiAAEjsKBm1ldGhvZBgFIAEoDjIhLm9wZW5zdGF0dXMubW9uaXRvci52MS5IVFRQTWV0aG9kQgi6SAWCAQIgABIMCgRib2R5GAYgASgJEhwKB3RpbWVvdXQYByABKANCC7pICCIGGMCpBygAEiUKC2RlZ3JhZGVkX2F0GAggASgDQgu6SAgiBhjAqQcoAEgAiAEBEhgKBXJldHJ5GAkgASgDQgm6SAYiBBgKKAASHQoQZm9sbG93X3JlZGlyZWN0cxgKIAEoCEgBiAEBEjkKB2hlYWRlcnMYCyADKAsyHi5vcGVuc3RhdHVzLm1vbml0b3IudjEuSGVhZGVyc0IIukgFkgECEBQSVAoWc3RhdHVzX2NvZGVfYXNzZXJ0aW9ucxgMIAMoCzIqLm9wZW5zdGF0dXMubW9uaXRvci52MS5TdGF0dXNDb2RlQXNzZXJ0aW9uQgi6SAWSAQIQChJHCg9ib2R5X2Fzc2VydGlvbnMYDSADKAsyJC5vcGVuc3RhdHVzLm1vbml0b3IudjEuQm9keUFzc2VydGlvbkIIukgFkgECEAoSSwoRaGVhZGVyX2Fzc2VydGlvbnMYDiADKAsyJi5vcGVuc3RhdHVzLm1vbml0b3IudjEuSGVhZGVyQXNzZXJ0aW9uQgi6SAWSAQIQChIdCgtkZXNjcmlwdGlvbhgPIAEoCUIIukgFcgMYgAgSDgoGYWN0aXZlGBAgASgIEg4KBnB1YmxpYxgRIAEoCBI/CgdyZWdpb25zGBIgAygOMh0ub3BlbnN0YXR1cy5tb25pdG9yLnYxLlJlZ2lvbkIPukgMkgEJEBwiBYIBAiAAEkIKDm9wZW5fdGVsZW1ldHJ5GBMgASgLMioub3BlbnN0YXR1cy5tb25pdG9yLnYxLk9wZW5UZWxlbWV0cnlDb25maWcSNAoGc3RhdHVzGBQgASgOMiQub3BlbnN0YXR1cy5tb25pdG9yLnYxLk1vbml0b3JTdGF0dXNCDgoMX2RlZ3JhZGVkX2F0QhMKEV9mb2xsb3dfcmVkaXJlY3RzKvcBCgpIVFRQTWV0aG9kEhsKF0hUVFBfTUVUSE9EX1VOU1BFQ0lGSUVEEAASEwoPSFRUUF9NRVRIT0RfR0VUEAESFAoQSFRUUF9NRVRIT0RfUE9TVBACEhQKEEhUVFBfTUVUSE9EX0hFQUQQAxITCg9IVFRQX01FVEhPRF9QVVQQBBIVChFIVFRQX01FVEhPRF9QQVRDSBAFEhYKEkhUVFBfTUVUSE9EX0RFTEVURRAGEhUKEUhUVFBfTUVUSE9EX1RSQUNFEAcSFwoTSFRUUF9NRVRIT0RfQ09OTkVDVBAIEhcKE0hUVFBfTUVUSE9EX09QVElPTlMQCUJTWlFnaXRodWIuY29tL29wZW5zdGF0dXNocS9vcGVuc3RhdHVzL3BhY2thZ2VzL3Byb3RvL29wZW5zdGF0dXMvbW9uaXRvci92MTttb25pdG9ydjFiBnByb3RvMw", + [ + file_buf_validate_validate, + file_openstatus_monitor_v1_assertions, + file_openstatus_monitor_v1_monitor, + ], ); /** @@ -112,16 +118,16 @@ export type HTTPMonitor = Message<"openstatus.monitor.v1.HTTPMonitor"> & { /** * Check periodicity (required). * - * @generated from field: string periodicity = 4; + * @generated from field: openstatus.monitor.v1.Periodicity periodicity = 4; */ - periodicity: string; + periodicity: Periodicity; /** * HTTP method to use (defaults to GET). * - * @generated from field: string method = 5; + * @generated from field: openstatus.monitor.v1.HTTPMethod method = 5; */ - method: string; + method: HTTPMethod; /** * Request body (optional). @@ -152,11 +158,11 @@ export type HTTPMonitor = Message<"openstatus.monitor.v1.HTTPMonitor"> & { retry: bigint; /** - * Whether to follow HTTP redirects (defaults to true). + * Whether to follow HTTP redirects (defaults to true when not specified). * - * @generated from field: bool follow_redirects = 10; + * @generated from field: optional bool follow_redirects = 10; */ - followRedirects: boolean; + followRedirects?: boolean; /** * Custom headers for the request. @@ -210,9 +216,9 @@ export type HTTPMonitor = Message<"openstatus.monitor.v1.HTTPMonitor"> & { /** * Geographic regions to run checks from. * - * @generated from field: repeated string regions = 18; + * @generated from field: repeated openstatus.monitor.v1.Region regions = 18; */ - regions: string[]; + regions: Region[]; /** * OpenTelemetry configuration for exporting metrics. @@ -220,6 +226,13 @@ export type HTTPMonitor = Message<"openstatus.monitor.v1.HTTPMonitor"> & { * @generated from field: openstatus.monitor.v1.OpenTelemetryConfig open_telemetry = 19; */ openTelemetry?: OpenTelemetryConfig; + + /** + * Current operational status of the monitor. + * + * @generated from field: openstatus.monitor.v1.MonitorStatus status = 20; + */ + status: MonitorStatus; }; /** @@ -291,51 +304,3 @@ export enum HTTPMethod { */ export const HTTPMethodSchema: GenEnum = /*@__PURE__*/ enumDesc(file_openstatus_monitor_v1_http_monitor, 0); - -/** - * Monitor periodicity options. - * - * @generated from enum openstatus.monitor.v1.Periodicity - */ -export enum Periodicity { - /** - * @generated from enum value: PERIODICITY_UNSPECIFIED = 0; - */ - PERIODICITY_UNSPECIFIED = 0, - - /** - * @generated from enum value: PERIODICITY_30S = 1; - */ - PERIODICITY_30S = 1, - - /** - * @generated from enum value: PERIODICITY_1M = 2; - */ - PERIODICITY_1M = 2, - - /** - * @generated from enum value: PERIODICITY_5M = 3; - */ - PERIODICITY_5M = 3, - - /** - * @generated from enum value: PERIODICITY_10M = 4; - */ - PERIODICITY_10M = 4, - - /** - * @generated from enum value: PERIODICITY_30M = 5; - */ - PERIODICITY_30M = 5, - - /** - * @generated from enum value: PERIODICITY_1H = 6; - */ - PERIODICITY_1H = 6, -} - -/** - * Describes the enum openstatus.monitor.v1.Periodicity. - */ -export const PeriodicitySchema: GenEnum = /*@__PURE__*/ - enumDesc(file_openstatus_monitor_v1_http_monitor, 1); diff --git a/src/gen/openstatus/monitor/v1/monitor_pb.ts b/src/gen/openstatus/monitor/v1/monitor_pb.ts index 580983b..886c0b9 100644 --- a/src/gen/openstatus/monitor/v1/monitor_pb.ts +++ b/src/gen/openstatus/monitor/v1/monitor_pb.ts @@ -2,76 +2,17 @@ // @generated from file openstatus/monitor/v1/monitor.proto (package openstatus.monitor.v1, syntax proto3) /* eslint-disable */ -import type { - GenEnum, - GenFile, - GenMessage, -} from "@bufbuild/protobuf/codegenv2"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; -import type { DNSMonitor } from "./dns_monitor_pb.ts"; -import { file_openstatus_monitor_v1_dns_monitor } from "./dns_monitor_pb.ts"; -import type { HTTPMonitor } from "./http_monitor_pb.ts"; -import { file_openstatus_monitor_v1_http_monitor } from "./http_monitor_pb.ts"; -import type { TCPMonitor } from "./tcp_monitor_pb.ts"; -import { file_openstatus_monitor_v1_tcp_monitor } from "./tcp_monitor_pb.ts"; -import type { Message } from "@bufbuild/protobuf"; +import type { GenEnum, GenFile } from "@bufbuild/protobuf/codegenv2"; +import { enumDesc, fileDesc } from "@bufbuild/protobuf/codegenv2"; /** * Describes the file openstatus/monitor/v1/monitor.proto. */ export const file_openstatus_monitor_v1_monitor: GenFile = /*@__PURE__*/ fileDesc( - "CiNvcGVuc3RhdHVzL21vbml0b3IvdjEvbW9uaXRvci5wcm90bxIVb3BlbnN0YXR1cy5tb25pdG9yLnYxIrEBCg1Nb25pdG9yQ29uZmlnEjIKBGh0dHAYASABKAsyIi5vcGVuc3RhdHVzLm1vbml0b3IudjEuSFRUUE1vbml0b3JIABIwCgN0Y3AYAiABKAsyIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuVENQTW9uaXRvckgAEjAKA2RucxgDIAEoCzIhLm9wZW5zdGF0dXMubW9uaXRvci52MS5ETlNNb25pdG9ySABCCAoGY29uZmlnKn8KDU1vbml0b3JTdGF0dXMSHgoaTU9OSVRPUl9TVEFUVVNfVU5TUEVDSUZJRUQQABIZChVNT05JVE9SX1NUQVRVU19BQ1RJVkUQARIZChVNT05JVE9SX1NUQVRVU19QQVVTRUQQAhIYChRNT05JVE9SX1NUQVRVU19FUlJPUhADQlNaUWdpdGh1Yi5jb20vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMvcGFja2FnZXMvcHJvdG8vb3BlbnN0YXR1cy9tb25pdG9yL3YxO21vbml0b3J2MWIGcHJvdG8z", - [ - file_openstatus_monitor_v1_dns_monitor, - file_openstatus_monitor_v1_http_monitor, - file_openstatus_monitor_v1_tcp_monitor, - ], + "CiNvcGVuc3RhdHVzL21vbml0b3IvdjEvbW9uaXRvci5wcm90bxIVb3BlbnN0YXR1cy5tb25pdG9yLnYxKoEBCg1Nb25pdG9yU3RhdHVzEh4KGk1PTklUT1JfU1RBVFVTX1VOU1BFQ0lGSUVEEAASGQoVTU9OSVRPUl9TVEFUVVNfQUNUSVZFEAESGwoXTU9OSVRPUl9TVEFUVVNfREVHUkFERUQQAhIYChRNT05JVE9SX1NUQVRVU19FUlJPUhADKqUBCgtQZXJpb2RpY2l0eRIbChdQRVJJT0RJQ0lUWV9VTlNQRUNJRklFRBAAEhMKD1BFUklPRElDSVRZXzMwUxABEhIKDlBFUklPRElDSVRZXzFNEAISEgoOUEVSSU9ESUNJVFlfNU0QAxITCg9QRVJJT0RJQ0lUWV8xME0QBBITCg9QRVJJT0RJQ0lUWV8zME0QBRISCg5QRVJJT0RJQ0lUWV8xSBAGKsMECgZSZWdpb24SFgoSUkVHSU9OX1VOU1BFQ0lGSUVEEAASDgoKUkVHSU9OX0FNUxABEg4KClJFR0lPTl9BUk4QAhIOCgpSRUdJT05fQk9NEAMSDgoKUkVHSU9OX0NERxAEEg4KClJFR0lPTl9ERlcQBRIOCgpSRUdJT05fRVdSEAYSDgoKUkVHSU9OX0ZSQRAHEg4KClJFR0lPTl9HUlUQCBIOCgpSRUdJT05fSUFEEAkSDgoKUkVHSU9OX0pOQhAKEg4KClJFR0lPTl9MQVgQCxIOCgpSRUdJT05fTEhSEAwSDgoKUkVHSU9OX05SVBANEg4KClJFR0lPTl9PUkQQDhIOCgpSRUdJT05fU0pDEA8SDgoKUkVHSU9OX1NJThAQEg4KClJFR0lPTl9TWUQQERIOCgpSRUdJT05fWVlaEBISFAoQUkVHSU9OX0tPWUVCX0ZSQRATEhQKEFJFR0lPTl9LT1lFQl9QQVIQFBIUChBSRUdJT05fS09ZRUJfU0ZPEBUSFAoQUkVHSU9OX0tPWUVCX1NJThAWEhQKEFJFR0lPTl9LT1lFQl9UWU8QFxIUChBSRUdJT05fS09ZRUJfV0FTEBgSGwoXUkVHSU9OX1JBSUxXQVlfVVNfV0VTVDIQGRIbChdSRUdJT05fUkFJTFdBWV9VU19FQVNUNBAaEh8KG1JFR0lPTl9SQUlMV0FZX0VVUk9QRV9XRVNUNBAbEiIKHlJFR0lPTl9SQUlMV0FZX0FTSUFfU09VVEhFQVNUMRAcQlNaUWdpdGh1Yi5jb20vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMvcGFja2FnZXMvcHJvdG8vb3BlbnN0YXR1cy9tb25pdG9yL3YxO21vbml0b3J2MWIGcHJvdG8z", ); -/** - * MonitorConfig represents the type-specific configuration for a monitor. - * - * @generated from message openstatus.monitor.v1.MonitorConfig - */ -export type MonitorConfig = Message<"openstatus.monitor.v1.MonitorConfig"> & { - /** - * @generated from oneof openstatus.monitor.v1.MonitorConfig.config - */ - config: { - /** - * HTTP monitor configuration. - * - * @generated from field: openstatus.monitor.v1.HTTPMonitor http = 1; - */ - value: HTTPMonitor; - case: "http"; - } | { - /** - * TCP monitor configuration. - * - * @generated from field: openstatus.monitor.v1.TCPMonitor tcp = 2; - */ - value: TCPMonitor; - case: "tcp"; - } | { - /** - * DNS monitor configuration. - * - * @generated from field: openstatus.monitor.v1.DNSMonitor dns = 3; - */ - value: DNSMonitor; - case: "dns"; - } | { case: undefined; value?: undefined }; -}; - -/** - * Describes the message openstatus.monitor.v1.MonitorConfig. - * Use `create(MonitorConfigSchema)` to create a new message. - */ -export const MonitorConfigSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_openstatus_monitor_v1_monitor, 0); - /** * MonitorStatus represents the operational status of a monitor. * @@ -93,11 +34,11 @@ export enum MonitorStatus { ACTIVE = 1, /** - * MONITOR_STATUS_PAUSED indicates the monitor is paused. + * MONITOR_STATUS_DEGRADED indicates the monitor is degraded. * - * @generated from enum value: MONITOR_STATUS_PAUSED = 2; + * @generated from enum value: MONITOR_STATUS_DEGRADED = 2; */ - PAUSED = 2, + DEGRADED = 2, /** * MONITOR_STATUS_ERROR indicates the monitor is in an error state. @@ -112,3 +53,271 @@ export enum MonitorStatus { */ export const MonitorStatusSchema: GenEnum = /*@__PURE__*/ enumDesc(file_openstatus_monitor_v1_monitor, 0); + +/** + * Monitor periodicity options. + * + * @generated from enum openstatus.monitor.v1.Periodicity + */ +export enum Periodicity { + /** + * @generated from enum value: PERIODICITY_UNSPECIFIED = 0; + */ + PERIODICITY_UNSPECIFIED = 0, + + /** + * @generated from enum value: PERIODICITY_30S = 1; + */ + PERIODICITY_30S = 1, + + /** + * @generated from enum value: PERIODICITY_1M = 2; + */ + PERIODICITY_1M = 2, + + /** + * @generated from enum value: PERIODICITY_5M = 3; + */ + PERIODICITY_5M = 3, + + /** + * @generated from enum value: PERIODICITY_10M = 4; + */ + PERIODICITY_10M = 4, + + /** + * @generated from enum value: PERIODICITY_30M = 5; + */ + PERIODICITY_30M = 5, + + /** + * @generated from enum value: PERIODICITY_1H = 6; + */ + PERIODICITY_1H = 6, +} + +/** + * Describes the enum openstatus.monitor.v1.Periodicity. + */ +export const PeriodicitySchema: GenEnum = /*@__PURE__*/ + enumDesc(file_openstatus_monitor_v1_monitor, 1); + +/** + * Geographic regions where monitors can run checks from. + * + * @generated from enum openstatus.monitor.v1.Region + */ +export enum Region { + /** + * @generated from enum value: REGION_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * Fly.io regions + * + * Amsterdam, Netherlands + * + * @generated from enum value: REGION_AMS = 1; + */ + AMS = 1, + + /** + * Stockholm, Sweden + * + * @generated from enum value: REGION_ARN = 2; + */ + ARN = 2, + + /** + * Mumbai, India + * + * @generated from enum value: REGION_BOM = 3; + */ + BOM = 3, + + /** + * Paris, France + * + * @generated from enum value: REGION_CDG = 4; + */ + CDG = 4, + + /** + * Dallas, USA + * + * @generated from enum value: REGION_DFW = 5; + */ + DFW = 5, + + /** + * Newark, USA + * + * @generated from enum value: REGION_EWR = 6; + */ + EWR = 6, + + /** + * Frankfurt, Germany + * + * @generated from enum value: REGION_FRA = 7; + */ + FRA = 7, + + /** + * São Paulo, Brazil + * + * @generated from enum value: REGION_GRU = 8; + */ + GRU = 8, + + /** + * Ashburn, USA + * + * @generated from enum value: REGION_IAD = 9; + */ + IAD = 9, + + /** + * Johannesburg, South Africa + * + * @generated from enum value: REGION_JNB = 10; + */ + JNB = 10, + + /** + * Los Angeles, USA + * + * @generated from enum value: REGION_LAX = 11; + */ + LAX = 11, + + /** + * London, UK + * + * @generated from enum value: REGION_LHR = 12; + */ + LHR = 12, + + /** + * Tokyo, Japan + * + * @generated from enum value: REGION_NRT = 13; + */ + NRT = 13, + + /** + * Chicago, USA + * + * @generated from enum value: REGION_ORD = 14; + */ + ORD = 14, + + /** + * San Jose, USA + * + * @generated from enum value: REGION_SJC = 15; + */ + SJC = 15, + + /** + * Singapore + * + * @generated from enum value: REGION_SIN = 16; + */ + SIN = 16, + + /** + * Sydney, Australia + * + * @generated from enum value: REGION_SYD = 17; + */ + SYD = 17, + + /** + * Toronto, Canada + * + * @generated from enum value: REGION_YYZ = 18; + */ + YYZ = 18, + + /** + * Koyeb regions + * + * Koyeb Frankfurt + * + * @generated from enum value: REGION_KOYEB_FRA = 19; + */ + KOYEB_FRA = 19, + + /** + * Koyeb Paris + * + * @generated from enum value: REGION_KOYEB_PAR = 20; + */ + KOYEB_PAR = 20, + + /** + * Koyeb San Francisco + * + * @generated from enum value: REGION_KOYEB_SFO = 21; + */ + KOYEB_SFO = 21, + + /** + * Koyeb Singapore + * + * @generated from enum value: REGION_KOYEB_SIN = 22; + */ + KOYEB_SIN = 22, + + /** + * Koyeb Tokyo + * + * @generated from enum value: REGION_KOYEB_TYO = 23; + */ + KOYEB_TYO = 23, + + /** + * Koyeb Washington + * + * @generated from enum value: REGION_KOYEB_WAS = 24; + */ + KOYEB_WAS = 24, + + /** + * Railway regions + * + * Railway US West + * + * @generated from enum value: REGION_RAILWAY_US_WEST2 = 25; + */ + RAILWAY_US_WEST2 = 25, + + /** + * Railway US East + * + * @generated from enum value: REGION_RAILWAY_US_EAST4 = 26; + */ + RAILWAY_US_EAST4 = 26, + + /** + * Railway Europe West + * + * @generated from enum value: REGION_RAILWAY_EUROPE_WEST4 = 27; + */ + RAILWAY_EUROPE_WEST4 = 27, + + /** + * Railway Asia Southeast + * + * @generated from enum value: REGION_RAILWAY_ASIA_SOUTHEAST1 = 28; + */ + RAILWAY_ASIA_SOUTHEAST1 = 28, +} + +/** + * Describes the enum openstatus.monitor.v1.Region. + */ +export const RegionSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_openstatus_monitor_v1_monitor, 2); diff --git a/src/gen/openstatus/monitor/v1/service_pb.ts b/src/gen/openstatus/monitor/v1/service_pb.ts index dcb0b29..ace11b9 100644 --- a/src/gen/openstatus/monitor/v1/service_pb.ts +++ b/src/gen/openstatus/monitor/v1/service_pb.ts @@ -3,11 +3,13 @@ /* eslint-disable */ import type { + GenEnum, GenFile, GenMessage, GenService, } from "@bufbuild/protobuf/codegenv2"; import { + enumDesc, fileDesc, messageDesc, serviceDesc, @@ -17,6 +19,8 @@ import type { DNSMonitor } from "./dns_monitor_pb.ts"; import { file_openstatus_monitor_v1_dns_monitor } from "./dns_monitor_pb.ts"; import type { HTTPMonitor } from "./http_monitor_pb.ts"; import { file_openstatus_monitor_v1_http_monitor } from "./http_monitor_pb.ts"; +import type { MonitorStatus, Region } from "./monitor_pb.ts"; +import { file_openstatus_monitor_v1_monitor } from "./monitor_pb.ts"; import type { TCPMonitor } from "./tcp_monitor_pb.ts"; import { file_openstatus_monitor_v1_tcp_monitor } from "./tcp_monitor_pb.ts"; import type { Message } from "@bufbuild/protobuf"; @@ -26,11 +30,12 @@ import type { Message } from "@bufbuild/protobuf"; */ export const file_openstatus_monitor_v1_service: GenFile = /*@__PURE__*/ fileDesc( - "CiNvcGVuc3RhdHVzL21vbml0b3IvdjEvc2VydmljZS5wcm90bxIVb3BlbnN0YXR1cy5tb25pdG9yLnYxIlcKGENyZWF0ZUhUVFBNb25pdG9yUmVxdWVzdBI7Cgdtb25pdG9yGAEgASgLMiIub3BlbnN0YXR1cy5tb25pdG9yLnYxLkhUVFBNb25pdG9yQga6SAPIAQEiUAoZQ3JlYXRlSFRUUE1vbml0b3JSZXNwb25zZRIzCgdtb25pdG9yGAEgASgLMiIub3BlbnN0YXR1cy5tb25pdG9yLnYxLkhUVFBNb25pdG9yIlUKF0NyZWF0ZVRDUE1vbml0b3JSZXF1ZXN0EjoKB21vbml0b3IYASABKAsyIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuVENQTW9uaXRvckIGukgDyAEBIk4KGENyZWF0ZVRDUE1vbml0b3JSZXNwb25zZRIyCgdtb25pdG9yGAEgASgLMiEub3BlbnN0YXR1cy5tb25pdG9yLnYxLlRDUE1vbml0b3IiVQoXQ3JlYXRlRE5TTW9uaXRvclJlcXVlc3QSOgoHbW9uaXRvchgBIAEoCzIhLm9wZW5zdGF0dXMubW9uaXRvci52MS5ETlNNb25pdG9yQga6SAPIAQEiTgoYQ3JlYXRlRE5TTW9uaXRvclJlc3BvbnNlEjIKB21vbml0b3IYASABKAsyIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuRE5TTW9uaXRvciIsChVUcmlnZ2VyTW9uaXRvclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiKQoWVHJpZ2dlck1vbml0b3JSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIisKFERlbGV0ZU1vbml0b3JSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIigKFURlbGV0ZU1vbml0b3JSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIm4KE0xpc3RNb25pdG9yc1JlcXVlc3QSIQoJcGFnZV9zaXplGAEgASgFQgm6SAYaBBhkKAFIAIgBARIXCgpwYWdlX3Rva2VuGAIgASgJSAGIAQFCDAoKX3BhZ2Vfc2l6ZUINCgtfcGFnZV90b2tlbiLcAQoUTGlzdE1vbml0b3JzUmVzcG9uc2USOQoNaHR0cF9tb25pdG9ycxgBIAMoCzIiLm9wZW5zdGF0dXMubW9uaXRvci52MS5IVFRQTW9uaXRvchI3Cgx0Y3BfbW9uaXRvcnMYAiADKAsyIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuVENQTW9uaXRvchI3CgxkbnNfbW9uaXRvcnMYAyADKAsyIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuRE5TTW9uaXRvchIXCg9uZXh0X3BhZ2VfdG9rZW4YBCABKAkytgUKDk1vbml0b3JTZXJ2aWNlEnYKEUNyZWF0ZUhUVFBNb25pdG9yEi8ub3BlbnN0YXR1cy5tb25pdG9yLnYxLkNyZWF0ZUhUVFBNb25pdG9yUmVxdWVzdBowLm9wZW5zdGF0dXMubW9uaXRvci52MS5DcmVhdGVIVFRQTW9uaXRvclJlc3BvbnNlEnMKEENyZWF0ZVRDUE1vbml0b3ISLi5vcGVuc3RhdHVzLm1vbml0b3IudjEuQ3JlYXRlVENQTW9uaXRvclJlcXVlc3QaLy5vcGVuc3RhdHVzLm1vbml0b3IudjEuQ3JlYXRlVENQTW9uaXRvclJlc3BvbnNlEnMKEENyZWF0ZUROU01vbml0b3ISLi5vcGVuc3RhdHVzLm1vbml0b3IudjEuQ3JlYXRlRE5TTW9uaXRvclJlcXVlc3QaLy5vcGVuc3RhdHVzLm1vbml0b3IudjEuQ3JlYXRlRE5TTW9uaXRvclJlc3BvbnNlEm0KDlRyaWdnZXJNb25pdG9yEiwub3BlbnN0YXR1cy5tb25pdG9yLnYxLlRyaWdnZXJNb25pdG9yUmVxdWVzdBotLm9wZW5zdGF0dXMubW9uaXRvci52MS5UcmlnZ2VyTW9uaXRvclJlc3BvbnNlEmoKDURlbGV0ZU1vbml0b3ISKy5vcGVuc3RhdHVzLm1vbml0b3IudjEuRGVsZXRlTW9uaXRvclJlcXVlc3QaLC5vcGVuc3RhdHVzLm1vbml0b3IudjEuRGVsZXRlTW9uaXRvclJlc3BvbnNlEmcKDExpc3RNb25pdG9ycxIqLm9wZW5zdGF0dXMubW9uaXRvci52MS5MaXN0TW9uaXRvcnNSZXF1ZXN0Gisub3BlbnN0YXR1cy5tb25pdG9yLnYxLkxpc3RNb25pdG9yc1Jlc3BvbnNlQlNaUWdpdGh1Yi5jb20vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMvcGFja2FnZXMvcHJvdG8vb3BlbnN0YXR1cy9tb25pdG9yL3YxO21vbml0b3J2MWIGcHJvdG8z", + "CiNvcGVuc3RhdHVzL21vbml0b3IvdjEvc2VydmljZS5wcm90bxIVb3BlbnN0YXR1cy5tb25pdG9yLnYxIlcKGENyZWF0ZUhUVFBNb25pdG9yUmVxdWVzdBI7Cgdtb25pdG9yGAEgASgLMiIub3BlbnN0YXR1cy5tb25pdG9yLnYxLkhUVFBNb25pdG9yQga6SAPIAQEiUAoZQ3JlYXRlSFRUUE1vbml0b3JSZXNwb25zZRIzCgdtb25pdG9yGAEgASgLMiIub3BlbnN0YXR1cy5tb25pdG9yLnYxLkhUVFBNb25pdG9yIlUKF0NyZWF0ZVRDUE1vbml0b3JSZXF1ZXN0EjoKB21vbml0b3IYASABKAsyIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuVENQTW9uaXRvckIGukgDyAEBIk4KGENyZWF0ZVRDUE1vbml0b3JSZXNwb25zZRIyCgdtb25pdG9yGAEgASgLMiEub3BlbnN0YXR1cy5tb25pdG9yLnYxLlRDUE1vbml0b3IiVQoXQ3JlYXRlRE5TTW9uaXRvclJlcXVlc3QSOgoHbW9uaXRvchgBIAEoCzIhLm9wZW5zdGF0dXMubW9uaXRvci52MS5ETlNNb25pdG9yQga6SAPIAQEiTgoYQ3JlYXRlRE5TTW9uaXRvclJlc3BvbnNlEjIKB21vbml0b3IYASABKAsyIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuRE5TTW9uaXRvciIsChVUcmlnZ2VyTW9uaXRvclJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiKQoWVHJpZ2dlck1vbml0b3JSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIisKFERlbGV0ZU1vbml0b3JSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIigKFURlbGV0ZU1vbml0b3JSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIm4KE0xpc3RNb25pdG9yc1JlcXVlc3QSIQoJcGFnZV9zaXplGAEgASgFQgm6SAYaBBhkKAFIAIgBARIXCgpwYWdlX3Rva2VuGAIgASgJSAGIAQFCDAoKX3BhZ2Vfc2l6ZUINCgtfcGFnZV90b2tlbiLwAQoUTGlzdE1vbml0b3JzUmVzcG9uc2USOQoNaHR0cF9tb25pdG9ycxgBIAMoCzIiLm9wZW5zdGF0dXMubW9uaXRvci52MS5IVFRQTW9uaXRvchI3Cgx0Y3BfbW9uaXRvcnMYAiADKAsyIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuVENQTW9uaXRvchI3CgxkbnNfbW9uaXRvcnMYAyADKAsyIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuRE5TTW9uaXRvchIXCg9uZXh0X3BhZ2VfdG9rZW4YBCABKAkSEgoKdG90YWxfc2l6ZRgFIAEoBSIuChdHZXRNb25pdG9yU3RhdHVzUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASJzCgxSZWdpb25TdGF0dXMSLQoGcmVnaW9uGAEgASgOMh0ub3BlbnN0YXR1cy5tb25pdG9yLnYxLlJlZ2lvbhI0CgZzdGF0dXMYAiABKA4yJC5vcGVuc3RhdHVzLm1vbml0b3IudjEuTW9uaXRvclN0YXR1cyJcChhHZXRNb25pdG9yU3RhdHVzUmVzcG9uc2USCgoCaWQYASABKAkSNAoHcmVnaW9ucxgCIAMoCzIjLm9wZW5zdGF0dXMubW9uaXRvci52MS5SZWdpb25TdGF0dXMisQEKDU1vbml0b3JDb25maWcSMgoEaHR0cBgBIAEoCzIiLm9wZW5zdGF0dXMubW9uaXRvci52MS5IVFRQTW9uaXRvckgAEjAKA3RjcBgCIAEoCzIhLm9wZW5zdGF0dXMubW9uaXRvci52MS5UQ1BNb25pdG9ySAASMAoDZG5zGAMgASgLMiEub3BlbnN0YXR1cy5tb25pdG9yLnYxLkROU01vbml0b3JIAEIICgZjb25maWcinwEKGEdldE1vbml0b3JTdW1tYXJ5UmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQARI0Cgp0aW1lX3JhbmdlGAIgASgOMiAub3BlbnN0YXR1cy5tb25pdG9yLnYxLlRpbWVSYW5nZRI4CgdyZWdpb25zGAMgAygOMh0ub3BlbnN0YXR1cy5tb25pdG9yLnYxLlJlZ2lvbkIIukgFkgECEBwirAIKGUdldE1vbml0b3JTdW1tYXJ5UmVzcG9uc2USCgoCaWQYASABKAkSFAoMbGFzdF9waW5nX2F0GAIgASgJEhgKEHRvdGFsX3N1Y2Nlc3NmdWwYAyABKAMSFgoOdG90YWxfZGVncmFkZWQYBCABKAMSFAoMdG90YWxfZmFpbGVkGAUgASgDEgsKA3A1MBgGIAEoAxILCgNwNzUYByABKAMSCwoDcDkwGAggASgDEgsKA3A5NRgJIAEoAxILCgNwOTkYCiABKAMSNAoKdGltZV9yYW5nZRgLIAEoDjIgLm9wZW5zdGF0dXMubW9uaXRvci52MS5UaW1lUmFuZ2USLgoHcmVnaW9ucxgMIAMoDjIdLm9wZW5zdGF0dXMubW9uaXRvci52MS5SZWdpb24qYQoJVGltZVJhbmdlEhoKFlRJTUVfUkFOR0VfVU5TUEVDSUZJRUQQABIRCg1USU1FX1JBTkdFXzFEEAESEQoNVElNRV9SQU5HRV83RBACEhIKDlRJTUVfUkFOR0VfMTREEAMyowcKDk1vbml0b3JTZXJ2aWNlEnYKEUNyZWF0ZUhUVFBNb25pdG9yEi8ub3BlbnN0YXR1cy5tb25pdG9yLnYxLkNyZWF0ZUhUVFBNb25pdG9yUmVxdWVzdBowLm9wZW5zdGF0dXMubW9uaXRvci52MS5DcmVhdGVIVFRQTW9uaXRvclJlc3BvbnNlEnMKEENyZWF0ZVRDUE1vbml0b3ISLi5vcGVuc3RhdHVzLm1vbml0b3IudjEuQ3JlYXRlVENQTW9uaXRvclJlcXVlc3QaLy5vcGVuc3RhdHVzLm1vbml0b3IudjEuQ3JlYXRlVENQTW9uaXRvclJlc3BvbnNlEnMKEENyZWF0ZUROU01vbml0b3ISLi5vcGVuc3RhdHVzLm1vbml0b3IudjEuQ3JlYXRlRE5TTW9uaXRvclJlcXVlc3QaLy5vcGVuc3RhdHVzLm1vbml0b3IudjEuQ3JlYXRlRE5TTW9uaXRvclJlc3BvbnNlEm0KDlRyaWdnZXJNb25pdG9yEiwub3BlbnN0YXR1cy5tb25pdG9yLnYxLlRyaWdnZXJNb25pdG9yUmVxdWVzdBotLm9wZW5zdGF0dXMubW9uaXRvci52MS5UcmlnZ2VyTW9uaXRvclJlc3BvbnNlEmoKDURlbGV0ZU1vbml0b3ISKy5vcGVuc3RhdHVzLm1vbml0b3IudjEuRGVsZXRlTW9uaXRvclJlcXVlc3QaLC5vcGVuc3RhdHVzLm1vbml0b3IudjEuRGVsZXRlTW9uaXRvclJlc3BvbnNlEmcKDExpc3RNb25pdG9ycxIqLm9wZW5zdGF0dXMubW9uaXRvci52MS5MaXN0TW9uaXRvcnNSZXF1ZXN0Gisub3BlbnN0YXR1cy5tb25pdG9yLnYxLkxpc3RNb25pdG9yc1Jlc3BvbnNlEnMKEEdldE1vbml0b3JTdGF0dXMSLi5vcGVuc3RhdHVzLm1vbml0b3IudjEuR2V0TW9uaXRvclN0YXR1c1JlcXVlc3QaLy5vcGVuc3RhdHVzLm1vbml0b3IudjEuR2V0TW9uaXRvclN0YXR1c1Jlc3BvbnNlEnYKEUdldE1vbml0b3JTdW1tYXJ5Ei8ub3BlbnN0YXR1cy5tb25pdG9yLnYxLkdldE1vbml0b3JTdW1tYXJ5UmVxdWVzdBowLm9wZW5zdGF0dXMubW9uaXRvci52MS5HZXRNb25pdG9yU3VtbWFyeVJlc3BvbnNlQlNaUWdpdGh1Yi5jb20vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMvcGFja2FnZXMvcHJvdG8vb3BlbnN0YXR1cy9tb25pdG9yL3YxO21vbml0b3J2MWIGcHJvdG8z", [ file_buf_validate_validate, file_openstatus_monitor_v1_dns_monitor, file_openstatus_monitor_v1_http_monitor, + file_openstatus_monitor_v1_monitor, file_openstatus_monitor_v1_tcp_monitor, ], ); @@ -352,6 +357,13 @@ export type ListMonitorsResponse = * @generated from field: string next_page_token = 4; */ nextPageToken: string; + + /** + * Total number of monitors across all pages. + * + * @generated from field: int32 total_size = 5; + */ + totalSize: number; }; /** @@ -363,6 +375,316 @@ export const ListMonitorsResponseSchema: GenMessage< > = /*@__PURE__*/ messageDesc(file_openstatus_monitor_v1_service, 11); +/** + * GetMonitorStatusRequest is the request to get the status of all regions for a monitor. + * + * @generated from message openstatus.monitor.v1.GetMonitorStatusRequest + */ +export type GetMonitorStatusRequest = + & Message<"openstatus.monitor.v1.GetMonitorStatusRequest"> + & { + /** + * Monitor ID to get status for (required). + * + * @generated from field: string id = 1; + */ + id: string; + }; + +/** + * Describes the message openstatus.monitor.v1.GetMonitorStatusRequest. + * Use `create(GetMonitorStatusRequestSchema)` to create a new message. + */ +export const GetMonitorStatusRequestSchema: GenMessage< + GetMonitorStatusRequest +> = /*@__PURE__*/ + messageDesc(file_openstatus_monitor_v1_service, 12); + +/** + * RegionStatus represents the status of a monitor in a specific region. + * + * @generated from message openstatus.monitor.v1.RegionStatus + */ +export type RegionStatus = Message<"openstatus.monitor.v1.RegionStatus"> & { + /** + * The region identifier. + * + * @generated from field: openstatus.monitor.v1.Region region = 1; + */ + region: Region; + + /** + * The status of the monitor in this region. + * + * @generated from field: openstatus.monitor.v1.MonitorStatus status = 2; + */ + status: MonitorStatus; +}; + +/** + * Describes the message openstatus.monitor.v1.RegionStatus. + * Use `create(RegionStatusSchema)` to create a new message. + */ +export const RegionStatusSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_openstatus_monitor_v1_service, 13); + +/** + * GetMonitorStatusResponse is the response containing the status of all regions for a monitor. + * + * @generated from message openstatus.monitor.v1.GetMonitorStatusResponse + */ +export type GetMonitorStatusResponse = + & Message<"openstatus.monitor.v1.GetMonitorStatusResponse"> + & { + /** + * Monitor ID. + * + * @generated from field: string id = 1; + */ + id: string; + + /** + * Status for each region. + * + * @generated from field: repeated openstatus.monitor.v1.RegionStatus regions = 2; + */ + regions: RegionStatus[]; + }; + +/** + * Describes the message openstatus.monitor.v1.GetMonitorStatusResponse. + * Use `create(GetMonitorStatusResponseSchema)` to create a new message. + */ +export const GetMonitorStatusResponseSchema: GenMessage< + GetMonitorStatusResponse +> = /*@__PURE__*/ + messageDesc(file_openstatus_monitor_v1_service, 14); + +/** + * MonitorConfig represents the type-specific configuration for a monitor. + * + * @generated from message openstatus.monitor.v1.MonitorConfig + */ +export type MonitorConfig = Message<"openstatus.monitor.v1.MonitorConfig"> & { + /** + * @generated from oneof openstatus.monitor.v1.MonitorConfig.config + */ + config: { + /** + * HTTP monitor configuration. + * + * @generated from field: openstatus.monitor.v1.HTTPMonitor http = 1; + */ + value: HTTPMonitor; + case: "http"; + } | { + /** + * TCP monitor configuration. + * + * @generated from field: openstatus.monitor.v1.TCPMonitor tcp = 2; + */ + value: TCPMonitor; + case: "tcp"; + } | { + /** + * DNS monitor configuration. + * + * @generated from field: openstatus.monitor.v1.DNSMonitor dns = 3; + */ + value: DNSMonitor; + case: "dns"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message openstatus.monitor.v1.MonitorConfig. + * Use `create(MonitorConfigSchema)` to create a new message. + */ +export const MonitorConfigSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_openstatus_monitor_v1_service, 15); + +/** + * GetMonitorSummaryRequest is the request to get aggregated metrics for a monitor. + * + * @generated from message openstatus.monitor.v1.GetMonitorSummaryRequest + */ +export type GetMonitorSummaryRequest = + & Message<"openstatus.monitor.v1.GetMonitorSummaryRequest"> + & { + /** + * Monitor ID to get summary for (required). + * + * @generated from field: string id = 1; + */ + id: string; + + /** + * Time range for metrics aggregation (defaults to 1 day if unspecified). + * + * @generated from field: openstatus.monitor.v1.TimeRange time_range = 2; + */ + timeRange: TimeRange; + + /** + * Optional filter by regions. If empty, returns metrics for all regions. + * + * @generated from field: repeated openstatus.monitor.v1.Region regions = 3; + */ + regions: Region[]; + }; + +/** + * Describes the message openstatus.monitor.v1.GetMonitorSummaryRequest. + * Use `create(GetMonitorSummaryRequestSchema)` to create a new message. + */ +export const GetMonitorSummaryRequestSchema: GenMessage< + GetMonitorSummaryRequest +> = /*@__PURE__*/ + messageDesc(file_openstatus_monitor_v1_service, 16); + +/** + * GetMonitorSummaryResponse is the response containing aggregated metrics for a monitor. + * + * @generated from message openstatus.monitor.v1.GetMonitorSummaryResponse + */ +export type GetMonitorSummaryResponse = + & Message<"openstatus.monitor.v1.GetMonitorSummaryResponse"> + & { + /** + * Monitor ID. + * + * @generated from field: string id = 1; + */ + id: string; + + /** + * Timestamp of the last check in RFC 3339 format. + * + * @generated from field: string last_ping_at = 2; + */ + lastPingAt: string; + + /** + * Total number of successful requests. + * + * @generated from field: int64 total_successful = 3; + */ + totalSuccessful: bigint; + + /** + * Total number of degraded requests. + * + * @generated from field: int64 total_degraded = 4; + */ + totalDegraded: bigint; + + /** + * Total number of failed requests. + * + * @generated from field: int64 total_failed = 5; + */ + totalFailed: bigint; + + /** + * 50th percentile (median) latency in milliseconds. + * + * @generated from field: int64 p50 = 6; + */ + p50: bigint; + + /** + * 75th percentile latency in milliseconds. + * + * @generated from field: int64 p75 = 7; + */ + p75: bigint; + + /** + * 90th percentile latency in milliseconds. + * + * @generated from field: int64 p90 = 8; + */ + p90: bigint; + + /** + * 95th percentile latency in milliseconds. + * + * @generated from field: int64 p95 = 9; + */ + p95: bigint; + + /** + * 99th percentile latency in milliseconds. + * + * @generated from field: int64 p99 = 10; + */ + p99: bigint; + + /** + * Time range used for the metrics. + * + * @generated from field: openstatus.monitor.v1.TimeRange time_range = 11; + */ + timeRange: TimeRange; + + /** + * Regions included in the metrics. + * + * @generated from field: repeated openstatus.monitor.v1.Region regions = 12; + */ + regions: Region[]; + }; + +/** + * Describes the message openstatus.monitor.v1.GetMonitorSummaryResponse. + * Use `create(GetMonitorSummaryResponseSchema)` to create a new message. + */ +export const GetMonitorSummaryResponseSchema: GenMessage< + GetMonitorSummaryResponse +> = /*@__PURE__*/ + messageDesc(file_openstatus_monitor_v1_service, 17); + +/** + * TimeRange represents the time period for metrics aggregation. + * + * @generated from enum openstatus.monitor.v1.TimeRange + */ +export enum TimeRange { + /** + * Unspecified time range. + * + * @generated from enum value: TIME_RANGE_UNSPECIFIED = 0; + */ + TIME_RANGE_UNSPECIFIED = 0, + + /** + * Last 24 hours. + * + * @generated from enum value: TIME_RANGE_1D = 1; + */ + TIME_RANGE_1D = 1, + + /** + * Last 7 days. + * + * @generated from enum value: TIME_RANGE_7D = 2; + */ + TIME_RANGE_7D = 2, + + /** + * Last 14 days. + * + * @generated from enum value: TIME_RANGE_14D = 3; + */ + TIME_RANGE_14D = 3, +} + +/** + * Describes the enum openstatus.monitor.v1.TimeRange. + */ +export const TimeRangeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_openstatus_monitor_v1_service, 0); + /** * MonitorService provides CRUD and operational commands for monitors. * @@ -429,5 +751,25 @@ export const MonitorService: GenService<{ input: typeof ListMonitorsRequestSchema; output: typeof ListMonitorsResponseSchema; }; + /** + * GetMonitorStatus returns the status of all regions for a monitor. + * + * @generated from rpc openstatus.monitor.v1.MonitorService.GetMonitorStatus + */ + getMonitorStatus: { + methodKind: "unary"; + input: typeof GetMonitorStatusRequestSchema; + output: typeof GetMonitorStatusResponseSchema; + }; + /** + * GetMonitorSummary returns aggregated metrics and statistics for a monitor. + * + * @generated from rpc openstatus.monitor.v1.MonitorService.GetMonitorSummary + */ + getMonitorSummary: { + methodKind: "unary"; + input: typeof GetMonitorSummaryRequestSchema; + output: typeof GetMonitorSummaryResponseSchema; + }; }> = /*@__PURE__*/ serviceDesc(file_openstatus_monitor_v1_service, 0); diff --git a/src/gen/openstatus/monitor/v1/tcp_monitor_pb.ts b/src/gen/openstatus/monitor/v1/tcp_monitor_pb.ts index 5cf02ba..5b65e42 100644 --- a/src/gen/openstatus/monitor/v1/tcp_monitor_pb.ts +++ b/src/gen/openstatus/monitor/v1/tcp_monitor_pb.ts @@ -7,6 +7,8 @@ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; import { file_buf_validate_validate } from "../../../buf/validate/validate_pb.ts"; import type { OpenTelemetryConfig } from "./http_monitor_pb.ts"; import { file_openstatus_monitor_v1_http_monitor } from "./http_monitor_pb.ts"; +import type { MonitorStatus, Periodicity, Region } from "./monitor_pb.ts"; +import { file_openstatus_monitor_v1_monitor } from "./monitor_pb.ts"; import type { Message } from "@bufbuild/protobuf"; /** @@ -14,8 +16,12 @@ import type { Message } from "@bufbuild/protobuf"; */ export const file_openstatus_monitor_v1_tcp_monitor: GenFile = /*@__PURE__*/ fileDesc( - "CidvcGVuc3RhdHVzL21vbml0b3IvdjEvdGNwX21vbml0b3IucHJvdG8SFW9wZW5zdGF0dXMubW9uaXRvci52MSKeBQoKVENQTW9uaXRvchIKCgJpZBgBIAEoCRIYCgRuYW1lGAIgASgJQgq6SAdyBRABGIACEhcKA3VyaRgDIAEoCUIKukgHcgUQARiAEBI1CgtwZXJpb2RpY2l0eRgEIAEoCUIgukgdchtSAzMwc1ICMW1SAjVtUgMxMG1SAzMwbVICMWgSHAoHdGltZW91dBgFIAEoA0ILukgIIgYYwKkHKAASJQoLZGVncmFkZWRfYXQYBiABKANCC7pICCIGGMCpBygASACIAQESGAoFcmV0cnkYByABKANCCbpIBiIEGAooABIdCgtkZXNjcmlwdGlvbhgIIAEoCUIIukgFcgMYgAgSDgoGYWN0aXZlGAkgASgIEg4KBnB1YmxpYxgKIAEoCBKnAgoHcmVnaW9ucxgLIAMoCUKVArpIkQKSAY0CEBwiiAJyhQJSA2Ftc1IDYXJuUgNib21SA2NkZ1IDZGZ3UgNld3JSA2ZyYVIDZ3J1UgNpYWRSA2puYlIDbGF4UgNsaHJSA25ydFIDb3JkUgNzamNSA3NpblIDc3lkUgN5eXpSCWtveWViX2ZyYVIJa295ZWJfcGFyUglrb3llYl9zZm9SCWtveWViX3NpblIJa295ZWJfdHlvUglrb3llYl93YXNSEHJhaWx3YXlfdXMtd2VzdDJSF3JhaWx3YXlfdXMtZWFzdDQtZXFkYzRhUhxyYWlsd2F5X2V1cm9wZS13ZXN0NC1kcmFtczNhUh5yYWlsd2F5X2FzaWEtc291dGhlYXN0MS1lcXNnM2ESQgoOb3Blbl90ZWxlbWV0cnkYDCABKAsyKi5vcGVuc3RhdHVzLm1vbml0b3IudjEuT3BlblRlbGVtZXRyeUNvbmZpZ0IOCgxfZGVncmFkZWRfYXRCU1pRZ2l0aHViLmNvbS9vcGVuc3RhdHVzaHEvb3BlbnN0YXR1cy9wYWNrYWdlcy9wcm90by9vcGVuc3RhdHVzL21vbml0b3IvdjE7bW9uaXRvcnYxYgZwcm90bzM", - [file_buf_validate_validate, file_openstatus_monitor_v1_http_monitor], + "CidvcGVuc3RhdHVzL21vbml0b3IvdjEvdGNwX21vbml0b3IucHJvdG8SFW9wZW5zdGF0dXMubW9uaXRvci52MSL3AwoKVENQTW9uaXRvchIKCgJpZBgBIAEoCRIYCgRuYW1lGAIgASgJQgq6SAdyBRABGIACEhcKA3VyaRgDIAEoCUIKukgHcgUQARiAEBJBCgtwZXJpb2RpY2l0eRgEIAEoDjIiLm9wZW5zdGF0dXMubW9uaXRvci52MS5QZXJpb2RpY2l0eUIIukgFggECIAASHAoHdGltZW91dBgFIAEoA0ILukgIIgYYwKkHKAASJQoLZGVncmFkZWRfYXQYBiABKANCC7pICCIGGMCpBygASACIAQESGAoFcmV0cnkYByABKANCCbpIBiIEGAooABIdCgtkZXNjcmlwdGlvbhgIIAEoCUIIukgFcgMYgAgSDgoGYWN0aXZlGAkgASgIEg4KBnB1YmxpYxgKIAEoCBI/CgdyZWdpb25zGAsgAygOMh0ub3BlbnN0YXR1cy5tb25pdG9yLnYxLlJlZ2lvbkIPukgMkgEJEBwiBYIBAiAAEkIKDm9wZW5fdGVsZW1ldHJ5GAwgASgLMioub3BlbnN0YXR1cy5tb25pdG9yLnYxLk9wZW5UZWxlbWV0cnlDb25maWcSNAoGc3RhdHVzGA0gASgOMiQub3BlbnN0YXR1cy5tb25pdG9yLnYxLk1vbml0b3JTdGF0dXNCDgoMX2RlZ3JhZGVkX2F0QlNaUWdpdGh1Yi5jb20vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMvcGFja2FnZXMvcHJvdG8vb3BlbnN0YXR1cy9tb25pdG9yL3YxO21vbml0b3J2MWIGcHJvdG8z", + [ + file_buf_validate_validate, + file_openstatus_monitor_v1_http_monitor, + file_openstatus_monitor_v1_monitor, + ], ); /** @@ -48,9 +54,9 @@ export type TCPMonitor = Message<"openstatus.monitor.v1.TCPMonitor"> & { /** * Check periodicity (required). * - * @generated from field: string periodicity = 4; + * @generated from field: openstatus.monitor.v1.Periodicity periodicity = 4; */ - periodicity: string; + periodicity: Periodicity; /** * Timeout in milliseconds (0-120000, defaults to 45000). @@ -97,9 +103,9 @@ export type TCPMonitor = Message<"openstatus.monitor.v1.TCPMonitor"> & { /** * Geographic regions to run checks from. * - * @generated from field: repeated string regions = 11; + * @generated from field: repeated openstatus.monitor.v1.Region regions = 11; */ - regions: string[]; + regions: Region[]; /** * OpenTelemetry configuration for exporting metrics. @@ -107,6 +113,13 @@ export type TCPMonitor = Message<"openstatus.monitor.v1.TCPMonitor"> & { * @generated from field: openstatus.monitor.v1.OpenTelemetryConfig open_telemetry = 12; */ openTelemetry?: OpenTelemetryConfig; + + /** + * Current operational status of the monitor. + * + * @generated from field: openstatus.monitor.v1.MonitorStatus status = 13; + */ + status: MonitorStatus; }; /** diff --git a/src/mod.ts b/src/mod.ts index fe36e98..8c0731e 100644 --- a/src/mod.ts +++ b/src/mod.ts @@ -1,14 +1,181 @@ +/** + * @module + * + * Official Node.js SDK for OpenStatus - the open-source monitoring platform. + * + * @example Basic usage + * ```typescript + * import { openstatus } from "@openstatus/node-sdk"; + * + * const headers = { + * "x-openstatus-key": `Bearer ${process.env.OPENSTATUS_API_KEY}`, + * }; + * + * // List all monitors + * const { httpMonitors, tcpMonitors, dnsMonitors } = + * await openstatus.monitor.v1.MonitorService.listMonitors({}, { headers }); + * + * // Create an HTTP monitor + * const { monitor } = await openstatus.monitor.v1.MonitorService.createHTTPMonitor({ + * name: "My API", + * url: "https://api.example.com/health", + * periodicity: "1m", + * regions: ["ams", "iad", "syd"], + * active: true, + * }, { headers }); + * ``` + */ + +import type { Client } from "@connectrpc/connect"; import { createClient } from "@connectrpc/connect"; import { createConnectTransport } from "@connectrpc/connect-node"; import { MonitorService } from "./gen/openstatus/monitor/v1/service_pb.ts"; import { HealthService } from "./gen/openstatus/health/v1/health_pb.ts"; +// Re-export monitor types +export type { + Headers, + HTTPMonitor, + OpenTelemetryConfig, +} from "./gen/openstatus/monitor/v1/http_monitor_pb.ts"; + +export type { TCPMonitor } from "./gen/openstatus/monitor/v1/tcp_monitor_pb.ts"; + +export type { DNSMonitor } from "./gen/openstatus/monitor/v1/dns_monitor_pb.ts"; + +// Re-export assertion types +export type { + BodyAssertion, + HeaderAssertion, + RecordAssertion, + StatusCodeAssertion, +} from "./gen/openstatus/monitor/v1/assertions_pb.ts"; + +// Re-export enums +export { HTTPMethod } from "./gen/openstatus/monitor/v1/http_monitor_pb.ts"; + +export { Periodicity, Region } from "./gen/openstatus/monitor/v1/monitor_pb.ts"; + +export { MonitorStatus } from "./gen/openstatus/monitor/v1/monitor_pb.ts"; + +// Re-export request/response types +export type { + CreateDNSMonitorRequest, + CreateDNSMonitorResponse, + CreateHTTPMonitorRequest, + CreateHTTPMonitorResponse, + CreateTCPMonitorRequest, + CreateTCPMonitorResponse, + DeleteMonitorRequest, + DeleteMonitorResponse, + GetMonitorStatusRequest, + GetMonitorStatusResponse, + GetMonitorSummaryRequest, + GetMonitorSummaryResponse, + ListMonitorsRequest, + ListMonitorsResponse, + RegionStatus, + TriggerMonitorRequest, + TriggerMonitorResponse, +} from "./gen/openstatus/monitor/v1/service_pb.ts"; + +export { TimeRange } from "./gen/openstatus/monitor/v1/service_pb.ts"; + +// Re-export health types +export type { + CheckRequest, + CheckResponse, +} from "./gen/openstatus/health/v1/health_pb.ts"; + +export { CheckResponse_ServingStatus as ServingStatus } from "./gen/openstatus/health/v1/health_pb.ts"; + +/** + * Default OpenStatus API URL. + */ +const DEFAULT_API_URL = "https://api.openstatus.dev/rpc"; + +/** + * Creates a Connect RPC transport configured for the OpenStatus API. + */ const transport = createConnectTransport({ - baseUrl: process.env.OPENSTATUS_API_URL ?? "https://api.openstatus.dev", + baseUrl: process.env.OPENSTATUS_API_URL ?? DEFAULT_API_URL, httpVersion: "2", }); -export const openstatus = { - monitor: { v1: { MonitorService: createClient(MonitorService, transport) } }, - health: { v1: { HealthService: createClient(HealthService, transport) } }, +/** + * OpenStatus API client interface. + * + * Provides access to Monitor and Health services. + */ +export interface OpenStatusClient { + /** + * Monitor service namespace (v1). + */ + monitor: { + v1: { + /** + * MonitorService provides CRUD and operational commands for monitors. + * + * Methods: + * - `createHTTPMonitor` - Create a new HTTP monitor + * - `createTCPMonitor` - Create a new TCP monitor + * - `createDNSMonitor` - Create a new DNS monitor + * - `listMonitors` - List all monitors + * - `triggerMonitor` - Trigger an immediate check + * - `deleteMonitor` - Delete a monitor + * - `getMonitorStatus` - Get status of all regions for a monitor + * - `getMonitorSummary` - Get aggregated metrics for a monitor + */ + MonitorService: Client; + }; + }; + /** + * Health service namespace (v1). + */ + health: { + v1: { + /** + * HealthService provides health check endpoints. + * + * Methods: + * - `check` - Check API health status + */ + HealthService: Client; + }; + }; +} + +/** + * OpenStatus SDK client. + * + * Provides access to the OpenStatus API for managing monitors and checking service health. + * + * @example + * ```typescript + * import { openstatus } from "@openstatus/node-sdk"; + * + * // Check API health (no auth required) + * const { status } = await openstatus.health.v1.HealthService.check({}); + * + * // Create a monitor (auth required) + * const headers = { "x-openstatus-key": `Bearer ${process.env.OPENSTATUS_API_KEY}` }; + * const { monitor } = await openstatus.monitor.v1.MonitorService.createHTTPMonitor({ + * name: "My Website", + * url: "https://example.com", + * periodicity: "1m", + * active: true, + * }, { headers }); + * ``` + */ +export const openstatus: OpenStatusClient = { + monitor: { + v1: { + MonitorService: createClient(MonitorService, transport), + }, + }, + health: { + v1: { + HealthService: createClient(HealthService, transport), + }, + }, }; -- 2.54.0