From a5b73772f67a0466935c9d61205d56d62de48b3b Mon Sep 17 00:00:00 2001 From: Thibault Le Ouay Date: Mon, 27 Jul 2026 19:44:58 +0000 Subject: [PATCH] 0.2.0 (#18) --- README.md | 161 ++++++- deno.json | 2 +- docs/index.md | 8 + docs/monitor-service.md | 18 + docs/private-location-service.md | 126 ++++++ docs/reference.md | 53 ++- docs/status-page-service.md | 84 +++- example.ts | 23 +- scripts/build_npm.ts | 2 +- .../openstatus/monitor/v1/dns_monitor_pb.ts | 21 +- .../openstatus/monitor/v1/http_monitor_pb.ts | 21 +- .../openstatus/monitor/v1/tcp_monitor_pb.ts | 21 +- .../v1/private_location_pb.ts | 212 +++++++++ .../private_location/v1/service_pb.ts | 415 ++++++++++++++++++ .../openstatus/status_page/v1/service_pb.ts | 245 +++++++++-- .../status_page/v1/status_page_pb.ts | 171 +++++++- src/mod.ts | 58 +++ 17 files changed, 1583 insertions(+), 58 deletions(-) create mode 100644 docs/private-location-service.md create mode 100644 src/gen/openstatus/private_location/v1/private_location_pb.ts create mode 100644 src/gen/openstatus/private_location/v1/service_pb.ts diff --git a/README.md b/README.md index 054af9d..bc4b867 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ status page with uptime monitoring. - [Status Page Service](#status-page-service) - [Maintenance Service](#maintenance-service) - [Notification Service](#notification-service) + - [Private Location Service](#private-location-service) - [Reference](#reference) - [Monitor Options](#monitor-options) - [Assertions](#assertions) @@ -38,10 +39,13 @@ For comprehensive documentation, see [docs/index.md](docs/index.md). - **TCP Monitoring** - Check database connections and other TCP services - **DNS Monitoring** - Verify DNS records and resolution - **Global Regions** - Monitor from 28 locations worldwide +- **Private Locations** - Run checks from your own network with self-hosted + agents ### Status Page -- **Status Pages** - Create and manage public status pages with custom domains +- **Status Pages** - Create and manage public status pages with custom domains, + themes, and custom CSS variable overrides - **Page Components** - Add monitor-based or static components with grouping - **Subscribers** - Manage email subscriptions for status updates - **Status Reports** - Manage incident reports with update timelines @@ -562,6 +566,11 @@ const { statusPage } = await client.statusPage.v1.StatusPageService description: "Status page for My Service", homepageUrl: "https://example.com", contactUrl: "https://example.com/contact", + // Optional: per-mode CSS variable overrides merged over the page theme + customTheme: { + light: { "--primary": "hsl(24 94% 50%)" }, + dark: { "--primary": "hsl(24 94% 60%)" }, + }, }); console.log(`Status page created: ${statusPage?.id}`); @@ -666,6 +675,21 @@ const { success } = await client.statusPage.v1.StatusPageService }); ``` +#### `getPageComponent(request)` + +Get a single component by ID, scoped to your workspace. Use it to resolve a +component ID to its name instead of fetching the whole page with +`getStatusPageContent` and filtering `.components`. + +```typescript +const { component } = await client.statusPage.v1.StatusPageService + .getPageComponent({ + id: "comp_123", + }); + +console.log(`Component: ${component?.name}`); +``` + #### `createComponentGroup(request)` Create a component group. @@ -816,6 +840,28 @@ for (const { componentId, status } of componentStatuses) { } ``` +#### `getStatusPageOverview(request)` + +Get everything about a single status page in one authenticated call: the page, +its rendering configuration, components, groups, active/recent status reports, +maintenances, and the computed overall + per-component statuses. +Workspace-scoped by ID — there is no public slug access path. Uptime time series +are not included; use `getPageComponentDailySummary` for that. + +```typescript +import { OverallStatus, PageMetricType } from "@openstatus/sdk-node"; + +const overview = await client.statusPage.v1.StatusPageService + .getStatusPageOverview({ id: "page_123" }); + +console.log(`Page: ${overview.statusPage?.title}`); +console.log(`Overall: ${OverallStatus[overview.overallStatus]}`); +console.log(`Components: ${overview.components.length}`); +console.log( + `Metric: ${PageMetricType[overview.configuration?.metricType ?? 0]}`, +); +``` + #### `getPageComponentDailySummary(request)` Get per-component daily status buckets (`ok`/`degraded`/`error`/`count` plus a @@ -1277,6 +1323,80 @@ import { OpsgenieRegion } from "@openstatus/sdk-node"; --- +### Private Location Service + +Manage private locations — self-hosted checker agents that run your monitors +from inside your own network. Each private location owns an agent token used by +the agent to authenticate; treat it as a secret. + +#### `createPrivateLocation(request)` + +Create a private location. The server generates the agent token and returns it. + +```typescript +const { privateLocation } = await client.privateLocation.v1 + .PrivateLocationService.createPrivateLocation({ + name: "eu-datacenter", + monitorIds: ["123456"], // optional, monitors this location runs + metadata: { env: "production" }, // optional key/value labels + }); + +console.log(`Token: ${privateLocation?.token}`); +``` + +#### `getPrivateLocation(request)` + +Get a private location by ID, including its agent token. + +```typescript +import { PrivateLocationStatus } from "@openstatus/sdk-node"; + +const { privateLocation } = await client.privateLocation.v1 + .PrivateLocationService.getPrivateLocation({ id: "pl_123" }); + +console.log(`Status: ${PrivateLocationStatus[privateLocation!.status]}`); +console.log(`Last seen: ${privateLocation?.lastSeenAt || "never"}`); +``` + +#### `listPrivateLocations(request)` + +List private location summaries with pagination. Agent tokens are **not** +included — use `getPrivateLocation` to fetch one. + +```typescript +const { privateLocations, totalSize } = await client.privateLocation.v1 + .PrivateLocationService.listPrivateLocations({ limit: 10, offset: 0 }); + +console.log(`Found ${totalSize} private locations`); +for (const location of privateLocations) { + console.log(` ${location.name}: ${location.monitorCount} monitors`); +} +``` + +#### `updatePrivateLocation(request)` + +Update a private location. + +```typescript +const { privateLocation } = await client.privateLocation.v1 + .PrivateLocationService.updatePrivateLocation({ + id: "pl_123", + name: "eu-datacenter-2", + monitorIds: ["123456", "123457"], + }); +``` + +#### `deletePrivateLocation(request)` + +Delete a private location. + +```typescript +const { success } = await client.privateLocation.v1.PrivateLocationService + .deletePrivateLocation({ id: "pl_123" }); +``` + +--- + ## Reference ### Monitor Options @@ -1337,6 +1457,11 @@ import { OpsgenieRegion } from "@openstatus/sdk-node"; | `recordAssertions` | array | No | DNS record assertions | | `openTelemetry` | OpenTelemetryConfig | No | OpenTelemetry export configuration | +> **Note:** HTTP, TCP, and DNS monitors returned by the API also carry a +> read-only `privateLocationIds: string[]` listing the +> [private locations](#private-location-service) that run them. Assign monitors +> to a private location with `createPrivateLocation` / `updatePrivateLocation`. + --- ### Assertions @@ -1611,6 +1736,40 @@ regions: [Region.FLY_AMS, Region.FLY_IAD, Region.KOYEB_FRA]; | `EN` | English | | `FR` | French | | `DE` | German | +| `TR` | Turkish | +| `HI` | Hindi | +| `KO` | Korean | + +#### PageMetricType + +Which metric the status bars represent (`PageConfiguration.metricType`). + +| Value | Description | +| ------------- | -------------------------- | +| `UNSPECIFIED` | Not set | +| `DURATION` | Response time | +| `REQUESTS` | Request counts | +| `MANUAL` | Manually managed component | + +#### PageBarType + +How the status bar is computed (`PageConfiguration.barType`). + +| Value | Description | +| ------------- | ------------------------- | +| `UNSPECIFIED` | Not set | +| `ABSOLUTE` | Absolute values | +| `MANUAL` | Manually managed statuses | + +#### PrivateLocationStatus + +Computed health of a private location agent (read-only). + +| Value | Description | +| ------------- | --------------------------- | +| `UNSPECIFIED` | Unknown status | +| `ACTIVE` | Agent is reporting normally | +| `ERROR` | Agent has stopped reporting | #### SubscriberSource diff --git a/deno.json b/deno.json index e00c53a..3ef9bbc 100644 --- a/deno.json +++ b/deno.json @@ -1,6 +1,6 @@ { "name": "@openstatus/sdk-node", - "version": "0.1.9", + "version": "0.2.0", "description": "SDK for openstatus", "license": "MIT", "exports": { diff --git a/docs/index.md b/docs/index.md index 48fc58e..6dfc71a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -36,6 +36,8 @@ platform. - Subscribers - Get Status Page Content - Get Overall Status + - Get Status Page Overview + - Get Page Component Daily Summary - [Status Report Service](./status-report-service.md) - Create Status Report - Add Status Report Update @@ -51,6 +53,12 @@ platform. - Send Test Notification - Check Notification Limits - List / Get / Update / Delete Notifications +- [Private Location Service](./private-location-service.md) + - Create Private Location + - Get Private Location + - List Private Locations + - Update / Delete Private Locations + - Assigning Monitors - [Health Service](./health-service.md) - Health Check - [Reference](./reference.md) diff --git a/docs/monitor-service.md b/docs/monitor-service.md index 9d86045..6517761 100644 --- a/docs/monitor-service.md +++ b/docs/monitor-service.md @@ -231,6 +231,24 @@ const { monitor } = await client.monitor.v1.MonitorService.updateDNSMonitor({ | `recordAssertions` | RecordAssertion[] | No | DNS record assertions | | `openTelemetry` | OpenTelemetryConfig | No | OpenTelemetry export configuration | +## Private Locations + +Every returned monitor — HTTP, TCP, and DNS — also carries a read-only +`privateLocationIds: string[]` listing the +[private locations](./private-location-service.md) that run it. The field cannot +be set through the monitor RPCs; assign monitors with `createPrivateLocation` or +`updatePrivateLocation`. + +```typescript +const { httpMonitors } = await client.monitor.v1.MonitorService.listMonitors( + {}, +); + +for (const monitor of httpMonitors) { + console.log(`${monitor.name}: ${monitor.privateLocationIds.length} private`); +} +``` + ## List Monitors List all monitors with offset-based pagination. Returns monitors grouped by diff --git a/docs/private-location-service.md b/docs/private-location-service.md new file mode 100644 index 0000000..30d5e38 --- /dev/null +++ b/docs/private-location-service.md @@ -0,0 +1,126 @@ +[← Back to index](./index.md) + +# Private Location Service + +Manage private locations — self-hosted checker agents that run your monitors +from inside your own network, instead of from OpenStatus' public regions. The +Private Location Service provides 5 RPC methods. + +Each private location owns an **agent token**, generated by the server on +creation. The agent uses it to authenticate, so treat it as a secret: it is +returned by `createPrivateLocation` and `getPrivateLocation`, and deliberately +omitted from `listPrivateLocations`. + +All examples assume you have created a client: + +```typescript +import { createOpenStatusClient } from "@openstatus/sdk-node"; + +const client = createOpenStatusClient({ + apiKey: process.env.OPENSTATUS_API_KEY, +}); +``` + +## Create Private Location + +```typescript +const { privateLocation } = await client.privateLocation.v1 + .PrivateLocationService.createPrivateLocation({ + name: "eu-datacenter", + monitorIds: ["123456"], // optional + metadata: { env: "production", team: "platform" }, // optional + }); + +console.log(`ID: ${privateLocation?.id}`); +console.log(`Token: ${privateLocation?.token}`); // store securely +``` + +### Create Options + +| Option | Type | Required | Description | +| ------------ | ---------------------- | -------- | ------------------------------------- | +| `name` | string | Yes | Display name for the private location | +| `monitorIds` | string[] | No | Monitors this location runs | +| `metadata` | Record | No | User-defined key/value labels | + +## Get Private Location + +Returns the full private location, including its agent token. + +```typescript +import { PrivateLocationStatus } from "@openstatus/sdk-node"; + +const { privateLocation } = await client.privateLocation.v1 + .PrivateLocationService.getPrivateLocation({ id: "pl_123" }); + +if (privateLocation) { + console.log(`Name: ${privateLocation.name}`); + console.log(`Status: ${PrivateLocationStatus[privateLocation.status]}`); + console.log(`Monitors: ${privateLocation.monitorIds.join(", ")}`); + console.log(`Last seen: ${privateLocation.lastSeenAt || "never"}`); +} +``` + +`status` is computed from the agent heartbeat and is read-only: `ACTIVE` means +the agent is reporting normally, `ERROR` means it has stopped reporting. See +[PrivateLocationStatus](./reference.md#privatelocationstatus). + +## List Private Locations + +Returns `PrivateLocationSummary` values — the agent token is **not** included. + +```typescript +const { privateLocations, totalSize } = await client.privateLocation.v1 + .PrivateLocationService.listPrivateLocations({ limit: 10, offset: 0 }); + +console.log(`Found ${totalSize} private locations`); +for (const location of privateLocations) { + console.log( + ` ${location.name}: ${location.monitorCount} monitors, ` + + `last seen ${location.lastSeenAt || "never"}`, + ); +} +``` + +| Option | Type | Required | Description | +| -------- | ------ | -------- | --------------------------------- | +| `limit` | number | No | Page size (1–100) | +| `offset` | number | No | Number of results to skip (min 0) | + +## Update Private Location + +```typescript +const { privateLocation } = await client.privateLocation.v1 + .PrivateLocationService.updatePrivateLocation({ + id: "pl_123", + name: "eu-datacenter-2", + monitorIds: ["123456", "123457"], + metadata: { env: "production" }, + }); +``` + +## Delete Private Location + +```typescript +const { success } = await client.privateLocation.v1.PrivateLocationService + .deletePrivateLocation({ id: "pl_123" }); +``` + +## Assigning Monitors + +Monitors are attached to a private location through `monitorIds` on +`createPrivateLocation` / `updatePrivateLocation`. The relationship is also +visible from the monitor side: HTTP, TCP, and DNS monitors expose a read-only +`privateLocationIds: string[]`. + +```typescript +const { httpMonitors } = await client.monitor.v1.MonitorService.listMonitors( + {}, +); + +for (const monitor of httpMonitors) { + if (monitor.privateLocationIds.length > 0) { + console.log(`${monitor.name} → ${monitor.privateLocationIds.join(", ")}`); + } +} +``` diff --git a/docs/reference.md b/docs/reference.md index 4cbd9a5..904b486 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -131,6 +131,42 @@ | `EN` | English | | `FR` | French | | `DE` | German | +| `TR` | Turkish | +| `HI` | Hindi | +| `KO` | Korean | + +### PageMetricType + +Which metric the status bars represent (`PageConfiguration.metricType`, returned +by `getStatusPageOverview`). + +| Value | Description | +| ------------- | -------------------------- | +| `UNSPECIFIED` | Not set | +| `DURATION` | Response time | +| `REQUESTS` | Request counts | +| `MANUAL` | Manually managed component | + +### PageBarType + +How the status bar is computed (`PageConfiguration.barType`). + +| Value | Description | +| ------------- | ------------------------- | +| `UNSPECIFIED` | Not set | +| `ABSOLUTE` | Absolute values | +| `MANUAL` | Manually managed statuses | + +### PrivateLocationStatus + +Computed health of a private location, derived from the agent heartbeat. +Read-only — it cannot be set through the API. + +| Value | Description | +| ------------- | --------------------------- | +| `UNSPECIFIED` | Unknown status | +| `ACTIVE` | Agent is reporting normally | +| `ERROR` | Agent has stopped reporting | ### SubscriberSource @@ -395,6 +431,9 @@ All types and enums exported from `@openstatus/sdk-node`: ### Status Page Types - `StatusPage`, `StatusPageSummary` +- `CustomTheme` — per-mode CSS variable overrides on a status page +- `PageConfiguration` — rich rendering config returned by + `getStatusPageOverview` - `PageComponent`, `PageComponentGroup` - `PageSubscriber` - `EmailChannel`, `WebhookChannel`, `WebhookChannelHeader` @@ -407,6 +446,7 @@ All types and enums exported from `@openstatus/sdk-node`: - `AddStaticComponentRequest`, `AddStaticComponentResponse` - `RemoveComponentRequest`, `RemoveComponentResponse` - `UpdateComponentRequest`, `UpdateComponentResponse` +- `GetPageComponentRequest`, `GetPageComponentResponse` - `CreateComponentGroupRequest`, `CreateComponentGroupResponse` - `DeleteComponentGroupRequest`, `DeleteComponentGroupResponse` - `UpdateComponentGroupRequest`, `UpdateComponentGroupResponse` @@ -416,11 +456,12 @@ All types and enums exported from `@openstatus/sdk-node`: - `ListSubscribersRequest`, `ListSubscribersResponse` - `GetStatusPageContentRequest`, `GetStatusPageContentResponse` - `GetOverallStatusRequest`, `GetOverallStatusResponse`, `ComponentStatus` +- `GetStatusPageOverviewRequest`, `GetStatusPageOverviewResponse` - `GetPageComponentDailySummaryRequest`, `GetPageComponentDailySummaryResponse`, `PageComponentDailySummary`, `ComponentDayBucket`, `ComponentEvent` - `OverallStatus`, `PageAccessType`, `PageTheme`, `PageComponentType`, `Locale`, `SubscriberSource`, `ComponentDayStatus`, `ComponentEventType`, - `ComponentEventStatus` + `ComponentEventStatus`, `PageMetricType`, `PageBarType` ### Maintenance Types @@ -447,6 +488,16 @@ All types and enums exported from `@openstatus/sdk-node`: - `CheckNotificationLimitRequest`, `CheckNotificationLimitResponse` - `NotificationProvider`, `OpsgenieRegion` +### Private Location Types + +- `PrivateLocation`, `PrivateLocationSummary` +- `CreatePrivateLocationRequest`, `CreatePrivateLocationResponse` +- `GetPrivateLocationRequest`, `GetPrivateLocationResponse` +- `ListPrivateLocationsRequest`, `ListPrivateLocationsResponse` +- `UpdatePrivateLocationRequest`, `UpdatePrivateLocationResponse` +- `DeletePrivateLocationRequest`, `DeletePrivateLocationResponse` +- `PrivateLocationStatus` — unspecified / active / error + ### Client Types - `OpenStatusClient` — client interface diff --git a/docs/status-page-service.md b/docs/status-page-service.md index 8ec9c85..223d0ae 100644 --- a/docs/status-page-service.md +++ b/docs/status-page-service.md @@ -3,7 +3,7 @@ # Status Page Service Manage status pages, components, component groups, and subscribers. The Status -Page Service provides 17 RPC methods. +Page Service provides 19 RPC methods. ## Status Page CRUD @@ -22,6 +22,25 @@ const { statusPage } = await client.statusPage.v1.StatusPageService console.log(`Status page created: ${statusPage?.id}`); ``` +#### Custom Theme + +`customTheme` holds per-mode CSS variable overrides that are merged over the +page theme. Both `light` and `dark` are plain `Record` maps +keyed by CSS variable name, and the field is only set when configured. + +```typescript +const { statusPage } = await client.statusPage.v1.StatusPageService + .updateStatusPage({ + id: "page_123", + customTheme: { + light: { "--primary": "hsl(24 94% 50%)", "--radius": "0.75rem" }, + dark: { "--primary": "hsl(24 94% 60%)" }, + }, + }); + +console.log(statusPage?.customTheme?.light["--primary"]); +``` + ### Get Status Page ```typescript @@ -108,6 +127,19 @@ const { success } = await client.statusPage.v1.StatusPageService .removeComponent({ id: "comp_123" }); ``` +### Get Page Component + +Returns a single component by ID, scoped to the authenticated workspace. Use it +to resolve a component ID to its name (and other fields) instead of fetching the +whole page with `getStatusPageContent` and filtering `.components`. + +```typescript +const { component } = await client.statusPage.v1.StatusPageService + .getPageComponent({ id: "comp_123" }); + +console.log(`${component?.name}: ${component?.description}`); +``` + ## Component Groups Group related components together on a status page. @@ -259,6 +291,56 @@ for (const { componentId, status } of componentStatuses) { } ``` +## Get Status Page Overview + +Everything about a single status page in one authenticated call: the page, its +rich rendering configuration, components, groups, active/recent status reports, +maintenances, and the computed overall + per-component statuses. +Workspace-scoped by `id` — unlike `getStatusPageContent` there is no public slug +access path. It does not include uptime time series; use +[Get Page Component Daily Summary](#get-page-component-daily-summary) for that. + +```typescript +import { + createOpenStatusClient, + OverallStatus, + PageBarType, + PageMetricType, +} from "@openstatus/sdk-node"; + +const client = createOpenStatusClient({ + apiKey: process.env.OPENSTATUS_API_KEY, +}); + +const overview = await client.statusPage.v1.StatusPageService + .getStatusPageOverview({ id: "page_123" }); + +console.log(`Page: ${overview.statusPage?.title}`); +console.log(`Overall: ${OverallStatus[overview.overallStatus]}`); +console.log(`Components: ${overview.components.length}`); +console.log(`Groups: ${overview.groups.length}`); +console.log(`Reports: ${overview.statusReports.length}`); +console.log(`Maintenances: ${overview.maintenances.length}`); + +const config = overview.configuration; +if (config) { + console.log( + `Bars: ${PageMetricType[config.metricType]} / ` + + `${PageBarType[config.barType]} over ${config.days} days ` + + `(uptime shown: ${config.showUptime}, theme: ${config.themeKey})`, + ); +} + +for (const { componentId, status } of overview.componentStatuses) { + console.log(` ${componentId}: ${OverallStatus[status]}`); +} +``` + +`configuration` is a `PageConfiguration` with `metricType` +([PageMetricType](./reference.md#pagemetrictype)), `barType` +([PageBarType](./reference.md#pagebartype)), `showUptime`, `themeKey` (free-form +string from the theme catalog), and `days` (30 or 45). + ## Get Page Component Daily Summary Per-component daily status buckets (`ok`/`degraded`/`error`/`count` plus a diff --git a/example.ts b/example.ts index 716be9c..866193b 100644 --- a/example.ts +++ b/example.ts @@ -8,6 +8,7 @@ import { HTTPResponseLogRequestStatus, HTTPResponseLogTrigger, openstatus, + PrivateLocationStatus, Region, } from "./src/mod.ts"; @@ -44,10 +45,13 @@ async function main(): Promise { if (httpMonitors.length > 0) { console.log("\n3. HTTP Monitors:"); httpMonitors.forEach((monitor: HTTPMonitor) => { + const locations = monitor.privateLocationIds.length > 0 + ? `, private: ${monitor.privateLocationIds.join(", ")}` + : ""; console.log( ` - ${monitor.name}: ${monitor.url} (${ monitor.active ? "active" : "paused" - })`, + }${locations})`, ); }); } @@ -103,6 +107,23 @@ async function main(): Promise { } } } + + // 6. List private locations (self-hosted checker agents) + console.log("\n6. Listing private locations..."); + const { privateLocations, totalSize: locationCount } = await openstatus + .privateLocation.v1.PrivateLocationService.listPrivateLocations( + { limit: 10 }, + { headers }, + ); + + console.log(` Found ${locationCount} private locations:`); + for (const location of privateLocations) { + console.log( + ` - ${location.name}: ${location.monitorCount} monitors, ` + + `${PrivateLocationStatus[location.status]}, ` + + `last seen ${location.lastSeenAt || "never"}`, + ); + } } main().catch(console.error); diff --git a/scripts/build_npm.ts b/scripts/build_npm.ts index 0fa5044..27ff346 100644 --- a/scripts/build_npm.ts +++ b/scripts/build_npm.ts @@ -12,7 +12,7 @@ await build({ package: { // package.json properties name: "@openstatus/sdk-node", - version: "0.1.9", + version: "0.2.0", description: "SDK for openstatus.", license: "MIT", repository: { diff --git a/src/gen/openstatus/monitor/v1/dns_monitor_pb.ts b/src/gen/openstatus/monitor/v1/dns_monitor_pb.ts index 39ffdaf..514a7b9 100644 --- a/src/gen/openstatus/monitor/v1/dns_monitor_pb.ts +++ b/src/gen/openstatus/monitor/v1/dns_monitor_pb.ts @@ -19,7 +19,7 @@ import type { Message } from "@bufbuild/protobuf"; */ export const file_openstatus_monitor_v1_dns_monitor: GenFile = /*@__PURE__*/ fileDesc( - "CidvcGVuc3RhdHVzL21vbml0b3IvdjEvZG5zX21vbml0b3IucHJvdG8SFW9wZW5zdGF0dXMubW9uaXRvci52MSLxBAoKRE5TTW9uaXRvchIKCgJpZBgBIAEoCRIzCgRuYW1lGAIgASgJQiW6Rxg6FhIURE5TIFJlc29sdXRpb24gQ2hlY2u6SAdyBRABGIACEikKA3VyaRgDIAEoCUIcukcPOg0SC2V4YW1wbGUuY29tukgHcgUQARiAEBJBCgtwZXJpb2RpY2l0eRgEIAEoDjIiLm9wZW5zdGF0dXMubW9uaXRvci52MS5QZXJpb2RpY2l0eUIIukgFggECIAASHAoHdGltZW91dBgFIAEoA0ILukgIIgYYwKkHKAASJQoLZGVncmFkZWRfYXQYBiABKANCC7pICCIGGMCpBygASACIAQESGAoFcmV0cnkYByABKANCCbpIBiIEGAooABJLChFyZWNvcmRfYXNzZXJ0aW9ucxgIIAMoCzImLm9wZW5zdGF0dXMubW9uaXRvci52MS5SZWNvcmRBc3NlcnRpb25CCLpIBZIBAhAKEh0KC2Rlc2NyaXB0aW9uGAkgASgJQgi6SAVyAxiACBIOCgZhY3RpdmUYCiABKAgSDgoGcHVibGljGAsgASgIEj8KB3JlZ2lvbnMYDCADKA4yHS5vcGVuc3RhdHVzLm1vbml0b3IudjEuUmVnaW9uQg+6SAySAQkQHCIFggECIAASQgoOb3Blbl90ZWxlbWV0cnkYDSABKAsyKi5vcGVuc3RhdHVzLm1vbml0b3IudjEuT3BlblRlbGVtZXRyeUNvbmZpZxI0CgZzdGF0dXMYDiABKA4yJC5vcGVuc3RhdHVzLm1vbml0b3IudjEuTW9uaXRvclN0YXR1c0IOCgxfZGVncmFkZWRfYXRCU1pRZ2l0aHViLmNvbS9vcGVuc3RhdHVzaHEvb3BlbnN0YXR1cy9wYWNrYWdlcy9wcm90by9vcGVuc3RhdHVzL21vbml0b3IvdjE7bW9uaXRvcnYxYgZwcm90bzM", + "CidvcGVuc3RhdHVzL21vbml0b3IvdjEvZG5zX21vbml0b3IucHJvdG8SFW9wZW5zdGF0dXMubW9uaXRvci52MSLLBQoKRE5TTW9uaXRvchIKCgJpZBgBIAEoCRIzCgRuYW1lGAIgASgJQiW6Rxg6FhIURE5TIFJlc29sdXRpb24gQ2hlY2u6SAdyBRABGIACEikKA3VyaRgDIAEoCUIcukcPOg0SC2V4YW1wbGUuY29tukgHcgUQARiAEBJBCgtwZXJpb2RpY2l0eRgEIAEoDjIiLm9wZW5zdGF0dXMubW9uaXRvci52MS5QZXJpb2RpY2l0eUIIukgFggECIAASHAoHdGltZW91dBgFIAEoA0ILukgIIgYYwKkHKAASJQoLZGVncmFkZWRfYXQYBiABKANCC7pICCIGGMCpBygASACIAQESGAoFcmV0cnkYByABKANCCbpIBiIEGAooABJLChFyZWNvcmRfYXNzZXJ0aW9ucxgIIAMoCzImLm9wZW5zdGF0dXMubW9uaXRvci52MS5SZWNvcmRBc3NlcnRpb25CCLpIBZIBAhAKEiIKC2Rlc2NyaXB0aW9uGAkgASgJQgi6SAVyAxiACEgBiAEBEhMKBmFjdGl2ZRgKIAEoCEgCiAEBEhMKBnB1YmxpYxgLIAEoCEgDiAEBEj8KB3JlZ2lvbnMYDCADKA4yHS5vcGVuc3RhdHVzLm1vbml0b3IudjEuUmVnaW9uQg+6SAySAQkQHCIFggECIAASQgoOb3Blbl90ZWxlbWV0cnkYDSABKAsyKi5vcGVuc3RhdHVzLm1vbml0b3IudjEuT3BlblRlbGVtZXRyeUNvbmZpZxI0CgZzdGF0dXMYDiABKA4yJC5vcGVuc3RhdHVzLm1vbml0b3IudjEuTW9uaXRvclN0YXR1cxIjChRwcml2YXRlX2xvY2F0aW9uX2lkcxgPIAMoCUIFukcCGAFCDgoMX2RlZ3JhZGVkX2F0Qg4KDF9kZXNjcmlwdGlvbkIJCgdfYWN0aXZlQgkKB19wdWJsaWNCU1pRZ2l0aHViLmNvbS9vcGVuc3RhdHVzaHEvb3BlbnN0YXR1cy9wYWNrYWdlcy9wcm90by9vcGVuc3RhdHVzL21vbml0b3IvdjE7bW9uaXRvcnYxYgZwcm90bzM", [ file_buf_validate_validate, file_gnostic_openapi_v3_annotations, @@ -94,23 +94,23 @@ export type DNSMonitor = Message<"openstatus.monitor.v1.DNSMonitor"> & { /** * Description of the monitor (optional). * - * @generated from field: string description = 9; + * @generated from field: optional string description = 9; */ - description: string; + description?: string; /** * Whether the monitor is active (defaults to false). * - * @generated from field: bool active = 10; + * @generated from field: optional bool active = 10; */ - active: boolean; + active?: boolean; /** * Whether the monitor is publicly visible (defaults to false). * - * @generated from field: bool public = 11; + * @generated from field: optional bool public = 11; */ - public: boolean; + public?: boolean; /** * Geographic regions to run checks from. @@ -132,6 +132,13 @@ export type DNSMonitor = Message<"openstatus.monitor.v1.DNSMonitor"> & { * @generated from field: openstatus.monitor.v1.MonitorStatus status = 14; */ status: MonitorStatus; + + /** + * IDs of private locations that run this monitor. Read-only. + * + * @generated from field: repeated string private_location_ids = 15; + */ + privateLocationIds: string[]; }; /** diff --git a/src/gen/openstatus/monitor/v1/http_monitor_pb.ts b/src/gen/openstatus/monitor/v1/http_monitor_pb.ts index 07374b7..a9b6bfc 100644 --- a/src/gen/openstatus/monitor/v1/http_monitor_pb.ts +++ b/src/gen/openstatus/monitor/v1/http_monitor_pb.ts @@ -25,7 +25,7 @@ import type { Message } from "@bufbuild/protobuf"; */ export const file_openstatus_monitor_v1_http_monitor: GenFile = /*@__PURE__*/ fileDesc( - "CihvcGVuc3RhdHVzL21vbml0b3IvdjEvaHR0cF9tb25pdG9yLnByb3RvEhVvcGVuc3RhdHVzLm1vbml0b3IudjEiWgoHSGVhZGVycxIoCgNrZXkYASABKAlCG7pHEToPEg1BdXRob3JpemF0aW9uukgEcgIQARIlCgV2YWx1ZRgCIAEoCUIWukcTOhESD0JlYXJlciB0b2tlbjEyMyJsChNPcGVuVGVsZW1ldHJ5Q29uZmlnEhoKCGVuZHBvaW50GAEgASgJQgi6SAVyAxiAEBI5CgdoZWFkZXJzGAIgAygLMh4ub3BlbnN0YXR1cy5tb25pdG9yLnYxLkhlYWRlcnNCCLpIBZIBAhAUIoEICgtIVFRQTW9uaXRvchIKCgJpZBgBIAEoCRI6CgRuYW1lGAIgASgJQiy6Rx86HRIbUHJvZHVjdGlvbiBBUEkgSGVhbHRoIENoZWNrukgHcgUQARiAAhI/CgN1cmwYAyABKAlCMrpHIjogEh5odHRwczovL2FwaS5leGFtcGxlLmNvbS9oZWFsdGi6SApyCBABGIAQiAEBEkEKC3BlcmlvZGljaXR5GAQgASgOMiIub3BlbnN0YXR1cy5tb25pdG9yLnYxLlBlcmlvZGljaXR5Qgi6SAWCAQIgABI7CgZtZXRob2QYBSABKA4yIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuSFRUUE1ldGhvZEIIukgFggECIAASJQoEYm9keRgGIAEoCUIXukcUOhISEHsia2V5IjogInZhbHVlIn0SHAoHdGltZW91dBgHIAEoA0ILukgIIgYYwKkHKAASJQoLZGVncmFkZWRfYXQYCCABKANCC7pICCIGGMCpBygASACIAQESGAoFcmV0cnkYCSABKANCCbpIBiIEGAooABIdChBmb2xsb3dfcmVkaXJlY3RzGAogASgISAGIAQESOQoHaGVhZGVycxgLIAMoCzIeLm9wZW5zdGF0dXMubW9uaXRvci52MS5IZWFkZXJzQgi6SAWSAQIQFBJUChZzdGF0dXNfY29kZV9hc3NlcnRpb25zGAwgAygLMioub3BlbnN0YXR1cy5tb25pdG9yLnYxLlN0YXR1c0NvZGVBc3NlcnRpb25CCLpIBZIBAhAKEkcKD2JvZHlfYXNzZXJ0aW9ucxgNIAMoCzIkLm9wZW5zdGF0dXMubW9uaXRvci52MS5Cb2R5QXNzZXJ0aW9uQgi6SAWSAQIQChJLChFoZWFkZXJfYXNzZXJ0aW9ucxgOIAMoCzImLm9wZW5zdGF0dXMubW9uaXRvci52MS5IZWFkZXJBc3NlcnRpb25CCLpIBZIBAhAKEh0KC2Rlc2NyaXB0aW9uGA8gASgJQgi6SAVyAxiACBIOCgZhY3RpdmUYECABKAgSDgoGcHVibGljGBEgASgIEj8KB3JlZ2lvbnMYEiADKA4yHS5vcGVuc3RhdHVzLm1vbml0b3IudjEuUmVnaW9uQg+6SAySAQkQHCIFggECIAASQgoOb3Blbl90ZWxlbWV0cnkYEyABKAsyKi5vcGVuc3RhdHVzLm1vbml0b3IudjEuT3BlblRlbGVtZXRyeUNvbmZpZxI0CgZzdGF0dXMYFCABKA4yJC5vcGVuc3RhdHVzLm1vbml0b3IudjEuTW9uaXRvclN0YXR1c0IOCgxfZGVncmFkZWRfYXRCEwoRX2ZvbGxvd19yZWRpcmVjdHMq9wEKCkhUVFBNZXRob2QSGwoXSFRUUF9NRVRIT0RfVU5TUEVDSUZJRUQQABITCg9IVFRQX01FVEhPRF9HRVQQARIUChBIVFRQX01FVEhPRF9QT1NUEAISFAoQSFRUUF9NRVRIT0RfSEVBRBADEhMKD0hUVFBfTUVUSE9EX1BVVBAEEhUKEUhUVFBfTUVUSE9EX1BBVENIEAUSFgoSSFRUUF9NRVRIT0RfREVMRVRFEAYSFQoRSFRUUF9NRVRIT0RfVFJBQ0UQBxIXChNIVFRQX01FVEhPRF9DT05ORUNUEAgSFwoTSFRUUF9NRVRIT0RfT1BUSU9OUxAJQlNaUWdpdGh1Yi5jb20vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMvcGFja2FnZXMvcHJvdG8vb3BlbnN0YXR1cy9tb25pdG9yL3YxO21vbml0b3J2MWIGcHJvdG8z", + "CihvcGVuc3RhdHVzL21vbml0b3IvdjEvaHR0cF9tb25pdG9yLnByb3RvEhVvcGVuc3RhdHVzLm1vbml0b3IudjEiWgoHSGVhZGVycxIoCgNrZXkYASABKAlCG7pHEToPEg1BdXRob3JpemF0aW9uukgEcgIQARIlCgV2YWx1ZRgCIAEoCUIWukcTOhESD0JlYXJlciB0b2tlbjEyMyJsChNPcGVuVGVsZW1ldHJ5Q29uZmlnEhoKCGVuZHBvaW50GAEgASgJQgi6SAVyAxiAEBI5CgdoZWFkZXJzGAIgAygLMh4ub3BlbnN0YXR1cy5tb25pdG9yLnYxLkhlYWRlcnNCCLpIBZIBAhAUItsICgtIVFRQTW9uaXRvchIKCgJpZBgBIAEoCRI6CgRuYW1lGAIgASgJQiy6Rx86HRIbUHJvZHVjdGlvbiBBUEkgSGVhbHRoIENoZWNrukgHcgUQARiAAhI/CgN1cmwYAyABKAlCMrpHIjogEh5odHRwczovL2FwaS5leGFtcGxlLmNvbS9oZWFsdGi6SApyCBABGIAQiAEBEkEKC3BlcmlvZGljaXR5GAQgASgOMiIub3BlbnN0YXR1cy5tb25pdG9yLnYxLlBlcmlvZGljaXR5Qgi6SAWCAQIgABI7CgZtZXRob2QYBSABKA4yIS5vcGVuc3RhdHVzLm1vbml0b3IudjEuSFRUUE1ldGhvZEIIukgFggECIAASJQoEYm9keRgGIAEoCUIXukcUOhISEHsia2V5IjogInZhbHVlIn0SHAoHdGltZW91dBgHIAEoA0ILukgIIgYYwKkHKAASJQoLZGVncmFkZWRfYXQYCCABKANCC7pICCIGGMCpBygASACIAQESGAoFcmV0cnkYCSABKANCCbpIBiIEGAooABIdChBmb2xsb3dfcmVkaXJlY3RzGAogASgISAGIAQESOQoHaGVhZGVycxgLIAMoCzIeLm9wZW5zdGF0dXMubW9uaXRvci52MS5IZWFkZXJzQgi6SAWSAQIQFBJUChZzdGF0dXNfY29kZV9hc3NlcnRpb25zGAwgAygLMioub3BlbnN0YXR1cy5tb25pdG9yLnYxLlN0YXR1c0NvZGVBc3NlcnRpb25CCLpIBZIBAhAKEkcKD2JvZHlfYXNzZXJ0aW9ucxgNIAMoCzIkLm9wZW5zdGF0dXMubW9uaXRvci52MS5Cb2R5QXNzZXJ0aW9uQgi6SAWSAQIQChJLChFoZWFkZXJfYXNzZXJ0aW9ucxgOIAMoCzImLm9wZW5zdGF0dXMubW9uaXRvci52MS5IZWFkZXJBc3NlcnRpb25CCLpIBZIBAhAKEiIKC2Rlc2NyaXB0aW9uGA8gASgJQgi6SAVyAxiACEgCiAEBEhMKBmFjdGl2ZRgQIAEoCEgDiAEBEhMKBnB1YmxpYxgRIAEoCEgEiAEBEj8KB3JlZ2lvbnMYEiADKA4yHS5vcGVuc3RhdHVzLm1vbml0b3IudjEuUmVnaW9uQg+6SAySAQkQHCIFggECIAASQgoOb3Blbl90ZWxlbWV0cnkYEyABKAsyKi5vcGVuc3RhdHVzLm1vbml0b3IudjEuT3BlblRlbGVtZXRyeUNvbmZpZxI0CgZzdGF0dXMYFCABKA4yJC5vcGVuc3RhdHVzLm1vbml0b3IudjEuTW9uaXRvclN0YXR1cxIjChRwcml2YXRlX2xvY2F0aW9uX2lkcxgVIAMoCUIFukcCGAFCDgoMX2RlZ3JhZGVkX2F0QhMKEV9mb2xsb3dfcmVkaXJlY3RzQg4KDF9kZXNjcmlwdGlvbkIJCgdfYWN0aXZlQgkKB19wdWJsaWMq9wEKCkhUVFBNZXRob2QSGwoXSFRUUF9NRVRIT0RfVU5TUEVDSUZJRUQQABITCg9IVFRQX01FVEhPRF9HRVQQARIUChBIVFRQX01FVEhPRF9QT1NUEAISFAoQSFRUUF9NRVRIT0RfSEVBRBADEhMKD0hUVFBfTUVUSE9EX1BVVBAEEhUKEUhUVFBfTUVUSE9EX1BBVENIEAUSFgoSSFRUUF9NRVRIT0RfREVMRVRFEAYSFQoRSFRUUF9NRVRIT0RfVFJBQ0UQBxIXChNIVFRQX01FVEhPRF9DT05ORUNUEAgSFwoTSFRUUF9NRVRIT0RfT1BUSU9OUxAJQlNaUWdpdGh1Yi5jb20vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMvcGFja2FnZXMvcHJvdG8vb3BlbnN0YXR1cy9tb25pdG9yL3YxO21vbml0b3J2MWIGcHJvdG8z", [ file_buf_validate_validate, file_gnostic_openapi_v3_annotations, @@ -201,23 +201,23 @@ export type HTTPMonitor = Message<"openstatus.monitor.v1.HTTPMonitor"> & { /** * Description of the monitor (optional). * - * @generated from field: string description = 15; + * @generated from field: optional string description = 15; */ - description: string; + description?: string; /** * Whether the monitor is active (defaults to false). * - * @generated from field: bool active = 16; + * @generated from field: optional bool active = 16; */ - active: boolean; + active?: boolean; /** * Whether the monitor is publicly visible (defaults to false). * - * @generated from field: bool public = 17; + * @generated from field: optional bool public = 17; */ - public: boolean; + public?: boolean; /** * Geographic regions to run checks from. @@ -239,6 +239,13 @@ export type HTTPMonitor = Message<"openstatus.monitor.v1.HTTPMonitor"> & { * @generated from field: openstatus.monitor.v1.MonitorStatus status = 20; */ status: MonitorStatus; + + /** + * IDs of private locations that run this monitor. Read-only. + * + * @generated from field: repeated string private_location_ids = 21; + */ + privateLocationIds: string[]; }; /** diff --git a/src/gen/openstatus/monitor/v1/tcp_monitor_pb.ts b/src/gen/openstatus/monitor/v1/tcp_monitor_pb.ts index e9c5075..29c135c 100644 --- a/src/gen/openstatus/monitor/v1/tcp_monitor_pb.ts +++ b/src/gen/openstatus/monitor/v1/tcp_monitor_pb.ts @@ -17,7 +17,7 @@ import type { Message } from "@bufbuild/protobuf"; */ export const file_openstatus_monitor_v1_tcp_monitor: GenFile = /*@__PURE__*/ fileDesc( - "CidvcGVuc3RhdHVzL21vbml0b3IvdjEvdGNwX21vbml0b3IucHJvdG8SFW9wZW5zdGF0dXMubW9uaXRvci52MSK3BAoKVENQTW9uaXRvchIKCgJpZBgBIAEoCRI4CgRuYW1lGAIgASgJQiq6Rx06GxIZRGF0YWJhc2UgQ29ubmVjdGlvbiBDaGVja7pIB3IFEAEYgAISNwoDdXJpGAMgASgJQiq6Rx06GxIZdGNwOi8vZGIuZXhhbXBsZS5jb206NTQzMrpIB3IFEAEYgBASQQoLcGVyaW9kaWNpdHkYBCABKA4yIi5vcGVuc3RhdHVzLm1vbml0b3IudjEuUGVyaW9kaWNpdHlCCLpIBYIBAiAAEhwKB3RpbWVvdXQYBSABKANCC7pICCIGGMCpBygAEiUKC2RlZ3JhZGVkX2F0GAYgASgDQgu6SAgiBhjAqQcoAEgAiAEBEhgKBXJldHJ5GAcgASgDQgm6SAYiBBgKKAASHQoLZGVzY3JpcHRpb24YCCABKAlCCLpIBXIDGIAIEg4KBmFjdGl2ZRgJIAEoCBIOCgZwdWJsaWMYCiABKAgSPwoHcmVnaW9ucxgLIAMoDjIdLm9wZW5zdGF0dXMubW9uaXRvci52MS5SZWdpb25CD7pIDJIBCRAcIgWCAQIgABJCCg5vcGVuX3RlbGVtZXRyeRgMIAEoCzIqLm9wZW5zdGF0dXMubW9uaXRvci52MS5PcGVuVGVsZW1ldHJ5Q29uZmlnEjQKBnN0YXR1cxgNIAEoDjIkLm9wZW5zdGF0dXMubW9uaXRvci52MS5Nb25pdG9yU3RhdHVzQg4KDF9kZWdyYWRlZF9hdEJTWlFnaXRodWIuY29tL29wZW5zdGF0dXNocS9vcGVuc3RhdHVzL3BhY2thZ2VzL3Byb3RvL29wZW5zdGF0dXMvbW9uaXRvci92MTttb25pdG9ydjFiBnByb3RvMw", + "CidvcGVuc3RhdHVzL21vbml0b3IvdjEvdGNwX21vbml0b3IucHJvdG8SFW9wZW5zdGF0dXMubW9uaXRvci52MSKRBQoKVENQTW9uaXRvchIKCgJpZBgBIAEoCRI4CgRuYW1lGAIgASgJQiq6Rx06GxIZRGF0YWJhc2UgQ29ubmVjdGlvbiBDaGVja7pIB3IFEAEYgAISNwoDdXJpGAMgASgJQiq6Rx06GxIZdGNwOi8vZGIuZXhhbXBsZS5jb206NTQzMrpIB3IFEAEYgBASQQoLcGVyaW9kaWNpdHkYBCABKA4yIi5vcGVuc3RhdHVzLm1vbml0b3IudjEuUGVyaW9kaWNpdHlCCLpIBYIBAiAAEhwKB3RpbWVvdXQYBSABKANCC7pICCIGGMCpBygAEiUKC2RlZ3JhZGVkX2F0GAYgASgDQgu6SAgiBhjAqQcoAEgAiAEBEhgKBXJldHJ5GAcgASgDQgm6SAYiBBgKKAASIgoLZGVzY3JpcHRpb24YCCABKAlCCLpIBXIDGIAISAGIAQESEwoGYWN0aXZlGAkgASgISAKIAQESEwoGcHVibGljGAogASgISAOIAQESPwoHcmVnaW9ucxgLIAMoDjIdLm9wZW5zdGF0dXMubW9uaXRvci52MS5SZWdpb25CD7pIDJIBCRAcIgWCAQIgABJCCg5vcGVuX3RlbGVtZXRyeRgMIAEoCzIqLm9wZW5zdGF0dXMubW9uaXRvci52MS5PcGVuVGVsZW1ldHJ5Q29uZmlnEjQKBnN0YXR1cxgNIAEoDjIkLm9wZW5zdGF0dXMubW9uaXRvci52MS5Nb25pdG9yU3RhdHVzEiMKFHByaXZhdGVfbG9jYXRpb25faWRzGA4gAygJQgW6RwIYAUIOCgxfZGVncmFkZWRfYXRCDgoMX2Rlc2NyaXB0aW9uQgkKB19hY3RpdmVCCQoHX3B1YmxpY0JTWlFnaXRodWIuY29tL29wZW5zdGF0dXNocS9vcGVuc3RhdHVzL3BhY2thZ2VzL3Byb3RvL29wZW5zdGF0dXMvbW9uaXRvci92MTttb25pdG9ydjFiBnByb3RvMw", [ file_buf_validate_validate, file_gnostic_openapi_v3_annotations, @@ -84,23 +84,23 @@ export type TCPMonitor = Message<"openstatus.monitor.v1.TCPMonitor"> & { /** * Description of the monitor (optional). * - * @generated from field: string description = 8; + * @generated from field: optional string description = 8; */ - description: string; + description?: string; /** * Whether the monitor is active (defaults to false). * - * @generated from field: bool active = 9; + * @generated from field: optional bool active = 9; */ - active: boolean; + active?: boolean; /** * Whether the monitor is publicly visible (defaults to false). * - * @generated from field: bool public = 10; + * @generated from field: optional bool public = 10; */ - public: boolean; + public?: boolean; /** * Geographic regions to run checks from. @@ -122,6 +122,13 @@ export type TCPMonitor = Message<"openstatus.monitor.v1.TCPMonitor"> & { * @generated from field: openstatus.monitor.v1.MonitorStatus status = 13; */ status: MonitorStatus; + + /** + * IDs of private locations that run this monitor. Read-only. + * + * @generated from field: repeated string private_location_ids = 14; + */ + privateLocationIds: string[]; }; /** diff --git a/src/gen/openstatus/private_location/v1/private_location_pb.ts b/src/gen/openstatus/private_location/v1/private_location_pb.ts new file mode 100644 index 0000000..dff41dc --- /dev/null +++ b/src/gen/openstatus/private_location/v1/private_location_pb.ts @@ -0,0 +1,212 @@ +// @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=ts" +// @generated from file openstatus/private_location/v1/private_location.proto (package openstatus.private_location.v1, syntax proto3) +/* eslint-disable */ + +import type { + GenEnum, + GenFile, + GenMessage, +} from "@bufbuild/protobuf/codegenv2"; +import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file openstatus/private_location/v1/private_location.proto. + */ +export const file_openstatus_private_location_v1_private_location: + GenFile = /*@__PURE__*/ + fileDesc( + "CjVvcGVuc3RhdHVzL3ByaXZhdGVfbG9jYXRpb24vdjEvcHJpdmF0ZV9sb2NhdGlvbi5wcm90bxIeb3BlbnN0YXR1cy5wcml2YXRlX2xvY2F0aW9uLnYxItYCCg9Qcml2YXRlTG9jYXRpb24SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRINCgV0b2tlbhgDIAEoCRITCgttb25pdG9yX2lkcxgEIAMoCRIUCgxsYXN0X3NlZW5fYXQYBSABKAkSEgoKY3JlYXRlZF9hdBgGIAEoCRISCgp1cGRhdGVkX2F0GAcgASgJEk8KCG1ldGFkYXRhGAggAygLMj0ub3BlbnN0YXR1cy5wcml2YXRlX2xvY2F0aW9uLnYxLlByaXZhdGVMb2NhdGlvbi5NZXRhZGF0YUVudHJ5EkUKBnN0YXR1cxgJIAEoDjI1Lm9wZW5zdGF0dXMucHJpdmF0ZV9sb2NhdGlvbi52MS5Qcml2YXRlTG9jYXRpb25TdGF0dXMaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBItcCChZQcml2YXRlTG9jYXRpb25TdW1tYXJ5EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSFQoNbW9uaXRvcl9jb3VudBgDIAEoBRIUCgxsYXN0X3NlZW5fYXQYBCABKAkSEgoKY3JlYXRlZF9hdBgFIAEoCRISCgp1cGRhdGVkX2F0GAYgASgJEkUKBnN0YXR1cxgHIAEoDjI1Lm9wZW5zdGF0dXMucHJpdmF0ZV9sb2NhdGlvbi52MS5Qcml2YXRlTG9jYXRpb25TdGF0dXMSVgoIbWV0YWRhdGEYCCADKAsyRC5vcGVuc3RhdHVzLnByaXZhdGVfbG9jYXRpb24udjEuUHJpdmF0ZUxvY2F0aW9uU3VtbWFyeS5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASqHAQoVUHJpdmF0ZUxvY2F0aW9uU3RhdHVzEicKI1BSSVZBVEVfTE9DQVRJT05fU1RBVFVTX1VOU1BFQ0lGSUVEEAASIgoeUFJJVkFURV9MT0NBVElPTl9TVEFUVVNfQUNUSVZFEAESIQodUFJJVkFURV9MT0NBVElPTl9TVEFUVVNfRVJST1IQAkJkWmJnaXRodWIuY29tL29wZW5zdGF0dXNocS9vcGVuc3RhdHVzL3BhY2thZ2VzL3Byb3RvL29wZW5zdGF0dXMvcHJpdmF0ZV9sb2NhdGlvbi92MTtwcml2YXRlbG9jYXRpb252MWIGcHJvdG8z", + ); + +/** + * PrivateLocation represents a self-hosted checker agent with full details. + * + * @generated from message openstatus.private_location.v1.PrivateLocation + */ +export type PrivateLocation = + & Message<"openstatus.private_location.v1.PrivateLocation"> + & { + /** + * Unique identifier for the private location. + * + * @generated from field: string id = 1; + */ + id: string; + + /** + * Display name for the private location. + * + * @generated from field: string name = 2; + */ + name: string; + + /** + * Agent credential. Generated by the server on creation and used by the + * agent to authenticate; treat it as a secret. + * + * @generated from field: string token = 3; + */ + token: string; + + /** + * IDs of monitors this private location runs. + * + * @generated from field: repeated string monitor_ids = 4; + */ + monitorIds: string[]; + + /** + * Last time the agent reported a result (RFC 3339), empty if it never has. + * + * @generated from field: string last_seen_at = 5; + */ + lastSeenAt: string; + + /** + * Timestamp when the private location was created (RFC 3339 format). + * + * @generated from field: string created_at = 6; + */ + createdAt: string; + + /** + * Timestamp when the private location was last updated (RFC 3339 format). + * + * @generated from field: string updated_at = 7; + */ + updatedAt: string; + + /** + * User-defined key/value labels attached to this private location. + * + * @generated from field: map metadata = 8; + */ + metadata: { [key: string]: string }; + + /** + * Computed health of the agent. Read-only. + * + * @generated from field: openstatus.private_location.v1.PrivateLocationStatus status = 9; + */ + status: PrivateLocationStatus; + }; + +/** + * Describes the message openstatus.private_location.v1.PrivateLocation. + * Use `create(PrivateLocationSchema)` to create a new message. + */ +export const PrivateLocationSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_private_location, 0); + +/** + * PrivateLocationSummary represents metadata for a private location (used in + * list responses). The agent token is intentionally omitted. + * + * @generated from message openstatus.private_location.v1.PrivateLocationSummary + */ +export type PrivateLocationSummary = + & Message<"openstatus.private_location.v1.PrivateLocationSummary"> + & { + /** + * Unique identifier for the private location. + * + * @generated from field: string id = 1; + */ + id: string; + + /** + * Display name for the private location. + * + * @generated from field: string name = 2; + */ + name: string; + + /** + * Number of monitors this private location runs. + * + * @generated from field: int32 monitor_count = 3; + */ + monitorCount: number; + + /** + * Last time the agent reported a result (RFC 3339), empty if it never has. + * + * @generated from field: string last_seen_at = 4; + */ + lastSeenAt: string; + + /** + * Timestamp when the private location was created (RFC 3339 format). + * + * @generated from field: string created_at = 5; + */ + createdAt: string; + + /** + * Timestamp when the private location was last updated (RFC 3339 format). + * + * @generated from field: string updated_at = 6; + */ + updatedAt: string; + + /** + * Computed health of the agent. Read-only. + * + * @generated from field: openstatus.private_location.v1.PrivateLocationStatus status = 7; + */ + status: PrivateLocationStatus; + + /** + * User-defined key/value labels attached to this private location. + * + * @generated from field: map metadata = 8; + */ + metadata: { [key: string]: string }; + }; + +/** + * Describes the message openstatus.private_location.v1.PrivateLocationSummary. + * Use `create(PrivateLocationSummarySchema)` to create a new message. + */ +export const PrivateLocationSummarySchema: GenMessage< + PrivateLocationSummary +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_private_location, 1); + +/** + * PrivateLocationStatus is the computed health of a private location, derived + * from the agent heartbeat. Read-only — it cannot be set through the API. + * + * @generated from enum openstatus.private_location.v1.PrivateLocationStatus + */ +export enum PrivateLocationStatus { + /** + * PRIVATE_LOCATION_STATUS_UNSPECIFIED indicates an unknown status. + * + * @generated from enum value: PRIVATE_LOCATION_STATUS_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * PRIVATE_LOCATION_STATUS_ACTIVE means the agent is reporting normally. + * + * @generated from enum value: PRIVATE_LOCATION_STATUS_ACTIVE = 1; + */ + ACTIVE = 1, + + /** + * PRIVATE_LOCATION_STATUS_ERROR means the agent has stopped reporting. + * + * @generated from enum value: PRIVATE_LOCATION_STATUS_ERROR = 2; + */ + ERROR = 2, +} + +/** + * Describes the enum openstatus.private_location.v1.PrivateLocationStatus. + */ +export const PrivateLocationStatusSchema: GenEnum< + PrivateLocationStatus +> = /*@__PURE__*/ + enumDesc(file_openstatus_private_location_v1_private_location, 0); diff --git a/src/gen/openstatus/private_location/v1/service_pb.ts b/src/gen/openstatus/private_location/v1/service_pb.ts new file mode 100644 index 0000000..a8fe3b8 --- /dev/null +++ b/src/gen/openstatus/private_location/v1/service_pb.ts @@ -0,0 +1,415 @@ +// @generated by protoc-gen-es v2.11.0 with parameter "target=ts,import_extension=ts" +// @generated from file openstatus/private_location/v1/service.proto (package openstatus.private_location.v1, syntax proto3) +/* eslint-disable */ + +import type { + GenFile, + GenMessage, + GenService, +} from "@bufbuild/protobuf/codegenv2"; +import { + fileDesc, + messageDesc, + serviceDesc, +} from "@bufbuild/protobuf/codegenv2"; +import { file_buf_validate_validate } from "../../../buf/validate/validate_pb.ts"; +import { file_gnostic_openapi_v3_annotations } from "../../../gnostic/openapi/v3/annotations_pb.ts"; +import type { + PrivateLocation, + PrivateLocationSummary, +} from "./private_location_pb.ts"; +import { file_openstatus_private_location_v1_private_location } from "./private_location_pb.ts"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file openstatus/private_location/v1/service.proto. + */ +export const file_openstatus_private_location_v1_service: + GenFile = /*@__PURE__*/ + fileDesc( + "CixvcGVuc3RhdHVzL3ByaXZhdGVfbG9jYXRpb24vdjEvc2VydmljZS5wcm90bxIeb3BlbnN0YXR1cy5wcml2YXRlX2xvY2F0aW9uLnYxIokCChxDcmVhdGVQcml2YXRlTG9jYXRpb25SZXF1ZXN0EiwKBG5hbWUYASABKAlCHrpHEToPEg1ldS13ZXN0LWFnZW50ukgHcgUQARiAAhITCgttb25pdG9yX2lkcxgCIAMoCRJ1CghtZXRhZGF0YRgDIAMoCzJKLm9wZW5zdGF0dXMucHJpdmF0ZV9sb2NhdGlvbi52MS5DcmVhdGVQcml2YXRlTG9jYXRpb25SZXF1ZXN0Lk1ldGFkYXRhRW50cnlCF7pIFJoBERAUIgZyBBABGEAqBXIDGIACGi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJqCh1DcmVhdGVQcml2YXRlTG9jYXRpb25SZXNwb25zZRJJChBwcml2YXRlX2xvY2F0aW9uGAEgASgLMi8ub3BlbnN0YXR1cy5wcml2YXRlX2xvY2F0aW9uLnYxLlByaXZhdGVMb2NhdGlvbiIwChlHZXRQcml2YXRlTG9jYXRpb25SZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABImcKGkdldFByaXZhdGVMb2NhdGlvblJlc3BvbnNlEkkKEHByaXZhdGVfbG9jYXRpb24YASABKAsyLy5vcGVuc3RhdHVzLnByaXZhdGVfbG9jYXRpb24udjEuUHJpdmF0ZUxvY2F0aW9uIm8KG0xpc3RQcml2YXRlTG9jYXRpb25zUmVxdWVzdBIdCgVsaW1pdBgBIAEoBUIJukgGGgQYZCgBSACIAQESHAoGb2Zmc2V0GAIgASgFQge6SAQaAigASAGIAQFCCAoGX2xpbWl0QgkKB19vZmZzZXQihQEKHExpc3RQcml2YXRlTG9jYXRpb25zUmVzcG9uc2USUQoRcHJpdmF0ZV9sb2NhdGlvbnMYASADKAsyNi5vcGVuc3RhdHVzLnByaXZhdGVfbG9jYXRpb24udjEuUHJpdmF0ZUxvY2F0aW9uU3VtbWFyeRISCgp0b3RhbF9zaXplGAIgASgFIoIDChxVcGRhdGVQcml2YXRlTG9jYXRpb25SZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABEh0KBG5hbWUYAiABKAlCCrpIB3IFEAEYgAJIAIgBARITCgttb25pdG9yX2lkcxgDIAMoCRIfChJ1cGRhdGVfbW9uaXRvcl9pZHMYBCABKAhIAYgBARJ1CghtZXRhZGF0YRgFIAMoCzJKLm9wZW5zdGF0dXMucHJpdmF0ZV9sb2NhdGlvbi52MS5VcGRhdGVQcml2YXRlTG9jYXRpb25SZXF1ZXN0Lk1ldGFkYXRhRW50cnlCF7pIFJoBERAUIgZyBBABGEAqBXIDGIACEhwKD3VwZGF0ZV9tZXRhZGF0YRgGIAEoCEgCiAEBGi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIHCgVfbmFtZUIVChNfdXBkYXRlX21vbml0b3JfaWRzQhIKEF91cGRhdGVfbWV0YWRhdGEiagodVXBkYXRlUHJpdmF0ZUxvY2F0aW9uUmVzcG9uc2USSQoQcHJpdmF0ZV9sb2NhdGlvbhgBIAEoCzIvLm9wZW5zdGF0dXMucHJpdmF0ZV9sb2NhdGlvbi52MS5Qcml2YXRlTG9jYXRpb24iMwocRGVsZXRlUHJpdmF0ZUxvY2F0aW9uUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASIwCh1EZWxldGVQcml2YXRlTG9jYXRpb25SZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIMvIHChZQcml2YXRlTG9jYXRpb25TZXJ2aWNlEv0CChVDcmVhdGVQcml2YXRlTG9jYXRpb24SPC5vcGVuc3RhdHVzLnByaXZhdGVfbG9jYXRpb24udjEuQ3JlYXRlUHJpdmF0ZUxvY2F0aW9uUmVxdWVzdBo9Lm9wZW5zdGF0dXMucHJpdmF0ZV9sb2NhdGlvbi52MS5DcmVhdGVQcml2YXRlTG9jYXRpb25SZXNwb25zZSLmAbpH4gEa3wFDcmVhdGVzIGEgcHJpdmF0ZSBsb2NhdGlvbi4gVGhlIGFnZW50IHRva2VuIGlzIGdlbmVyYXRlZCBieSB0aGUgc2VydmVyIGFuZCByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2UgLSBpdCBjYW5ub3QgYmUgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4gVXNlIHRoZSB0b2tlbiB0byBjb25maWd1cmUgdGhlIGFnZW50IHNvIGl0IGNhbiBwdWxsIGl0cyBtb25pdG9ycyBhbmQgcmVwb3J0IHJlc3VsdHMuEpABChJHZXRQcml2YXRlTG9jYXRpb24SOS5vcGVuc3RhdHVzLnByaXZhdGVfbG9jYXRpb24udjEuR2V0UHJpdmF0ZUxvY2F0aW9uUmVxdWVzdBo6Lm9wZW5zdGF0dXMucHJpdmF0ZV9sb2NhdGlvbi52MS5HZXRQcml2YXRlTG9jYXRpb25SZXNwb25zZSIDkAIBEpYBChRMaXN0UHJpdmF0ZUxvY2F0aW9ucxI7Lm9wZW5zdGF0dXMucHJpdmF0ZV9sb2NhdGlvbi52MS5MaXN0UHJpdmF0ZUxvY2F0aW9uc1JlcXVlc3QaPC5vcGVuc3RhdHVzLnByaXZhdGVfbG9jYXRpb24udjEuTGlzdFByaXZhdGVMb2NhdGlvbnNSZXNwb25zZSIDkAIBEpQBChVVcGRhdGVQcml2YXRlTG9jYXRpb24SPC5vcGVuc3RhdHVzLnByaXZhdGVfbG9jYXRpb24udjEuVXBkYXRlUHJpdmF0ZUxvY2F0aW9uUmVxdWVzdBo9Lm9wZW5zdGF0dXMucHJpdmF0ZV9sb2NhdGlvbi52MS5VcGRhdGVQcml2YXRlTG9jYXRpb25SZXNwb25zZRKUAQoVRGVsZXRlUHJpdmF0ZUxvY2F0aW9uEjwub3BlbnN0YXR1cy5wcml2YXRlX2xvY2F0aW9uLnYxLkRlbGV0ZVByaXZhdGVMb2NhdGlvblJlcXVlc3QaPS5vcGVuc3RhdHVzLnByaXZhdGVfbG9jYXRpb24udjEuRGVsZXRlUHJpdmF0ZUxvY2F0aW9uUmVzcG9uc2VCZFpiZ2l0aHViLmNvbS9vcGVuc3RhdHVzaHEvb3BlbnN0YXR1cy9wYWNrYWdlcy9wcm90by9vcGVuc3RhdHVzL3ByaXZhdGVfbG9jYXRpb24vdjE7cHJpdmF0ZWxvY2F0aW9udjFiBnByb3RvMw", + [ + file_buf_validate_validate, + file_gnostic_openapi_v3_annotations, + file_openstatus_private_location_v1_private_location, + ], + ); + +/** + * CreatePrivateLocationRequest is the request to create a new private location. + * + * @generated from message openstatus.private_location.v1.CreatePrivateLocationRequest + */ +export type CreatePrivateLocationRequest = + & Message<"openstatus.private_location.v1.CreatePrivateLocationRequest"> + & { + /** + * Display name for the private location (required, 1-256 characters). + * + * @generated from field: string name = 1; + */ + name: string; + + /** + * IDs of monitors this private location should run (optional). + * + * @generated from field: repeated string monitor_ids = 2; + */ + monitorIds: string[]; + + /** + * User-defined key/value labels (optional, up to 20 entries). + * + * @generated from field: map metadata = 3; + */ + metadata: { [key: string]: string }; + }; + +/** + * Describes the message openstatus.private_location.v1.CreatePrivateLocationRequest. + * Use `create(CreatePrivateLocationRequestSchema)` to create a new message. + */ +export const CreatePrivateLocationRequestSchema: GenMessage< + CreatePrivateLocationRequest +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 0); + +/** + * CreatePrivateLocationResponse is the response after creating a private location. + * + * @generated from message openstatus.private_location.v1.CreatePrivateLocationResponse + */ +export type CreatePrivateLocationResponse = + & Message<"openstatus.private_location.v1.CreatePrivateLocationResponse"> + & { + /** + * The created private location, including its generated agent token. + * + * @generated from field: openstatus.private_location.v1.PrivateLocation private_location = 1; + */ + privateLocation?: PrivateLocation; + }; + +/** + * Describes the message openstatus.private_location.v1.CreatePrivateLocationResponse. + * Use `create(CreatePrivateLocationResponseSchema)` to create a new message. + */ +export const CreatePrivateLocationResponseSchema: GenMessage< + CreatePrivateLocationResponse +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 1); + +/** + * GetPrivateLocationRequest is the request to get a private location by ID. + * + * @generated from message openstatus.private_location.v1.GetPrivateLocationRequest + */ +export type GetPrivateLocationRequest = + & Message<"openstatus.private_location.v1.GetPrivateLocationRequest"> + & { + /** + * ID of the private location to retrieve (required). + * + * @generated from field: string id = 1; + */ + id: string; + }; + +/** + * Describes the message openstatus.private_location.v1.GetPrivateLocationRequest. + * Use `create(GetPrivateLocationRequestSchema)` to create a new message. + */ +export const GetPrivateLocationRequestSchema: GenMessage< + GetPrivateLocationRequest +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 2); + +/** + * GetPrivateLocationResponse is the response containing the private location. + * + * @generated from message openstatus.private_location.v1.GetPrivateLocationResponse + */ +export type GetPrivateLocationResponse = + & Message<"openstatus.private_location.v1.GetPrivateLocationResponse"> + & { + /** + * The requested private location. + * + * @generated from field: openstatus.private_location.v1.PrivateLocation private_location = 1; + */ + privateLocation?: PrivateLocation; + }; + +/** + * Describes the message openstatus.private_location.v1.GetPrivateLocationResponse. + * Use `create(GetPrivateLocationResponseSchema)` to create a new message. + */ +export const GetPrivateLocationResponseSchema: GenMessage< + GetPrivateLocationResponse +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 3); + +/** + * ListPrivateLocationsRequest is the request to list private locations. + * + * @generated from message openstatus.private_location.v1.ListPrivateLocationsRequest + */ +export type ListPrivateLocationsRequest = + & Message<"openstatus.private_location.v1.ListPrivateLocationsRequest"> + & { + /** + * Maximum number of private locations to return (1-100, defaults to 50). + * + * @generated from field: optional int32 limit = 1; + */ + limit?: number; + + /** + * Number of private locations to skip for pagination (defaults to 0). + * + * @generated from field: optional int32 offset = 2; + */ + offset?: number; + }; + +/** + * Describes the message openstatus.private_location.v1.ListPrivateLocationsRequest. + * Use `create(ListPrivateLocationsRequestSchema)` to create a new message. + */ +export const ListPrivateLocationsRequestSchema: GenMessage< + ListPrivateLocationsRequest +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 4); + +/** + * ListPrivateLocationsResponse is the response containing private location summaries. + * + * @generated from message openstatus.private_location.v1.ListPrivateLocationsResponse + */ +export type ListPrivateLocationsResponse = + & Message<"openstatus.private_location.v1.ListPrivateLocationsResponse"> + & { + /** + * List of private locations. + * + * @generated from field: repeated openstatus.private_location.v1.PrivateLocationSummary private_locations = 1; + */ + privateLocations: PrivateLocationSummary[]; + + /** + * Total number of private locations in the workspace. + * + * @generated from field: int32 total_size = 2; + */ + totalSize: number; + }; + +/** + * Describes the message openstatus.private_location.v1.ListPrivateLocationsResponse. + * Use `create(ListPrivateLocationsResponseSchema)` to create a new message. + */ +export const ListPrivateLocationsResponseSchema: GenMessage< + ListPrivateLocationsResponse +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 5); + +/** + * UpdatePrivateLocationRequest is the request to update a private location. + * + * @generated from message openstatus.private_location.v1.UpdatePrivateLocationRequest + */ +export type UpdatePrivateLocationRequest = + & Message<"openstatus.private_location.v1.UpdatePrivateLocationRequest"> + & { + /** + * ID of the private location to update (required). + * + * @generated from field: string id = 1; + */ + id: string; + + /** + * New display name for the private location (optional). + * + * @generated from field: optional string name = 2; + */ + name?: string; + + /** + * New list of monitor IDs. Only applied when update_monitor_ids is true. + * + * @generated from field: repeated string monitor_ids = 3; + */ + monitorIds: string[]; + + /** + * When true, monitor_ids replaces the current associations (an empty list + * clears all). When false or unset, monitor_ids is ignored and existing + * associations are preserved. + * + * @generated from field: optional bool update_monitor_ids = 4; + */ + updateMonitorIds?: boolean; + + /** + * New key/value labels. Only applied when update_metadata is true. + * + * @generated from field: map metadata = 5; + */ + metadata: { [key: string]: string }; + + /** + * When true, metadata replaces the current labels (an empty map clears all). + * When false or unset, metadata is ignored and existing labels are preserved. + * + * @generated from field: optional bool update_metadata = 6; + */ + updateMetadata?: boolean; + }; + +/** + * Describes the message openstatus.private_location.v1.UpdatePrivateLocationRequest. + * Use `create(UpdatePrivateLocationRequestSchema)` to create a new message. + */ +export const UpdatePrivateLocationRequestSchema: GenMessage< + UpdatePrivateLocationRequest +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 6); + +/** + * UpdatePrivateLocationResponse is the response after updating a private location. + * + * @generated from message openstatus.private_location.v1.UpdatePrivateLocationResponse + */ +export type UpdatePrivateLocationResponse = + & Message<"openstatus.private_location.v1.UpdatePrivateLocationResponse"> + & { + /** + * The updated private location. + * + * @generated from field: openstatus.private_location.v1.PrivateLocation private_location = 1; + */ + privateLocation?: PrivateLocation; + }; + +/** + * Describes the message openstatus.private_location.v1.UpdatePrivateLocationResponse. + * Use `create(UpdatePrivateLocationResponseSchema)` to create a new message. + */ +export const UpdatePrivateLocationResponseSchema: GenMessage< + UpdatePrivateLocationResponse +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 7); + +/** + * DeletePrivateLocationRequest is the request to delete a private location. + * + * @generated from message openstatus.private_location.v1.DeletePrivateLocationRequest + */ +export type DeletePrivateLocationRequest = + & Message<"openstatus.private_location.v1.DeletePrivateLocationRequest"> + & { + /** + * ID of the private location to delete (required). + * + * @generated from field: string id = 1; + */ + id: string; + }; + +/** + * Describes the message openstatus.private_location.v1.DeletePrivateLocationRequest. + * Use `create(DeletePrivateLocationRequestSchema)` to create a new message. + */ +export const DeletePrivateLocationRequestSchema: GenMessage< + DeletePrivateLocationRequest +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 8); + +/** + * DeletePrivateLocationResponse is the response after deleting a private location. + * + * @generated from message openstatus.private_location.v1.DeletePrivateLocationResponse + */ +export type DeletePrivateLocationResponse = + & Message<"openstatus.private_location.v1.DeletePrivateLocationResponse"> + & { + /** + * Whether the deletion was successful. + * + * @generated from field: bool success = 1; + */ + success: boolean; + }; + +/** + * Describes the message openstatus.private_location.v1.DeletePrivateLocationResponse. + * Use `create(DeletePrivateLocationResponseSchema)` to create a new message. + */ +export const DeletePrivateLocationResponseSchema: GenMessage< + DeletePrivateLocationResponse +> = /*@__PURE__*/ + messageDesc(file_openstatus_private_location_v1_service, 9); + +/** + * PrivateLocationService provides CRUD operations for private locations — + * self-hosted checker agents that run monitors from your own network. + * + * @generated from service openstatus.private_location.v1.PrivateLocationService + */ +export const PrivateLocationService: GenService<{ + /** + * CreatePrivateLocation creates a new private location and returns its + * generated agent token. + * + * @generated from rpc openstatus.private_location.v1.PrivateLocationService.CreatePrivateLocation + */ + createPrivateLocation: { + methodKind: "unary"; + input: typeof CreatePrivateLocationRequestSchema; + output: typeof CreatePrivateLocationResponseSchema; + }; + /** + * GetPrivateLocation retrieves a single private location by ID, including + * its agent token. + * + * @generated from rpc openstatus.private_location.v1.PrivateLocationService.GetPrivateLocation + */ + getPrivateLocation: { + methodKind: "unary"; + input: typeof GetPrivateLocationRequestSchema; + output: typeof GetPrivateLocationResponseSchema; + }; + /** + * ListPrivateLocations returns a paginated list of private location + * summaries. Agent tokens are not included - use GetPrivateLocation. + * + * @generated from rpc openstatus.private_location.v1.PrivateLocationService.ListPrivateLocations + */ + listPrivateLocations: { + methodKind: "unary"; + input: typeof ListPrivateLocationsRequestSchema; + output: typeof ListPrivateLocationsResponseSchema; + }; + /** + * UpdatePrivateLocation updates a private location. + * + * @generated from rpc openstatus.private_location.v1.PrivateLocationService.UpdatePrivateLocation + */ + updatePrivateLocation: { + methodKind: "unary"; + input: typeof UpdatePrivateLocationRequestSchema; + output: typeof UpdatePrivateLocationResponseSchema; + }; + /** + * DeletePrivateLocation removes a private location. + * + * @generated from rpc openstatus.private_location.v1.PrivateLocationService.DeletePrivateLocation + */ + deletePrivateLocation: { + methodKind: "unary"; + input: typeof DeletePrivateLocationRequestSchema; + output: typeof DeletePrivateLocationResponseSchema; + }; +}> = /*@__PURE__*/ + serviceDesc(file_openstatus_private_location_v1_service, 0); diff --git a/src/gen/openstatus/status_page/v1/service_pb.ts b/src/gen/openstatus/status_page/v1/service_pb.ts index 02aa073..89a07cc 100644 --- a/src/gen/openstatus/status_page/v1/service_pb.ts +++ b/src/gen/openstatus/status_page/v1/service_pb.ts @@ -27,9 +27,11 @@ import { file_openstatus_status_page_v1_page_component } from "./page_component_ import type { PageSubscriber } from "./page_subscriber_pb.ts"; import { file_openstatus_status_page_v1_page_subscriber } from "./page_subscriber_pb.ts"; import type { + CustomTheme, Locale, OverallStatus, PageAccessType, + PageConfiguration, PageTheme, StatusPage, StatusPageSummary, @@ -47,7 +49,7 @@ import type { Message } from "@bufbuild/protobuf"; */ export const file_openstatus_status_page_v1_service: GenFile = /*@__PURE__*/ fileDesc( - "CidvcGVuc3RhdHVzL3N0YXR1c19wYWdlL3YxL3NlcnZpY2UucHJvdG8SGW9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEi6gYKF0NyZWF0ZVN0YXR1c1BhZ2VSZXF1ZXN0EjAKBXRpdGxlGAEgASgJQiG6RxQ6EhIQQWNtZSBDb3JwIFN0YXR1c7pIB3IFEAEYgAISIgoLZGVzY3JpcHRpb24YAiABKAlCCLpIBXIDGIAISACIAQESSQoEc2x1ZxgDIAEoCUI7ukcSOhASDm15LXN0YXR1cy1wYWdlukgjciEQARiAAjIaXlthLXowLTldKyg/Oi1bYS16MC05XSspKiQSOQoMaG9tZXBhZ2VfdXJsGAQgASgJQh66Rxs6GRIXaHR0cHM6Ly93d3cuZXhhbXBsZS5jb21IAYgBARIYCgtjb250YWN0X3VybBgFIAEoCUgCiAEBEj4KDmRlZmF1bHRfbG9jYWxlGAYgASgOMiEub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5Mb2NhbGVIA4gBARIyCgdsb2NhbGVzGAcgAygOMiEub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5Mb2NhbGUSGwoEaWNvbhgIIAEoCUIIukgFcgMYgAhIBIgBARIkCg1jdXN0b21fZG9tYWluGAkgASgJQgi6SAVyAxiAAkgFiAEBEjgKBXRoZW1lGAogASgOMiQub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlVGhlbWVIBogBARJDCgthY2Nlc3NfdHlwZRgLIAEoDjIpLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUFjY2Vzc1R5cGVIB4gBARIhCghwYXNzd29yZBgMIAEoCUIKukgHcgUQARiAAkgIiAEBEhoKEmF1dGhfZW1haWxfZG9tYWlucxgNIAMoCRIYCgthbGxvd19pbmRleBgOIAEoCEgJiAEBEh4KEWFsbG93ZWRfaXBfcmFuZ2VzGA8gASgJSAqIAQFCDgoMX2Rlc2NyaXB0aW9uQg8KDV9ob21lcGFnZV91cmxCDgoMX2NvbnRhY3RfdXJsQhEKD19kZWZhdWx0X2xvY2FsZUIHCgVfaWNvbkIQCg5fY3VzdG9tX2RvbWFpbkIICgZfdGhlbWVCDgoMX2FjY2Vzc190eXBlQgsKCV9wYXNzd29yZEIOCgxfYWxsb3dfaW5kZXhCFAoSX2FsbG93ZWRfaXBfcmFuZ2VzIlYKGENyZWF0ZVN0YXR1c1BhZ2VSZXNwb25zZRI6CgtzdGF0dXNfcGFnZRgBIAEoCzIlLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuU3RhdHVzUGFnZSIrChRHZXRTdGF0dXNQYWdlUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASJTChVHZXRTdGF0dXNQYWdlUmVzcG9uc2USOgoLc3RhdHVzX3BhZ2UYASABKAsyJS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlN0YXR1c1BhZ2UiagoWTGlzdFN0YXR1c1BhZ2VzUmVxdWVzdBIdCgVsaW1pdBgBIAEoBUIJukgGGgQYZCgBSACIAQESHAoGb2Zmc2V0GAIgASgFQge6SAQaAigASAGIAQFCCAoGX2xpbWl0QgkKB19vZmZzZXQicQoXTGlzdFN0YXR1c1BhZ2VzUmVzcG9uc2USQgoMc3RhdHVzX3BhZ2VzGAEgAygLMiwub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5TdGF0dXNQYWdlU3VtbWFyeRISCgp0b3RhbF9zaXplGAIgASgFItAGChdVcGRhdGVTdGF0dXNQYWdlUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQARIeCgV0aXRsZRgCIAEoCUIKukgHcgUQARiAAkgAiAEBEiIKC2Rlc2NyaXB0aW9uGAMgASgJQgi6SAVyAxiACEgBiAEBEjkKBHNsdWcYBCABKAlCJrpII3IhEAEYgAIyGl5bYS16MC05XSsoPzotW2EtejAtOV0rKSokSAKIAQESGQoMaG9tZXBhZ2VfdXJsGAUgASgJSAOIAQESGAoLY29udGFjdF91cmwYBiABKAlIBIgBARI+Cg5kZWZhdWx0X2xvY2FsZRgHIAEoDjIhLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTG9jYWxlSAWIAQESMgoHbG9jYWxlcxgIIAMoDjIhLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTG9jYWxlEhsKBGljb24YCSABKAlCCLpIBXIDGIAISAaIAQESJAoNY3VzdG9tX2RvbWFpbhgKIAEoCUIIukgFcgMYgAJIB4gBARI4CgV0aGVtZRgLIAEoDjIkLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZVRoZW1lSAiIAQESQwoLYWNjZXNzX3R5cGUYDCABKA4yKS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VBY2Nlc3NUeXBlSAmIAQESIQoIcGFzc3dvcmQYDSABKAlCCrpIB3IFEAEYgAJICogBARIaChJhdXRoX2VtYWlsX2RvbWFpbnMYDiADKAkSGAoLYWxsb3dfaW5kZXgYDyABKAhIC4gBARIeChFhbGxvd2VkX2lwX3JhbmdlcxgQIAEoCUgMiAEBQggKBl90aXRsZUIOCgxfZGVzY3JpcHRpb25CBwoFX3NsdWdCDwoNX2hvbWVwYWdlX3VybEIOCgxfY29udGFjdF91cmxCEQoPX2RlZmF1bHRfbG9jYWxlQgcKBV9pY29uQhAKDl9jdXN0b21fZG9tYWluQggKBl90aGVtZUIOCgxfYWNjZXNzX3R5cGVCCwoJX3Bhc3N3b3JkQg4KDF9hbGxvd19pbmRleEIUChJfYWxsb3dlZF9pcF9yYW5nZXMiVgoYVXBkYXRlU3RhdHVzUGFnZVJlc3BvbnNlEjoKC3N0YXR1c19wYWdlGAEgASgLMiUub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5TdGF0dXNQYWdlIi4KF0RlbGV0ZVN0YXR1c1BhZ2VSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIisKGERlbGV0ZVN0YXR1c1BhZ2VSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIu8BChpBZGRNb25pdG9yQ29tcG9uZW50UmVxdWVzdBIYCgdwYWdlX2lkGAEgASgJQge6SARyAhABEhsKCm1vbml0b3JfaWQYAiABKAlCB7pIBHICEAESGwoEbmFtZRgDIAEoCUIIukgFcgMYgAJIAIgBARIiCgtkZXNjcmlwdGlvbhgEIAEoCUIIukgFcgMYgAhIAYgBARISCgVvcmRlchgFIAEoBUgCiAEBEhUKCGdyb3VwX2lkGAYgASgJSAOIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQggKBl9vcmRlckILCglfZ3JvdXBfaWQiWgobQWRkTW9uaXRvckNvbXBvbmVudFJlc3BvbnNlEjsKCWNvbXBvbmVudBgBIAEoCzIoLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbXBvbmVudCLFAQoZQWRkU3RhdGljQ29tcG9uZW50UmVxdWVzdBIYCgdwYWdlX2lkGAEgASgJQge6SARyAhABEhgKBG5hbWUYAiABKAlCCrpIB3IFEAEYgAISIgoLZGVzY3JpcHRpb24YAyABKAlCCLpIBXIDGIAISACIAQESEgoFb3JkZXIYBCABKAVIAYgBARIVCghncm91cF9pZBgFIAEoCUgCiAEBQg4KDF9kZXNjcmlwdGlvbkIICgZfb3JkZXJCCwoJX2dyb3VwX2lkIlkKGkFkZFN0YXRpY0NvbXBvbmVudFJlc3BvbnNlEjsKCWNvbXBvbmVudBgBIAEoCzIoLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbXBvbmVudCItChZSZW1vdmVDb21wb25lbnRSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIioKF1JlbW92ZUNvbXBvbmVudFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgi8wEKFlVwZGF0ZUNvbXBvbmVudFJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAESGwoEbmFtZRgCIAEoCUIIukgFcgMYgAJIAIgBARIiCgtkZXNjcmlwdGlvbhgDIAEoCUIIukgFcgMYgAhIAYgBARISCgVvcmRlchgEIAEoBUgCiAEBEhUKCGdyb3VwX2lkGAUgASgJSAOIAQESGAoLZ3JvdXBfb3JkZXIYBiABKAVIBIgBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX29yZGVyQgsKCV9ncm91cF9pZEIOCgxfZ3JvdXBfb3JkZXIiVgoXVXBkYXRlQ29tcG9uZW50UmVzcG9uc2USOwoJY29tcG9uZW50GAEgASgLMigub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlQ29tcG9uZW50In0KG0NyZWF0ZUNvbXBvbmVudEdyb3VwUmVxdWVzdBIYCgdwYWdlX2lkGAEgASgJQge6SARyAhABEhgKBG5hbWUYAiABKAlCCrpIB3IFEAEYgAISGQoMZGVmYXVsdF9vcGVuGAMgASgISACIAQFCDwoNX2RlZmF1bHRfb3BlbiJcChxDcmVhdGVDb21wb25lbnRHcm91cFJlc3BvbnNlEjwKBWdyb3VwGAEgASgLMi0ub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlQ29tcG9uZW50R3JvdXAiMgobRGVsZXRlQ29tcG9uZW50R3JvdXBSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIi8KHERlbGV0ZUNvbXBvbmVudEdyb3VwUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCKGAQobVXBkYXRlQ29tcG9uZW50R3JvdXBSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABEh0KBG5hbWUYAiABKAlCCrpIB3IFEAEYgAJIAIgBARIZCgxkZWZhdWx0X29wZW4YAyABKAhIAYgBAUIHCgVfbmFtZUIPCg1fZGVmYXVsdF9vcGVuIlwKHFVwZGF0ZUNvbXBvbmVudEdyb3VwUmVzcG9uc2USPAoFZ3JvdXAYASABKAsyLS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VDb21wb25lbnRHcm91cCJhChZTdWJzY3JpYmVUb1BhZ2VSZXF1ZXN0EhgKB3BhZ2VfaWQYASABKAlCB7pIBHICEAESLQoFZW1haWwYAiABKAlCHrpHFDoSEhB1c2VyQGV4YW1wbGUuY29tukgEcgJgASJYChdTdWJzY3JpYmVUb1BhZ2VSZXNwb25zZRI9CgpzdWJzY3JpYmVyGAEgASgLMikub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlU3Vic2NyaWJlciImCgxFbWFpbENoYW5uZWwSFgoFZW1haWwYASABKAlCB7pIBHICYAEiOwoUV2ViaG9va0NoYW5uZWxIZWFkZXISFAoDa2V5GAEgASgJQge6SARyAhABEg0KBXZhbHVlGAIgASgJInYKDldlYmhvb2tDaGFubmVsEiIKC3dlYmhvb2tfdXJsGAEgASgJQg26SApyCBABGIAQiAEBEkAKB2hlYWRlcnMYAiADKAsyLy5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLldlYmhvb2tDaGFubmVsSGVhZGVyIpACCh1DcmVhdGVQYWdlU3Vic2NyaXB0aW9uUmVxdWVzdBIYCgdwYWdlX2lkGAEgASgJQge6SARyAhABEhsKBG5hbWUYAiABKAlCCLpIBXIDGP8BSAGIAQESFQoNY29tcG9uZW50X2lkcxgDIAMoCRJACg1lbWFpbF9jaGFubmVsGAogASgLMicub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5FbWFpbENoYW5uZWxIABJECg93ZWJob29rX2NoYW5uZWwYCyABKAsyKS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLldlYmhvb2tDaGFubmVsSABCEAoHY2hhbm5lbBIFukgCCAFCBwoFX25hbWUiXwoeQ3JlYXRlUGFnZVN1YnNjcmlwdGlvblJlc3BvbnNlEj0KCnN1YnNjcmliZXIYASABKAsyKS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VTdWJzY3JpYmVyImMKGlVuc3Vic2NyaWJlRnJvbVBhZ2VSZXF1ZXN0EhgKB3BhZ2VfaWQYASABKAlCB7pIBHICEAESDwoFZW1haWwYAiABKAlIABIMCgJpZBgDIAEoCUgAQgwKCmlkZW50aWZpZXIiLgobVW5zdWJzY3JpYmVGcm9tUGFnZVJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiwAEKFkxpc3RTdWJzY3JpYmVyc1JlcXVlc3QSGAoHcGFnZV9pZBgBIAEoCUIHukgEcgIQARIdCgVsaW1pdBgCIAEoBUIJukgGGgQYZCgBSACIAQESHAoGb2Zmc2V0GAMgASgFQge6SAQaAigASAGIAQESIQoUaW5jbHVkZV91bnN1YnNjcmliZWQYBCABKAhIAogBAUIICgZfbGltaXRCCQoHX29mZnNldEIXChVfaW5jbHVkZV91bnN1YnNjcmliZWQibQoXTGlzdFN1YnNjcmliZXJzUmVzcG9uc2USPgoLc3Vic2NyaWJlcnMYASADKAsyKS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VTdWJzY3JpYmVyEhIKCnRvdGFsX3NpemUYAiABKAUiSQobR2V0U3RhdHVzUGFnZUNvbnRlbnRSZXF1ZXN0EgwKAmlkGAEgASgJSAASDgoEc2x1ZxgCIAEoCUgAQgwKCmlkZW50aWZpZXIi3wIKHEdldFN0YXR1c1BhZ2VDb250ZW50UmVzcG9uc2USOgoLc3RhdHVzX3BhZ2UYASABKAsyJS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlN0YXR1c1BhZ2USPAoKY29tcG9uZW50cxgCIAMoCzIoLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbXBvbmVudBI9CgZncm91cHMYAyADKAsyLS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VDb21wb25lbnRHcm91cBJBCg5zdGF0dXNfcmVwb3J0cxgEIAMoCzIpLm9wZW5zdGF0dXMuc3RhdHVzX3JlcG9ydC52MS5TdGF0dXNSZXBvcnQSQwoMbWFpbnRlbmFuY2VzGAUgAygLMi0ub3BlbnN0YXR1cy5tYWludGVuYW5jZS52MS5NYWludGVuYW5jZVN1bW1hcnkiRQoXR2V0T3ZlcmFsbFN0YXR1c1JlcXVlc3QSDAoCaWQYASABKAlIABIOCgRzbHVnGAIgASgJSABCDAoKaWRlbnRpZmllciJhCg9Db21wb25lbnRTdGF0dXMSFAoMY29tcG9uZW50X2lkGAEgASgJEjgKBnN0YXR1cxgCIAEoDjIoLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuT3ZlcmFsbFN0YXR1cyKkAQoYR2V0T3ZlcmFsbFN0YXR1c1Jlc3BvbnNlEkAKDm92ZXJhbGxfc3RhdHVzGAEgASgOMigub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5PdmVyYWxsU3RhdHVzEkYKEmNvbXBvbmVudF9zdGF0dXNlcxgCIAMoCzIqLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ29tcG9uZW50U3RhdHVzIp0BCiNHZXRQYWdlQ29tcG9uZW50RGFpbHlTdW1tYXJ5UmVxdWVzdBIMCgJpZBgBIAEoCUgAEg4KBHNsdWcYAiABKAlIABIjCg1jb21wb25lbnRfaWRzGAMgAygJQgy6SAmSAQYiBHICEAESHAoEZGF5cxgEIAEoBUIJukgGGgQYLSgBSAGIAQFCDAoKaWRlbnRpZmllckIHCgVfZGF5cyLuAQoSQ29tcG9uZW50RGF5QnVja2V0EgsKA2RheRgBIAEoCRINCgVjb3VudBgCIAEoAxIKCgJvaxgDIAEoAxIQCghkZWdyYWRlZBgEIAEoAxINCgVlcnJvchgFIAEoAxI9CgZzdGF0dXMYBiABKA4yLS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkNvbXBvbmVudERheVN0YXR1cxJFCgZpbXBhY3QYByABKA4yMC5vcGVuc3RhdHVzLnN0YXR1c19yZXBvcnQudjEuUGFnZUNvbXBvbmVudEltcGFjdEgAiAEBQgkKB19pbXBhY3QioAIKDkNvbXBvbmVudEV2ZW50EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSOwoEdHlwZRgDIAEoDjItLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ29tcG9uZW50RXZlbnRUeXBlEj8KBnN0YXR1cxgEIAEoDjIvLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ29tcG9uZW50RXZlbnRTdGF0dXMSDAoEZnJvbRgFIAEoCRIPCgJ0bxgGIAEoCUgAiAEBEkUKBmltcGFjdBgHIAEoDjIwLm9wZW5zdGF0dXMuc3RhdHVzX3JlcG9ydC52MS5QYWdlQ29tcG9uZW50SW1wYWN0SAGIAQFCBQoDX3RvQgkKB19pbXBhY3QingIKGVBhZ2VDb21wb25lbnREYWlseVN1bW1hcnkSFAoMY29tcG9uZW50X2lkGAEgASgJEjoKBHR5cGUYAiABKA4yLC5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VDb21wb25lbnRUeXBlEhcKCm1vbml0b3JfaWQYAyABKAlIAIgBARIMCgRuYW1lGAQgASgJEj4KB2J1Y2tldHMYBSADKAsyLS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkNvbXBvbmVudERheUJ1Y2tldBI5CgZldmVudHMYBiADKAsyKS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkNvbXBvbmVudEV2ZW50Qg0KC19tb25pdG9yX2lkInAKJEdldFBhZ2VDb21wb25lbnREYWlseVN1bW1hcnlSZXNwb25zZRJICgpjb21wb25lbnRzGAEgAygLMjQub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlQ29tcG9uZW50RGFpbHlTdW1tYXJ5KugBChJDb21wb25lbnREYXlTdGF0dXMSJAogQ09NUE9ORU5UX0RBWV9TVEFUVVNfVU5TUEVDSUZJRUQQABIkCiBDT01QT05FTlRfREFZX1NUQVRVU19PUEVSQVRJT05BTBABEiEKHUNPTVBPTkVOVF9EQVlfU1RBVFVTX0RFR1JBREVEEAISHQoZQ09NUE9ORU5UX0RBWV9TVEFUVVNfRE9XThADEiQKIENPTVBPTkVOVF9EQVlfU1RBVFVTX01BSU5URU5BTkNFEAQSHgoaQ09NUE9ORU5UX0RBWV9TVEFUVVNfRU1QVFkQBSqkAQoSQ29tcG9uZW50RXZlbnRUeXBlEiQKIENPTVBPTkVOVF9FVkVOVF9UWVBFX1VOU1BFQ0lGSUVEEAASJAogQ09NUE9ORU5UX0VWRU5UX1RZUEVfTUFJTlRFTkFOQ0UQARIhCh1DT01QT05FTlRfRVZFTlRfVFlQRV9JTkNJREVOVBACEh8KG0NPTVBPTkVOVF9FVkVOVF9UWVBFX1JFUE9SVBADKtQBChRDb21wb25lbnRFdmVudFN0YXR1cxImCiJDT01QT05FTlRfRVZFTlRfU1RBVFVTX1VOU1BFQ0lGSUVEEAASJgoiQ09NUE9ORU5UX0VWRU5UX1NUQVRVU19PUEVSQVRJT05BTBABEiMKH0NPTVBPTkVOVF9FVkVOVF9TVEFUVVNfREVHUkFERUQQAhIfChtDT01QT05FTlRfRVZFTlRfU1RBVFVTX0RPV04QAxImCiJDT01QT05FTlRfRVZFTlRfU1RBVFVTX01BSU5URU5BTkNFEAQyqSMKEVN0YXR1c1BhZ2VTZXJ2aWNlEnsKEENyZWF0ZVN0YXR1c1BhZ2USMi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkNyZWF0ZVN0YXR1c1BhZ2VSZXF1ZXN0GjMub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5DcmVhdGVTdGF0dXNQYWdlUmVzcG9uc2USdwoNR2V0U3RhdHVzUGFnZRIvLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuR2V0U3RhdHVzUGFnZVJlcXVlc3QaMC5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkdldFN0YXR1c1BhZ2VSZXNwb25zZSIDkAIBEn0KD0xpc3RTdGF0dXNQYWdlcxIxLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTGlzdFN0YXR1c1BhZ2VzUmVxdWVzdBoyLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTGlzdFN0YXR1c1BhZ2VzUmVzcG9uc2UiA5ACARJ7ChBVcGRhdGVTdGF0dXNQYWdlEjIub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5VcGRhdGVTdGF0dXNQYWdlUmVxdWVzdBozLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuVXBkYXRlU3RhdHVzUGFnZVJlc3BvbnNlEnsKEERlbGV0ZVN0YXR1c1BhZ2USMi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkRlbGV0ZVN0YXR1c1BhZ2VSZXF1ZXN0GjMub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5EZWxldGVTdGF0dXNQYWdlUmVzcG9uc2UShAEKE0FkZE1vbml0b3JDb21wb25lbnQSNS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkFkZE1vbml0b3JDb21wb25lbnRSZXF1ZXN0GjYub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5BZGRNb25pdG9yQ29tcG9uZW50UmVzcG9uc2USgQEKEkFkZFN0YXRpY0NvbXBvbmVudBI0Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQWRkU3RhdGljQ29tcG9uZW50UmVxdWVzdBo1Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQWRkU3RhdGljQ29tcG9uZW50UmVzcG9uc2USeAoPUmVtb3ZlQ29tcG9uZW50EjEub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5SZW1vdmVDb21wb25lbnRSZXF1ZXN0GjIub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5SZW1vdmVDb21wb25lbnRSZXNwb25zZRJ4Cg9VcGRhdGVDb21wb25lbnQSMS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlVwZGF0ZUNvbXBvbmVudFJlcXVlc3QaMi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlVwZGF0ZUNvbXBvbmVudFJlc3BvbnNlEocBChRDcmVhdGVDb21wb25lbnRHcm91cBI2Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ3JlYXRlQ29tcG9uZW50R3JvdXBSZXF1ZXN0Gjcub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5DcmVhdGVDb21wb25lbnRHcm91cFJlc3BvbnNlEocBChREZWxldGVDb21wb25lbnRHcm91cBI2Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuRGVsZXRlQ29tcG9uZW50R3JvdXBSZXF1ZXN0Gjcub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5EZWxldGVDb21wb25lbnRHcm91cFJlc3BvbnNlEocBChRVcGRhdGVDb21wb25lbnRHcm91cBI2Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuVXBkYXRlQ29tcG9uZW50R3JvdXBSZXF1ZXN0Gjcub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5VcGRhdGVDb21wb25lbnRHcm91cFJlc3BvbnNlErkECg9TdWJzY3JpYmVUb1BhZ2USMS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlN1YnNjcmliZVRvUGFnZVJlcXVlc3QaMi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlN1YnNjcmliZVRvUGFnZVJlc3BvbnNlIr4Duke6Axq3A0VuZC11c2VyIGVtYWlsIHNlbGYtc2lnbnVwIHdpdGggZG91YmxlIG9wdC1pbiB2ZXJpZmljYXRpb24uIEEgdmVyaWZpY2F0aW9uIGVtYWlsIGlzIHNlbnQgYW5kIHRoZSBzdWJzY3JpcHRpb24gYWN0aXZhdGVzIG9ubHkgYWZ0ZXIgdGhlIHJlY2lwaWVudCBjb25maXJtcy4gSWYgdGhlIGVtYWlsIHdhcyBwcmV2aW91c2x5IHVuc3Vic2NyaWJlZCwgdGhlIGV4aXN0aW5nIHJvdyBpcyByZWFjdGl2YXRlZCBpbnN0ZWFkIG9mIGEgZHVwbGljYXRlIGJlaW5nIGNyZWF0ZWQuIFVzZSB0aGlzIGZvciBzdWJzY3JpYmVyLWluaXRpYXRlZCBzaWdudXBzIG9uIHRoZSBwdWJsaWMgc3RhdHVzIHBhZ2U7IHVzZSBDcmVhdGVQYWdlU3Vic2NyaXB0aW9uIGZvciBvcGVyYXRvci1pbml0aWF0ZWQgKHZlbmRvcikgc3Vic2NyaXB0aW9ucyB0aGF0IHNob3VsZCBza2lwIHZlcmlmaWNhdGlvbi4S/QQKFkNyZWF0ZVBhZ2VTdWJzY3JpcHRpb24SOC5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkNyZWF0ZVBhZ2VTdWJzY3JpcHRpb25SZXF1ZXN0Gjkub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5DcmVhdGVQYWdlU3Vic2NyaXB0aW9uUmVzcG9uc2Ui7QO6R+kDGuYDT3BlcmF0b3ItYWRkZWQgc3Vic2NyaWJlciAoZW1haWwgb3Igd2ViaG9vaykgd2l0aCBubyB2ZXJpZmljYXRpb24gZmxvdyDigJQgdGhlIHBhcnRuZXIgc3RhcnRzIHJlY2VpdmluZyBub3RpZmljYXRpb25zIGltbWVkaWF0ZWx5LiBTdXBwb3J0cyBTbGFjayBhbmQgRGlzY29yZCB3ZWJob29rIFVSTHMgaW4gYWRkaXRpb24gdG8gZW1haWwuIEEgbWFuYWdlbWVudCB0b2tlbiBpcyBzdGlsbCBnZW5lcmF0ZWQgc28gdGhlIHN1YnNjcmliZXIgY2FuIHNlbGYtbWFuYWdlICh1cGRhdGUgc2NvcGUsIHVuc3Vic2NyaWJlKSB3aXRob3V0IG9wZXJhdG9yIGludm9sdmVtZW50LiBVc2UgdGhpcyBmb3IgdmVuZG9yL3BhcnRuZXIgaW50ZWdyYXRpb25zIHdoZXJlIGNvbnNlbnQgaXMgZXN0YWJsaXNoZWQgb3V0LW9mLWJhbmQ7IHVzZSBTdWJzY3JpYmVUb1BhZ2UgZm9yIHN1YnNjcmliZXItaW5pdGlhdGVkIHNpZ251cHMgdGhhdCByZXF1aXJlIGRvdWJsZSBvcHQtaW4uEoQBChNVbnN1YnNjcmliZUZyb21QYWdlEjUub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5VbnN1YnNjcmliZUZyb21QYWdlUmVxdWVzdBo2Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuVW5zdWJzY3JpYmVGcm9tUGFnZVJlc3BvbnNlEn0KD0xpc3RTdWJzY3JpYmVycxIxLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTGlzdFN1YnNjcmliZXJzUmVxdWVzdBoyLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTGlzdFN1YnNjcmliZXJzUmVzcG9uc2UiA5ACARLAAwoUR2V0U3RhdHVzUGFnZUNvbnRlbnQSNi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkdldFN0YXR1c1BhZ2VDb250ZW50UmVxdWVzdBo3Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuR2V0U3RhdHVzUGFnZUNvbnRlbnRSZXNwb25zZSK2ApACAbpHrwIarAJSZXR1cm5zIHRoZSBmdWxsIGNvbnRlbnQgb2YgYSBzdGF0dXMgcGFnZSBpbmNsdWRpbmcgaXRzIGNvbXBvbmVudHMsIGNvbXBvbmVudCBncm91cHMsIGFjdGl2ZSBzdGF0dXMgcmVwb3J0cywgYW5kIHNjaGVkdWxlZCBtYWludGVuYW5jZXMuIFN1cHBvcnRzIHR3byBhY2Nlc3MgcGF0aHM6IGJ5IElEIChyZXF1aXJlcyBhdXRoZW50aWNhdGlvbiwgd29ya3NwYWNlLXNjb3BlZCkgb3IgYnkgc2x1ZyAocHVibGljIGFjY2VzcywgcmVxdWlyZXMgdGhlIHBhZ2UgdG8gYmUgcHVibGlzaGVkIHdpdGggYWNjZXNzX3R5cGU9UFVCTElDKS4SqgMKEEdldE92ZXJhbGxTdGF0dXMSMi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkdldE92ZXJhbGxTdGF0dXNSZXF1ZXN0GjMub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5HZXRPdmVyYWxsU3RhdHVzUmVzcG9uc2UirAKQAgG6R6UCGqICUmV0dXJucyB0aGUgb3ZlcmFsbCBzdGF0dXMgb2YgYSBzdGF0dXMgcGFnZSBhbG9uZyB3aXRoIGluZGl2aWR1YWwgY29tcG9uZW50IHN0YXR1c2VzLiBUaGUgb3ZlcmFsbCBzdGF0dXMgaXMgY29tcHV0ZWQgZnJvbSBhY3RpdmUgc3RhdHVzIHJlcG9ydHMgYW5kIG1haW50ZW5hbmNlcyB3aXRoIHRoZSBmb2xsb3dpbmcgcHJpb3JpdHk6IGRlZ3JhZGVkIChmcm9tIGFjdGl2ZSBzdGF0dXMgcmVwb3J0cykgPiBtYWludGVuYW5jZSAoZnJvbSBhY3RpdmUgbWFpbnRlbmFuY2Ugd2luZG93cykgPiBvcGVyYXRpb25hbC4S1QQKHEdldFBhZ2VDb21wb25lbnREYWlseVN1bW1hcnkSPi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkdldFBhZ2VDb21wb25lbnREYWlseVN1bW1hcnlSZXF1ZXN0Gj8ub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5HZXRQYWdlQ29tcG9uZW50RGFpbHlTdW1tYXJ5UmVzcG9uc2UiswOQAgG6R6wDGqkDUmV0dXJucyBwZXItY29tcG9uZW50IGRhaWx5IHN0YXR1cyBidWNrZXRzIChvay9kZWdyYWRlZC9lcnJvci9jb3VudCBwbHVzIGEgcmVzb2x2ZWQgc3RhdHVzKSBtZXJnZWQgd2l0aCB0aGUgaW5jaWRlbnQsIG1haW50ZW5hbmNlLCBhbmQgc3RhdHVzLXJlcG9ydCB0aW1lbGluZSBvdmVyIHRoZSBsYXN0IE4gZGF5cyAobWF4IDQ1KS4gU3VpdGFibGUgYXMgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBzdGF0dXMtYmFyIGFuZCB1cHRpbWUtY2FsZW5kYXIgcmVuZGVyaW5nLiBTdXBwb3J0cyB0d28gYWNjZXNzIHBhdGhzOiBieSBpZCAoYXV0aGVudGljYXRlZCwgd29ya3NwYWNlLXNjb3BlZCkgb3IgYnkgc2x1ZyAocHVibGljIGFjY2VzcywgcmVxdWlyZXMgdGhlIHBhZ2UgdG8gYmUgcHVibGlzaGVkIHdpdGggYWNjZXNzX3R5cGU9UFVCTElDKS5CWlpYZ2l0aHViLmNvbS9vcGVuc3RhdHVzaHEvb3BlbnN0YXR1cy9wYWNrYWdlcy9wcm90by9vcGVuc3RhdHVzL3N0YXR1c19wYWdlL3YxO3N0YXR1c3BhZ2V2MWIGcHJvdG8z", + "CidvcGVuc3RhdHVzL3N0YXR1c19wYWdlL3YxL3NlcnZpY2UucHJvdG8SGW9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEivgcKF0NyZWF0ZVN0YXR1c1BhZ2VSZXF1ZXN0EjAKBXRpdGxlGAEgASgJQiG6RxQ6EhIQQWNtZSBDb3JwIFN0YXR1c7pIB3IFEAEYgAISIgoLZGVzY3JpcHRpb24YAiABKAlCCLpIBXIDGIAISACIAQESSQoEc2x1ZxgDIAEoCUI7ukcSOhASDm15LXN0YXR1cy1wYWdlukgjciEQARiAAjIaXlthLXowLTldKyg/Oi1bYS16MC05XSspKiQSOQoMaG9tZXBhZ2VfdXJsGAQgASgJQh66Rxs6GRIXaHR0cHM6Ly93d3cuZXhhbXBsZS5jb21IAYgBARIYCgtjb250YWN0X3VybBgFIAEoCUgCiAEBEj4KDmRlZmF1bHRfbG9jYWxlGAYgASgOMiEub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5Mb2NhbGVIA4gBARIyCgdsb2NhbGVzGAcgAygOMiEub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5Mb2NhbGUSGwoEaWNvbhgIIAEoCUIIukgFcgMYgAhIBIgBARIkCg1jdXN0b21fZG9tYWluGAkgASgJQgi6SAVyAxiAAkgFiAEBEjgKBXRoZW1lGAogASgOMiQub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlVGhlbWVIBogBARJDCgthY2Nlc3NfdHlwZRgLIAEoDjIpLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUFjY2Vzc1R5cGVIB4gBARIhCghwYXNzd29yZBgMIAEoCUIKukgHcgUQARiAAkgIiAEBEhoKEmF1dGhfZW1haWxfZG9tYWlucxgNIAMoCRIYCgthbGxvd19pbmRleBgOIAEoCEgJiAEBEh4KEWFsbG93ZWRfaXBfcmFuZ2VzGA8gASgJSAqIAQESQQoMY3VzdG9tX3RoZW1lGBAgASgLMiYub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5DdXN0b21UaGVtZUgLiAEBQg4KDF9kZXNjcmlwdGlvbkIPCg1faG9tZXBhZ2VfdXJsQg4KDF9jb250YWN0X3VybEIRCg9fZGVmYXVsdF9sb2NhbGVCBwoFX2ljb25CEAoOX2N1c3RvbV9kb21haW5CCAoGX3RoZW1lQg4KDF9hY2Nlc3NfdHlwZUILCglfcGFzc3dvcmRCDgoMX2FsbG93X2luZGV4QhQKEl9hbGxvd2VkX2lwX3Jhbmdlc0IPCg1fY3VzdG9tX3RoZW1lIlYKGENyZWF0ZVN0YXR1c1BhZ2VSZXNwb25zZRI6CgtzdGF0dXNfcGFnZRgBIAEoCzIlLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuU3RhdHVzUGFnZSIrChRHZXRTdGF0dXNQYWdlUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASJTChVHZXRTdGF0dXNQYWdlUmVzcG9uc2USOgoLc3RhdHVzX3BhZ2UYASABKAsyJS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlN0YXR1c1BhZ2UiagoWTGlzdFN0YXR1c1BhZ2VzUmVxdWVzdBIdCgVsaW1pdBgBIAEoBUIJukgGGgQYZCgBSACIAQESHAoGb2Zmc2V0GAIgASgFQge6SAQaAigASAGIAQFCCAoGX2xpbWl0QgkKB19vZmZzZXQicQoXTGlzdFN0YXR1c1BhZ2VzUmVzcG9uc2USQgoMc3RhdHVzX3BhZ2VzGAEgAygLMiwub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5TdGF0dXNQYWdlU3VtbWFyeRISCgp0b3RhbF9zaXplGAIgASgFIqQHChdVcGRhdGVTdGF0dXNQYWdlUmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQARIeCgV0aXRsZRgCIAEoCUIKukgHcgUQARiAAkgAiAEBEiIKC2Rlc2NyaXB0aW9uGAMgASgJQgi6SAVyAxiACEgBiAEBEjkKBHNsdWcYBCABKAlCJrpII3IhEAEYgAIyGl5bYS16MC05XSsoPzotW2EtejAtOV0rKSokSAKIAQESGQoMaG9tZXBhZ2VfdXJsGAUgASgJSAOIAQESGAoLY29udGFjdF91cmwYBiABKAlIBIgBARI+Cg5kZWZhdWx0X2xvY2FsZRgHIAEoDjIhLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTG9jYWxlSAWIAQESMgoHbG9jYWxlcxgIIAMoDjIhLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTG9jYWxlEhsKBGljb24YCSABKAlCCLpIBXIDGIAISAaIAQESJAoNY3VzdG9tX2RvbWFpbhgKIAEoCUIIukgFcgMYgAJIB4gBARI4CgV0aGVtZRgLIAEoDjIkLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZVRoZW1lSAiIAQESQwoLYWNjZXNzX3R5cGUYDCABKA4yKS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VBY2Nlc3NUeXBlSAmIAQESIQoIcGFzc3dvcmQYDSABKAlCCrpIB3IFEAEYgAJICogBARIaChJhdXRoX2VtYWlsX2RvbWFpbnMYDiADKAkSGAoLYWxsb3dfaW5kZXgYDyABKAhIC4gBARIeChFhbGxvd2VkX2lwX3JhbmdlcxgQIAEoCUgMiAEBEkEKDGN1c3RvbV90aGVtZRgRIAEoCzImLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ3VzdG9tVGhlbWVIDYgBAUIICgZfdGl0bGVCDgoMX2Rlc2NyaXB0aW9uQgcKBV9zbHVnQg8KDV9ob21lcGFnZV91cmxCDgoMX2NvbnRhY3RfdXJsQhEKD19kZWZhdWx0X2xvY2FsZUIHCgVfaWNvbkIQCg5fY3VzdG9tX2RvbWFpbkIICgZfdGhlbWVCDgoMX2FjY2Vzc190eXBlQgsKCV9wYXNzd29yZEIOCgxfYWxsb3dfaW5kZXhCFAoSX2FsbG93ZWRfaXBfcmFuZ2VzQg8KDV9jdXN0b21fdGhlbWUiVgoYVXBkYXRlU3RhdHVzUGFnZVJlc3BvbnNlEjoKC3N0YXR1c19wYWdlGAEgASgLMiUub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5TdGF0dXNQYWdlIi4KF0RlbGV0ZVN0YXR1c1BhZ2VSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIisKGERlbGV0ZVN0YXR1c1BhZ2VSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIu8BChpBZGRNb25pdG9yQ29tcG9uZW50UmVxdWVzdBIYCgdwYWdlX2lkGAEgASgJQge6SARyAhABEhsKCm1vbml0b3JfaWQYAiABKAlCB7pIBHICEAESGwoEbmFtZRgDIAEoCUIIukgFcgMYgAJIAIgBARIiCgtkZXNjcmlwdGlvbhgEIAEoCUIIukgFcgMYgAhIAYgBARISCgVvcmRlchgFIAEoBUgCiAEBEhUKCGdyb3VwX2lkGAYgASgJSAOIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQggKBl9vcmRlckILCglfZ3JvdXBfaWQiWgobQWRkTW9uaXRvckNvbXBvbmVudFJlc3BvbnNlEjsKCWNvbXBvbmVudBgBIAEoCzIoLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbXBvbmVudCLFAQoZQWRkU3RhdGljQ29tcG9uZW50UmVxdWVzdBIYCgdwYWdlX2lkGAEgASgJQge6SARyAhABEhgKBG5hbWUYAiABKAlCCrpIB3IFEAEYgAISIgoLZGVzY3JpcHRpb24YAyABKAlCCLpIBXIDGIAISACIAQESEgoFb3JkZXIYBCABKAVIAYgBARIVCghncm91cF9pZBgFIAEoCUgCiAEBQg4KDF9kZXNjcmlwdGlvbkIICgZfb3JkZXJCCwoJX2dyb3VwX2lkIlkKGkFkZFN0YXRpY0NvbXBvbmVudFJlc3BvbnNlEjsKCWNvbXBvbmVudBgBIAEoCzIoLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbXBvbmVudCItChZSZW1vdmVDb21wb25lbnRSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIioKF1JlbW92ZUNvbXBvbmVudFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgi8wEKFlVwZGF0ZUNvbXBvbmVudFJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAESGwoEbmFtZRgCIAEoCUIIukgFcgMYgAJIAIgBARIiCgtkZXNjcmlwdGlvbhgDIAEoCUIIukgFcgMYgAhIAYgBARISCgVvcmRlchgEIAEoBUgCiAEBEhUKCGdyb3VwX2lkGAUgASgJSAOIAQESGAoLZ3JvdXBfb3JkZXIYBiABKAVIBIgBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX29yZGVyQgsKCV9ncm91cF9pZEIOCgxfZ3JvdXBfb3JkZXIiVgoXVXBkYXRlQ29tcG9uZW50UmVzcG9uc2USOwoJY29tcG9uZW50GAEgASgLMigub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlQ29tcG9uZW50Ii4KF0dldFBhZ2VDb21wb25lbnRSZXF1ZXN0EhMKAmlkGAEgASgJQge6SARyAhABIlcKGEdldFBhZ2VDb21wb25lbnRSZXNwb25zZRI7Cgljb21wb25lbnQYASABKAsyKC5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VDb21wb25lbnQifQobQ3JlYXRlQ29tcG9uZW50R3JvdXBSZXF1ZXN0EhgKB3BhZ2VfaWQYASABKAlCB7pIBHICEAESGAoEbmFtZRgCIAEoCUIKukgHcgUQARiAAhIZCgxkZWZhdWx0X29wZW4YAyABKAhIAIgBAUIPCg1fZGVmYXVsdF9vcGVuIlwKHENyZWF0ZUNvbXBvbmVudEdyb3VwUmVzcG9uc2USPAoFZ3JvdXAYASABKAsyLS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VDb21wb25lbnRHcm91cCIyChtEZWxldGVDb21wb25lbnRHcm91cFJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAEiLwocRGVsZXRlQ29tcG9uZW50R3JvdXBSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIoYBChtVcGRhdGVDb21wb25lbnRHcm91cFJlcXVlc3QSEwoCaWQYASABKAlCB7pIBHICEAESHQoEbmFtZRgCIAEoCUIKukgHcgUQARiAAkgAiAEBEhkKDGRlZmF1bHRfb3BlbhgDIAEoCEgBiAEBQgcKBV9uYW1lQg8KDV9kZWZhdWx0X29wZW4iXAocVXBkYXRlQ29tcG9uZW50R3JvdXBSZXNwb25zZRI8CgVncm91cBgBIAEoCzItLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbXBvbmVudEdyb3VwImEKFlN1YnNjcmliZVRvUGFnZVJlcXVlc3QSGAoHcGFnZV9pZBgBIAEoCUIHukgEcgIQARItCgVlbWFpbBgCIAEoCUIeukcUOhISEHVzZXJAZXhhbXBsZS5jb226SARyAmABIlgKF1N1YnNjcmliZVRvUGFnZVJlc3BvbnNlEj0KCnN1YnNjcmliZXIYASABKAsyKS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VTdWJzY3JpYmVyIiYKDEVtYWlsQ2hhbm5lbBIWCgVlbWFpbBgBIAEoCUIHukgEcgJgASI7ChRXZWJob29rQ2hhbm5lbEhlYWRlchIUCgNrZXkYASABKAlCB7pIBHICEAESDQoFdmFsdWUYAiABKAkidgoOV2ViaG9va0NoYW5uZWwSIgoLd2ViaG9va191cmwYASABKAlCDbpICnIIEAEYgBCIAQESQAoHaGVhZGVycxgCIAMoCzIvLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuV2ViaG9va0NoYW5uZWxIZWFkZXIikAIKHUNyZWF0ZVBhZ2VTdWJzY3JpcHRpb25SZXF1ZXN0EhgKB3BhZ2VfaWQYASABKAlCB7pIBHICEAESGwoEbmFtZRgCIAEoCUIIukgFcgMY/wFIAYgBARIVCg1jb21wb25lbnRfaWRzGAMgAygJEkAKDWVtYWlsX2NoYW5uZWwYCiABKAsyJy5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkVtYWlsQ2hhbm5lbEgAEkQKD3dlYmhvb2tfY2hhbm5lbBgLIAEoCzIpLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuV2ViaG9va0NoYW5uZWxIAEIQCgdjaGFubmVsEgW6SAIIAUIHCgVfbmFtZSJfCh5DcmVhdGVQYWdlU3Vic2NyaXB0aW9uUmVzcG9uc2USPQoKc3Vic2NyaWJlchgBIAEoCzIpLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZVN1YnNjcmliZXIiYwoaVW5zdWJzY3JpYmVGcm9tUGFnZVJlcXVlc3QSGAoHcGFnZV9pZBgBIAEoCUIHukgEcgIQARIPCgVlbWFpbBgCIAEoCUgAEgwKAmlkGAMgASgJSABCDAoKaWRlbnRpZmllciIuChtVbnN1YnNjcmliZUZyb21QYWdlUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCLAAQoWTGlzdFN1YnNjcmliZXJzUmVxdWVzdBIYCgdwYWdlX2lkGAEgASgJQge6SARyAhABEh0KBWxpbWl0GAIgASgFQgm6SAYaBBhkKAFIAIgBARIcCgZvZmZzZXQYAyABKAVCB7pIBBoCKABIAYgBARIhChRpbmNsdWRlX3Vuc3Vic2NyaWJlZBgEIAEoCEgCiAEBQggKBl9saW1pdEIJCgdfb2Zmc2V0QhcKFV9pbmNsdWRlX3Vuc3Vic2NyaWJlZCJtChdMaXN0U3Vic2NyaWJlcnNSZXNwb25zZRI+CgtzdWJzY3JpYmVycxgBIAMoCzIpLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZVN1YnNjcmliZXISEgoKdG90YWxfc2l6ZRgCIAEoBSJJChtHZXRTdGF0dXNQYWdlQ29udGVudFJlcXVlc3QSDAoCaWQYASABKAlIABIOCgRzbHVnGAIgASgJSABCDAoKaWRlbnRpZmllciLfAgocR2V0U3RhdHVzUGFnZUNvbnRlbnRSZXNwb25zZRI6CgtzdGF0dXNfcGFnZRgBIAEoCzIlLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuU3RhdHVzUGFnZRI8Cgpjb21wb25lbnRzGAIgAygLMigub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlQ29tcG9uZW50Ej0KBmdyb3VwcxgDIAMoCzItLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbXBvbmVudEdyb3VwEkEKDnN0YXR1c19yZXBvcnRzGAQgAygLMikub3BlbnN0YXR1cy5zdGF0dXNfcmVwb3J0LnYxLlN0YXR1c1JlcG9ydBJDCgxtYWludGVuYW5jZXMYBSADKAsyLS5vcGVuc3RhdHVzLm1haW50ZW5hbmNlLnYxLk1haW50ZW5hbmNlU3VtbWFyeSJFChdHZXRPdmVyYWxsU3RhdHVzUmVxdWVzdBIMCgJpZBgBIAEoCUgAEg4KBHNsdWcYAiABKAlIAEIMCgppZGVudGlmaWVyImEKD0NvbXBvbmVudFN0YXR1cxIUCgxjb21wb25lbnRfaWQYASABKAkSOAoGc3RhdHVzGAIgASgOMigub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5PdmVyYWxsU3RhdHVzIqQBChhHZXRPdmVyYWxsU3RhdHVzUmVzcG9uc2USQAoOb3ZlcmFsbF9zdGF0dXMYASABKA4yKC5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLk92ZXJhbGxTdGF0dXMSRgoSY29tcG9uZW50X3N0YXR1c2VzGAIgAygLMioub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5Db21wb25lbnRTdGF0dXMiMwocR2V0U3RhdHVzUGFnZU92ZXJ2aWV3UmVxdWVzdBITCgJpZBgBIAEoCUIHukgEcgIQASKvBAodR2V0U3RhdHVzUGFnZU92ZXJ2aWV3UmVzcG9uc2USOgoLc3RhdHVzX3BhZ2UYASABKAsyJS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlN0YXR1c1BhZ2USQwoNY29uZmlndXJhdGlvbhgCIAEoCzIsLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbmZpZ3VyYXRpb24SPAoKY29tcG9uZW50cxgDIAMoCzIoLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbXBvbmVudBI9CgZncm91cHMYBCADKAsyLS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VDb21wb25lbnRHcm91cBJBCg5zdGF0dXNfcmVwb3J0cxgFIAMoCzIpLm9wZW5zdGF0dXMuc3RhdHVzX3JlcG9ydC52MS5TdGF0dXNSZXBvcnQSQwoMbWFpbnRlbmFuY2VzGAYgAygLMi0ub3BlbnN0YXR1cy5tYWludGVuYW5jZS52MS5NYWludGVuYW5jZVN1bW1hcnkSQAoOb3ZlcmFsbF9zdGF0dXMYByABKA4yKC5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLk92ZXJhbGxTdGF0dXMSRgoSY29tcG9uZW50X3N0YXR1c2VzGAggAygLMioub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5Db21wb25lbnRTdGF0dXMinQEKI0dldFBhZ2VDb21wb25lbnREYWlseVN1bW1hcnlSZXF1ZXN0EgwKAmlkGAEgASgJSAASDgoEc2x1ZxgCIAEoCUgAEiMKDWNvbXBvbmVudF9pZHMYAyADKAlCDLpICZIBBiIEcgIQARIcCgRkYXlzGAQgASgFQgm6SAYaBBgtKAFIAYgBAUIMCgppZGVudGlmaWVyQgcKBV9kYXlzIu4BChJDb21wb25lbnREYXlCdWNrZXQSCwoDZGF5GAEgASgJEg0KBWNvdW50GAIgASgDEgoKAm9rGAMgASgDEhAKCGRlZ3JhZGVkGAQgASgDEg0KBWVycm9yGAUgASgDEj0KBnN0YXR1cxgGIAEoDjItLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ29tcG9uZW50RGF5U3RhdHVzEkUKBmltcGFjdBgHIAEoDjIwLm9wZW5zdGF0dXMuc3RhdHVzX3JlcG9ydC52MS5QYWdlQ29tcG9uZW50SW1wYWN0SACIAQFCCQoHX2ltcGFjdCKgAgoOQ29tcG9uZW50RXZlbnQSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRI7CgR0eXBlGAMgASgOMi0ub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5Db21wb25lbnRFdmVudFR5cGUSPwoGc3RhdHVzGAQgASgOMi8ub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5Db21wb25lbnRFdmVudFN0YXR1cxIMCgRmcm9tGAUgASgJEg8KAnRvGAYgASgJSACIAQESRQoGaW1wYWN0GAcgASgOMjAub3BlbnN0YXR1cy5zdGF0dXNfcmVwb3J0LnYxLlBhZ2VDb21wb25lbnRJbXBhY3RIAYgBAUIFCgNfdG9CCQoHX2ltcGFjdCKeAgoZUGFnZUNvbXBvbmVudERhaWx5U3VtbWFyeRIUCgxjb21wb25lbnRfaWQYASABKAkSOgoEdHlwZRgCIAEoDjIsLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZUNvbXBvbmVudFR5cGUSFwoKbW9uaXRvcl9pZBgDIAEoCUgAiAEBEgwKBG5hbWUYBCABKAkSPgoHYnVja2V0cxgFIAMoCzItLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ29tcG9uZW50RGF5QnVja2V0EjkKBmV2ZW50cxgGIAMoCzIpLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ29tcG9uZW50RXZlbnRCDQoLX21vbml0b3JfaWQicAokR2V0UGFnZUNvbXBvbmVudERhaWx5U3VtbWFyeVJlc3BvbnNlEkgKCmNvbXBvbmVudHMYASADKAsyNC5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VDb21wb25lbnREYWlseVN1bW1hcnkq6AEKEkNvbXBvbmVudERheVN0YXR1cxIkCiBDT01QT05FTlRfREFZX1NUQVRVU19VTlNQRUNJRklFRBAAEiQKIENPTVBPTkVOVF9EQVlfU1RBVFVTX09QRVJBVElPTkFMEAESIQodQ09NUE9ORU5UX0RBWV9TVEFUVVNfREVHUkFERUQQAhIdChlDT01QT05FTlRfREFZX1NUQVRVU19ET1dOEAMSJAogQ09NUE9ORU5UX0RBWV9TVEFUVVNfTUFJTlRFTkFOQ0UQBBIeChpDT01QT05FTlRfREFZX1NUQVRVU19FTVBUWRAFKqQBChJDb21wb25lbnRFdmVudFR5cGUSJAogQ09NUE9ORU5UX0VWRU5UX1RZUEVfVU5TUEVDSUZJRUQQABIkCiBDT01QT05FTlRfRVZFTlRfVFlQRV9NQUlOVEVOQU5DRRABEiEKHUNPTVBPTkVOVF9FVkVOVF9UWVBFX0lOQ0lERU5UEAISHwobQ09NUE9ORU5UX0VWRU5UX1RZUEVfUkVQT1JUEAMq1AEKFENvbXBvbmVudEV2ZW50U3RhdHVzEiYKIkNPTVBPTkVOVF9FVkVOVF9TVEFUVVNfVU5TUEVDSUZJRUQQABImCiJDT01QT05FTlRfRVZFTlRfU1RBVFVTX09QRVJBVElPTkFMEAESIwofQ09NUE9ORU5UX0VWRU5UX1NUQVRVU19ERUdSQURFRBACEh8KG0NPTVBPTkVOVF9FVkVOVF9TVEFUVVNfRE9XThADEiYKIkNPTVBPTkVOVF9FVkVOVF9TVEFUVVNfTUFJTlRFTkFOQ0UQBDLAKgoRU3RhdHVzUGFnZVNlcnZpY2USewoQQ3JlYXRlU3RhdHVzUGFnZRIyLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ3JlYXRlU3RhdHVzUGFnZVJlcXVlc3QaMy5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkNyZWF0ZVN0YXR1c1BhZ2VSZXNwb25zZRJ3Cg1HZXRTdGF0dXNQYWdlEi8ub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5HZXRTdGF0dXNQYWdlUmVxdWVzdBowLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuR2V0U3RhdHVzUGFnZVJlc3BvbnNlIgOQAgESfQoPTGlzdFN0YXR1c1BhZ2VzEjEub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5MaXN0U3RhdHVzUGFnZXNSZXF1ZXN0GjIub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5MaXN0U3RhdHVzUGFnZXNSZXNwb25zZSIDkAIBEnsKEFVwZGF0ZVN0YXR1c1BhZ2USMi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlVwZGF0ZVN0YXR1c1BhZ2VSZXF1ZXN0GjMub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5VcGRhdGVTdGF0dXNQYWdlUmVzcG9uc2USewoQRGVsZXRlU3RhdHVzUGFnZRIyLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuRGVsZXRlU3RhdHVzUGFnZVJlcXVlc3QaMy5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkRlbGV0ZVN0YXR1c1BhZ2VSZXNwb25zZRKEAQoTQWRkTW9uaXRvckNvbXBvbmVudBI1Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQWRkTW9uaXRvckNvbXBvbmVudFJlcXVlc3QaNi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkFkZE1vbml0b3JDb21wb25lbnRSZXNwb25zZRKBAQoSQWRkU3RhdGljQ29tcG9uZW50EjQub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5BZGRTdGF0aWNDb21wb25lbnRSZXF1ZXN0GjUub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5BZGRTdGF0aWNDb21wb25lbnRSZXNwb25zZRJ4Cg9SZW1vdmVDb21wb25lbnQSMS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlJlbW92ZUNvbXBvbmVudFJlcXVlc3QaMi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlJlbW92ZUNvbXBvbmVudFJlc3BvbnNlEngKD1VwZGF0ZUNvbXBvbmVudBIxLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuVXBkYXRlQ29tcG9uZW50UmVxdWVzdBoyLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuVXBkYXRlQ29tcG9uZW50UmVzcG9uc2US+QIKEEdldFBhZ2VDb21wb25lbnQSMi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkdldFBhZ2VDb21wb25lbnRSZXF1ZXN0GjMub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5HZXRQYWdlQ29tcG9uZW50UmVzcG9uc2Ui+wGQAgG6R/QBGvEBUmV0dXJucyBhIHNpbmdsZSBzdGF0dXMtcGFnZSBjb21wb25lbnQgYnkgaXRzIElELCBzY29wZWQgdG8gdGhlIGF1dGhlbnRpY2F0ZWQgd29ya3NwYWNlLiBVc2UgdGhpcyB0byByZXNvbHZlIGEgY29tcG9uZW50IGlkIHRvIGl0cyBuYW1lIChhbmQgb3RoZXIgZmllbGRzKSBpbnN0ZWFkIG9mIGZldGNoaW5nIHRoZSB3aG9sZSBwYWdlIHZpYSBHZXRTdGF0dXNQYWdlQ29udGVudCBhbmQgZmlsdGVyaW5nIC5jb21wb25lbnRzLhKHAQoUQ3JlYXRlQ29tcG9uZW50R3JvdXASNi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkNyZWF0ZUNvbXBvbmVudEdyb3VwUmVxdWVzdBo3Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ3JlYXRlQ29tcG9uZW50R3JvdXBSZXNwb25zZRKHAQoURGVsZXRlQ29tcG9uZW50R3JvdXASNi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkRlbGV0ZUNvbXBvbmVudEdyb3VwUmVxdWVzdBo3Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuRGVsZXRlQ29tcG9uZW50R3JvdXBSZXNwb25zZRKHAQoUVXBkYXRlQ29tcG9uZW50R3JvdXASNi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlVwZGF0ZUNvbXBvbmVudEdyb3VwUmVxdWVzdBo3Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuVXBkYXRlQ29tcG9uZW50R3JvdXBSZXNwb25zZRK5BAoPU3Vic2NyaWJlVG9QYWdlEjEub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5TdWJzY3JpYmVUb1BhZ2VSZXF1ZXN0GjIub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5TdWJzY3JpYmVUb1BhZ2VSZXNwb25zZSK+A7pHugMatwNFbmQtdXNlciBlbWFpbCBzZWxmLXNpZ251cCB3aXRoIGRvdWJsZSBvcHQtaW4gdmVyaWZpY2F0aW9uLiBBIHZlcmlmaWNhdGlvbiBlbWFpbCBpcyBzZW50IGFuZCB0aGUgc3Vic2NyaXB0aW9uIGFjdGl2YXRlcyBvbmx5IGFmdGVyIHRoZSByZWNpcGllbnQgY29uZmlybXMuIElmIHRoZSBlbWFpbCB3YXMgcHJldmlvdXNseSB1bnN1YnNjcmliZWQsIHRoZSBleGlzdGluZyByb3cgaXMgcmVhY3RpdmF0ZWQgaW5zdGVhZCBvZiBhIGR1cGxpY2F0ZSBiZWluZyBjcmVhdGVkLiBVc2UgdGhpcyBmb3Igc3Vic2NyaWJlci1pbml0aWF0ZWQgc2lnbnVwcyBvbiB0aGUgcHVibGljIHN0YXR1cyBwYWdlOyB1c2UgQ3JlYXRlUGFnZVN1YnNjcmlwdGlvbiBmb3Igb3BlcmF0b3ItaW5pdGlhdGVkICh2ZW5kb3IpIHN1YnNjcmlwdGlvbnMgdGhhdCBzaG91bGQgc2tpcCB2ZXJpZmljYXRpb24uEv0EChZDcmVhdGVQYWdlU3Vic2NyaXB0aW9uEjgub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5DcmVhdGVQYWdlU3Vic2NyaXB0aW9uUmVxdWVzdBo5Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ3JlYXRlUGFnZVN1YnNjcmlwdGlvblJlc3BvbnNlIu0DukfpAxrmA09wZXJhdG9yLWFkZGVkIHN1YnNjcmliZXIgKGVtYWlsIG9yIHdlYmhvb2spIHdpdGggbm8gdmVyaWZpY2F0aW9uIGZsb3cg4oCUIHRoZSBwYXJ0bmVyIHN0YXJ0cyByZWNlaXZpbmcgbm90aWZpY2F0aW9ucyBpbW1lZGlhdGVseS4gU3VwcG9ydHMgU2xhY2sgYW5kIERpc2NvcmQgd2ViaG9vayBVUkxzIGluIGFkZGl0aW9uIHRvIGVtYWlsLiBBIG1hbmFnZW1lbnQgdG9rZW4gaXMgc3RpbGwgZ2VuZXJhdGVkIHNvIHRoZSBzdWJzY3JpYmVyIGNhbiBzZWxmLW1hbmFnZSAodXBkYXRlIHNjb3BlLCB1bnN1YnNjcmliZSkgd2l0aG91dCBvcGVyYXRvciBpbnZvbHZlbWVudC4gVXNlIHRoaXMgZm9yIHZlbmRvci9wYXJ0bmVyIGludGVncmF0aW9ucyB3aGVyZSBjb25zZW50IGlzIGVzdGFibGlzaGVkIG91dC1vZi1iYW5kOyB1c2UgU3Vic2NyaWJlVG9QYWdlIGZvciBzdWJzY3JpYmVyLWluaXRpYXRlZCBzaWdudXBzIHRoYXQgcmVxdWlyZSBkb3VibGUgb3B0LWluLhKEAQoTVW5zdWJzY3JpYmVGcm9tUGFnZRI1Lm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuVW5zdWJzY3JpYmVGcm9tUGFnZVJlcXVlc3QaNi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlVuc3Vic2NyaWJlRnJvbVBhZ2VSZXNwb25zZRJ9Cg9MaXN0U3Vic2NyaWJlcnMSMS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkxpc3RTdWJzY3JpYmVyc1JlcXVlc3QaMi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkxpc3RTdWJzY3JpYmVyc1Jlc3BvbnNlIgOQAgESwAMKFEdldFN0YXR1c1BhZ2VDb250ZW50EjYub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5HZXRTdGF0dXNQYWdlQ29udGVudFJlcXVlc3QaNy5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkdldFN0YXR1c1BhZ2VDb250ZW50UmVzcG9uc2UitgKQAgG6R68CGqwCUmV0dXJucyB0aGUgZnVsbCBjb250ZW50IG9mIGEgc3RhdHVzIHBhZ2UgaW5jbHVkaW5nIGl0cyBjb21wb25lbnRzLCBjb21wb25lbnQgZ3JvdXBzLCBhY3RpdmUgc3RhdHVzIHJlcG9ydHMsIGFuZCBzY2hlZHVsZWQgbWFpbnRlbmFuY2VzLiBTdXBwb3J0cyB0d28gYWNjZXNzIHBhdGhzOiBieSBJRCAocmVxdWlyZXMgYXV0aGVudGljYXRpb24sIHdvcmtzcGFjZS1zY29wZWQpIG9yIGJ5IHNsdWcgKHB1YmxpYyBhY2Nlc3MsIHJlcXVpcmVzIHRoZSBwYWdlIHRvIGJlIHB1Ymxpc2hlZCB3aXRoIGFjY2Vzc190eXBlPVBVQkxJQykuEqoDChBHZXRPdmVyYWxsU3RhdHVzEjIub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5HZXRPdmVyYWxsU3RhdHVzUmVxdWVzdBozLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuR2V0T3ZlcmFsbFN0YXR1c1Jlc3BvbnNlIqwCkAIBukelAhqiAlJldHVybnMgdGhlIG92ZXJhbGwgc3RhdHVzIG9mIGEgc3RhdHVzIHBhZ2UgYWxvbmcgd2l0aCBpbmRpdmlkdWFsIGNvbXBvbmVudCBzdGF0dXNlcy4gVGhlIG92ZXJhbGwgc3RhdHVzIGlzIGNvbXB1dGVkIGZyb20gYWN0aXZlIHN0YXR1cyByZXBvcnRzIGFuZCBtYWludGVuYW5jZXMgd2l0aCB0aGUgZm9sbG93aW5nIHByaW9yaXR5OiBkZWdyYWRlZCAoZnJvbSBhY3RpdmUgc3RhdHVzIHJlcG9ydHMpID4gbWFpbnRlbmFuY2UgKGZyb20gYWN0aXZlIG1haW50ZW5hbmNlIHdpbmRvd3MpID4gb3BlcmF0aW9uYWwuEpgEChVHZXRTdGF0dXNQYWdlT3ZlcnZpZXcSNy5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkdldFN0YXR1c1BhZ2VPdmVydmlld1JlcXVlc3QaOC5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkdldFN0YXR1c1BhZ2VPdmVydmlld1Jlc3BvbnNlIosDkAIBukeEAxqBA1JldHVybnMgZXZlcnl0aGluZyBhYm91dCBhIHNpbmdsZSBzdGF0dXMgcGFnZSBpbiBvbmUgYXV0aGVudGljYXRlZCBjYWxsOiB0aGUgcGFnZSwgaXRzIHJpY2ggcmVuZGVyaW5nIGNvbmZpZ3VyYXRpb24sIGNvbXBvbmVudHMsIGNvbXBvbmVudCBncm91cHMsIGFjdGl2ZS9yZWNlbnQgc3RhdHVzIHJlcG9ydHMsIG1haW50ZW5hbmNlcywgYW5kIHRoZSBjb21wdXRlZCBvdmVyYWxsICsgcGVyLWNvbXBvbmVudCBzdGF0dXNlcy4gV29ya3NwYWNlLXNjb3BlZCBieSBpZDsgdGhlcmUgaXMgbm8gcHVibGljIHNsdWcgYWNjZXNzIHBhdGguIERvZXMgbm90IGluY2x1ZGUgdXB0aW1lIHRpbWUtc2VyaWVzIOKAlCB1c2UgR2V0UGFnZUNvbXBvbmVudERhaWx5U3VtbWFyeSBmb3IgdGhhdC4S1QQKHEdldFBhZ2VDb21wb25lbnREYWlseVN1bW1hcnkSPi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkdldFBhZ2VDb21wb25lbnREYWlseVN1bW1hcnlSZXF1ZXN0Gj8ub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5HZXRQYWdlQ29tcG9uZW50RGFpbHlTdW1tYXJ5UmVzcG9uc2UiswOQAgG6R6wDGqkDUmV0dXJucyBwZXItY29tcG9uZW50IGRhaWx5IHN0YXR1cyBidWNrZXRzIChvay9kZWdyYWRlZC9lcnJvci9jb3VudCBwbHVzIGEgcmVzb2x2ZWQgc3RhdHVzKSBtZXJnZWQgd2l0aCB0aGUgaW5jaWRlbnQsIG1haW50ZW5hbmNlLCBhbmQgc3RhdHVzLXJlcG9ydCB0aW1lbGluZSBvdmVyIHRoZSBsYXN0IE4gZGF5cyAobWF4IDQ1KS4gU3VpdGFibGUgYXMgYSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciBzdGF0dXMtYmFyIGFuZCB1cHRpbWUtY2FsZW5kYXIgcmVuZGVyaW5nLiBTdXBwb3J0cyB0d28gYWNjZXNzIHBhdGhzOiBieSBpZCAoYXV0aGVudGljYXRlZCwgd29ya3NwYWNlLXNjb3BlZCkgb3IgYnkgc2x1ZyAocHVibGljIGFjY2VzcywgcmVxdWlyZXMgdGhlIHBhZ2UgdG8gYmUgcHVibGlzaGVkIHdpdGggYWNjZXNzX3R5cGU9UFVCTElDKS5CWlpYZ2l0aHViLmNvbS9vcGVuc3RhdHVzaHEvb3BlbnN0YXR1cy9wYWNrYWdlcy9wcm90by9vcGVuc3RhdHVzL3N0YXR1c19wYWdlL3YxO3N0YXR1c3BhZ2V2MWIGcHJvdG8z", [ file_buf_validate_validate, file_gnostic_openapi_v3_annotations, @@ -171,6 +173,14 @@ export type CreateStatusPageRequest = * @generated from field: optional string allowed_ip_ranges = 15; */ allowedIpRanges?: string; + + /** + * Per-mode CSS variable overrides merged over the theme (optional). + * Only supported variable names are accepted. Requires the custom-theme plan feature. + * + * @generated from field: optional openstatus.status_page.v1.CustomTheme custom_theme = 16; + */ + customTheme?: CustomTheme; }; /** @@ -440,6 +450,14 @@ export type UpdateStatusPageRequest = * @generated from field: optional string allowed_ip_ranges = 16; */ allowedIpRanges?: string; + + /** + * New per-mode CSS variable overrides (optional). Omit to keep the current + * value; send an empty message to clear. Requires the custom-theme plan feature. + * + * @generated from field: optional openstatus.status_page.v1.CustomTheme custom_theme = 17; + */ + customTheme?: CustomTheme; }; /** @@ -824,6 +842,56 @@ export const UpdateComponentResponseSchema: GenMessage< > = /*@__PURE__*/ messageDesc(file_openstatus_status_page_v1_service, 17); +/** + * GetPageComponentRequest is the request to fetch a single component by ID. + * + * @generated from message openstatus.status_page.v1.GetPageComponentRequest + */ +export type GetPageComponentRequest = + & Message<"openstatus.status_page.v1.GetPageComponentRequest"> + & { + /** + * ID of the component to retrieve (required). + * + * @generated from field: string id = 1; + */ + id: string; + }; + +/** + * Describes the message openstatus.status_page.v1.GetPageComponentRequest. + * Use `create(GetPageComponentRequestSchema)` to create a new message. + */ +export const GetPageComponentRequestSchema: GenMessage< + GetPageComponentRequest +> = /*@__PURE__*/ + messageDesc(file_openstatus_status_page_v1_service, 18); + +/** + * GetPageComponentResponse is the response containing the component. + * + * @generated from message openstatus.status_page.v1.GetPageComponentResponse + */ +export type GetPageComponentResponse = + & Message<"openstatus.status_page.v1.GetPageComponentResponse"> + & { + /** + * The requested component. + * + * @generated from field: openstatus.status_page.v1.PageComponent component = 1; + */ + component?: PageComponent; + }; + +/** + * Describes the message openstatus.status_page.v1.GetPageComponentResponse. + * Use `create(GetPageComponentResponseSchema)` to create a new message. + */ +export const GetPageComponentResponseSchema: GenMessage< + GetPageComponentResponse +> = /*@__PURE__*/ + messageDesc(file_openstatus_status_page_v1_service, 19); + /** * CreateComponentGroupRequest is the request to create a new component group. * @@ -861,7 +929,7 @@ export type CreateComponentGroupRequest = export const CreateComponentGroupRequestSchema: GenMessage< CreateComponentGroupRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 18); + messageDesc(file_openstatus_status_page_v1_service, 20); /** * CreateComponentGroupResponse is the response after creating a component group. @@ -886,7 +954,7 @@ export type CreateComponentGroupResponse = export const CreateComponentGroupResponseSchema: GenMessage< CreateComponentGroupResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 19); + messageDesc(file_openstatus_status_page_v1_service, 21); /** * DeleteComponentGroupRequest is the request to delete a component group. @@ -911,7 +979,7 @@ export type DeleteComponentGroupRequest = export const DeleteComponentGroupRequestSchema: GenMessage< DeleteComponentGroupRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 20); + messageDesc(file_openstatus_status_page_v1_service, 22); /** * DeleteComponentGroupResponse is the response after deleting a component group. @@ -936,7 +1004,7 @@ export type DeleteComponentGroupResponse = export const DeleteComponentGroupResponseSchema: GenMessage< DeleteComponentGroupResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 21); + messageDesc(file_openstatus_status_page_v1_service, 23); /** * UpdateComponentGroupRequest is the request to update a component group. @@ -975,7 +1043,7 @@ export type UpdateComponentGroupRequest = export const UpdateComponentGroupRequestSchema: GenMessage< UpdateComponentGroupRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 22); + messageDesc(file_openstatus_status_page_v1_service, 24); /** * UpdateComponentGroupResponse is the response after updating a component group. @@ -1000,7 +1068,7 @@ export type UpdateComponentGroupResponse = export const UpdateComponentGroupResponseSchema: GenMessage< UpdateComponentGroupResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 23); + messageDesc(file_openstatus_status_page_v1_service, 25); /** * SubscribeToPageRequest is the request to subscribe an email to a status page. @@ -1032,7 +1100,7 @@ export type SubscribeToPageRequest = export const SubscribeToPageRequestSchema: GenMessage< SubscribeToPageRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 24); + messageDesc(file_openstatus_status_page_v1_service, 26); /** * SubscribeToPageResponse is the response after subscribing to a status page. @@ -1057,7 +1125,7 @@ export type SubscribeToPageResponse = export const SubscribeToPageResponseSchema: GenMessage< SubscribeToPageResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 25); + messageDesc(file_openstatus_status_page_v1_service, 27); /** * EmailChannel carries the email-channel fields for CreatePageSubscription. @@ -1078,7 +1146,7 @@ export type EmailChannel = Message<"openstatus.status_page.v1.EmailChannel"> & { * Use `create(EmailChannelSchema)` to create a new message. */ export const EmailChannelSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 26); + messageDesc(file_openstatus_status_page_v1_service, 28); /** * WebhookChannelHeader is a single custom HTTP header. @@ -1106,7 +1174,7 @@ export type WebhookChannelHeader = export const WebhookChannelHeaderSchema: GenMessage< WebhookChannelHeader > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 27); + messageDesc(file_openstatus_status_page_v1_service, 29); /** * WebhookChannel carries the webhook-channel fields for CreatePageSubscription. @@ -1136,7 +1204,7 @@ export type WebhookChannel = * Use `create(WebhookChannelSchema)` to create a new message. */ export const WebhookChannelSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 28); + messageDesc(file_openstatus_status_page_v1_service, 30); /** * CreatePageSubscriptionRequest is the request to add a vendor-managed subscriber to a status page. @@ -1194,7 +1262,7 @@ export type CreatePageSubscriptionRequest = export const CreatePageSubscriptionRequestSchema: GenMessage< CreatePageSubscriptionRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 29); + messageDesc(file_openstatus_status_page_v1_service, 31); /** * CreatePageSubscriptionResponse is the response after creating a vendor-managed subscription. @@ -1219,7 +1287,7 @@ export type CreatePageSubscriptionResponse = export const CreatePageSubscriptionResponseSchema: GenMessage< CreatePageSubscriptionResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 30); + messageDesc(file_openstatus_status_page_v1_service, 32); /** * UnsubscribeFromPageRequest is the request to unsubscribe from a status page. @@ -1267,7 +1335,7 @@ export type UnsubscribeFromPageRequest = export const UnsubscribeFromPageRequestSchema: GenMessage< UnsubscribeFromPageRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 31); + messageDesc(file_openstatus_status_page_v1_service, 33); /** * UnsubscribeFromPageResponse is the response after unsubscribing from a status page. @@ -1292,7 +1360,7 @@ export type UnsubscribeFromPageResponse = export const UnsubscribeFromPageResponseSchema: GenMessage< UnsubscribeFromPageResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 32); + messageDesc(file_openstatus_status_page_v1_service, 34); /** * ListSubscribersRequest is the request to list subscribers of a status page. @@ -1338,7 +1406,7 @@ export type ListSubscribersRequest = export const ListSubscribersRequestSchema: GenMessage< ListSubscribersRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 33); + messageDesc(file_openstatus_status_page_v1_service, 35); /** * ListSubscribersResponse is the response containing status page subscribers. @@ -1370,7 +1438,7 @@ export type ListSubscribersResponse = export const ListSubscribersResponseSchema: GenMessage< ListSubscribersResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 34); + messageDesc(file_openstatus_status_page_v1_service, 36); /** * GetStatusPageContentRequest is the request to get the full content of a status page. @@ -1411,7 +1479,7 @@ export type GetStatusPageContentRequest = export const GetStatusPageContentRequestSchema: GenMessage< GetStatusPageContentRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 35); + messageDesc(file_openstatus_status_page_v1_service, 37); /** * GetStatusPageContentResponse is the response containing the full status page content. @@ -1464,7 +1532,7 @@ export type GetStatusPageContentResponse = export const GetStatusPageContentResponseSchema: GenMessage< GetStatusPageContentResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 36); + messageDesc(file_openstatus_status_page_v1_service, 38); /** * GetOverallStatusRequest is the request to get the overall status of a status page. @@ -1505,7 +1573,7 @@ export type GetOverallStatusRequest = export const GetOverallStatusRequestSchema: GenMessage< GetOverallStatusRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 37); + messageDesc(file_openstatus_status_page_v1_service, 39); /** * ComponentStatus represents the status of a single component. @@ -1535,7 +1603,7 @@ export type ComponentStatus = * Use `create(ComponentStatusSchema)` to create a new message. */ export const ComponentStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 38); + messageDesc(file_openstatus_status_page_v1_service, 40); /** * GetOverallStatusResponse is the response containing the overall status and individual component statuses. @@ -1567,7 +1635,106 @@ export type GetOverallStatusResponse = export const GetOverallStatusResponseSchema: GenMessage< GetOverallStatusResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 39); + messageDesc(file_openstatus_status_page_v1_service, 41); + +/** + * GetStatusPageOverviewRequest requests the full overview of a status page by id. + * + * @generated from message openstatus.status_page.v1.GetStatusPageOverviewRequest + */ +export type GetStatusPageOverviewRequest = + & Message<"openstatus.status_page.v1.GetStatusPageOverviewRequest"> + & { + /** + * ID of the status page (required, workspace-scoped). + * + * @generated from field: string id = 1; + */ + id: string; + }; + +/** + * Describes the message openstatus.status_page.v1.GetStatusPageOverviewRequest. + * Use `create(GetStatusPageOverviewRequestSchema)` to create a new message. + */ +export const GetStatusPageOverviewRequestSchema: GenMessage< + GetStatusPageOverviewRequest +> = /*@__PURE__*/ + messageDesc(file_openstatus_status_page_v1_service, 42); + +/** + * GetStatusPageOverviewResponse bundles all data for a single status page. + * + * @generated from message openstatus.status_page.v1.GetStatusPageOverviewResponse + */ +export type GetStatusPageOverviewResponse = + & Message<"openstatus.status_page.v1.GetStatusPageOverviewResponse"> + & { + /** + * The status page details. + * + * @generated from field: openstatus.status_page.v1.StatusPage status_page = 1; + */ + statusPage?: StatusPage; + + /** + * Rich rendering configuration of the page. + * + * @generated from field: openstatus.status_page.v1.PageConfiguration configuration = 2; + */ + configuration?: PageConfiguration; + + /** + * Components on the status page. + * + * @generated from field: repeated openstatus.status_page.v1.PageComponent components = 3; + */ + components: PageComponent[]; + + /** + * Component groups on the status page. + * + * @generated from field: repeated openstatus.status_page.v1.PageComponentGroup groups = 4; + */ + groups: PageComponentGroup[]; + + /** + * Active and recent status reports. + * + * @generated from field: repeated openstatus.status_report.v1.StatusReport status_reports = 5; + */ + statusReports: StatusReport[]; + + /** + * Scheduled maintenances. + * + * @generated from field: repeated openstatus.maintenance.v1.MaintenanceSummary maintenances = 6; + */ + maintenances: MaintenanceSummary[]; + + /** + * Aggregated status across all components. + * + * @generated from field: openstatus.status_page.v1.OverallStatus overall_status = 7; + */ + overallStatus: OverallStatus; + + /** + * Status of individual components. + * + * @generated from field: repeated openstatus.status_page.v1.ComponentStatus component_statuses = 8; + */ + componentStatuses: ComponentStatus[]; + }; + +/** + * Describes the message openstatus.status_page.v1.GetStatusPageOverviewResponse. + * Use `create(GetStatusPageOverviewResponseSchema)` to create a new message. + */ +export const GetStatusPageOverviewResponseSchema: GenMessage< + GetStatusPageOverviewResponse +> = /*@__PURE__*/ + messageDesc(file_openstatus_status_page_v1_service, 43); /** * GetPageComponentDailySummaryRequest is the request for per-component daily summaries. @@ -1622,7 +1789,7 @@ export type GetPageComponentDailySummaryRequest = export const GetPageComponentDailySummaryRequestSchema: GenMessage< GetPageComponentDailySummaryRequest > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 40); + messageDesc(file_openstatus_status_page_v1_service, 44); /** * ComponentDayBucket is one day of status data for a component. @@ -1689,7 +1856,7 @@ export type ComponentDayBucket = export const ComponentDayBucketSchema: GenMessage< ComponentDayBucket > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 41); + messageDesc(file_openstatus_status_page_v1_service, 45); /** * ComponentEvent is a single incident / maintenance / report affecting a component. @@ -1754,7 +1921,7 @@ export type ComponentEvent = * Use `create(ComponentEventSchema)` to create a new message. */ export const ComponentEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 42); + messageDesc(file_openstatus_status_page_v1_service, 46); /** * PageComponentDailySummary is the per-day buckets + event timeline for one component. @@ -1814,7 +1981,7 @@ export type PageComponentDailySummary = export const PageComponentDailySummarySchema: GenMessage< PageComponentDailySummary > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 43); + messageDesc(file_openstatus_status_page_v1_service, 47); /** * GetPageComponentDailySummaryResponse is the response containing per-component summaries. @@ -1839,7 +2006,7 @@ export type GetPageComponentDailySummaryResponse = export const GetPageComponentDailySummaryResponseSchema: GenMessage< GetPageComponentDailySummaryResponse > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_service, 44); + messageDesc(file_openstatus_status_page_v1_service, 48); /** * ComponentDayStatus is the resolved status of a component on a given day. @@ -2058,6 +2225,16 @@ export const StatusPageService: GenService<{ input: typeof UpdateComponentRequestSchema; output: typeof UpdateComponentResponseSchema; }; + /** + * GetPageComponent retrieves a single component by ID. + * + * @generated from rpc openstatus.status_page.v1.StatusPageService.GetPageComponent + */ + getPageComponent: { + methodKind: "unary"; + input: typeof GetPageComponentRequestSchema; + output: typeof GetPageComponentResponseSchema; + }; /** * CreateComponentGroup creates a new component group. * @@ -2166,6 +2343,18 @@ export const StatusPageService: GenService<{ input: typeof GetOverallStatusRequestSchema; output: typeof GetOverallStatusResponseSchema; }; + /** + * GetStatusPageOverview returns everything about a single status page in one + * authenticated call: page, rich configuration, components, groups, active + * reports, maintenances, and computed statuses. + * + * @generated from rpc openstatus.status_page.v1.StatusPageService.GetStatusPageOverview + */ + getStatusPageOverview: { + methodKind: "unary"; + input: typeof GetStatusPageOverviewRequestSchema; + output: typeof GetStatusPageOverviewResponseSchema; + }; /** * GetPageComponentDailySummary returns per-component daily uptime buckets merged * with the incident / maintenance / report timeline — the single source of truth diff --git a/src/gen/openstatus/status_page/v1/status_page_pb.ts b/src/gen/openstatus/status_page/v1/status_page_pb.ts index 5b2d4a6..6f3d275 100644 --- a/src/gen/openstatus/status_page/v1/status_page_pb.ts +++ b/src/gen/openstatus/status_page/v1/status_page_pb.ts @@ -16,10 +16,92 @@ import type { Message } from "@bufbuild/protobuf"; */ export const file_openstatus_status_page_v1_status_page: GenFile = /*@__PURE__*/ fileDesc( - "CitvcGVuc3RhdHVzL3N0YXR1c19wYWdlL3YxL3N0YXR1c19wYWdlLnByb3RvEhlvcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxIv4ECgpTdGF0dXNQYWdlEgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEh4KBHNsdWcYBCABKAlCELpHDToLEglhY21lLWNvcnASMAoNY3VzdG9tX2RvbWFpbhgFIAEoCUIZukcWOhQSEnN0YXR1cy5leGFtcGxlLmNvbRIRCglwdWJsaXNoZWQYBiABKAgSPgoLYWNjZXNzX3R5cGUYByABKA4yKS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VBY2Nlc3NUeXBlEjMKBXRoZW1lGAggASgOMiQub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlVGhlbWUSFAoMaG9tZXBhZ2VfdXJsGAkgASgJEhMKC2NvbnRhY3RfdXJsGAogASgJEgwKBGljb24YCyABKAkSLwoKY3JlYXRlZF9hdBgMIAEoCUIbukcYOhYSFDIwMjQtMDEtMTVUMDk6MDA6MDBaEi8KCnVwZGF0ZWRfYXQYDSABKAlCG7pHGDoWEhQyMDI0LTA2LTIwVDE0OjMwOjAwWhI5Cg5kZWZhdWx0X2xvY2FsZRgOIAEoDjIhLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTG9jYWxlEjIKB2xvY2FsZXMYDyADKA4yIS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkxvY2FsZRIQCghwYXNzd29yZBgQIAEoCRIaChJhdXRoX2VtYWlsX2RvbWFpbnMYESADKAkSEwoLYWxsb3dfaW5kZXgYEiABKAgSGQoRYWxsb3dlZF9pcF9yYW5nZXMYEyABKAkiqQEKEVN0YXR1c1BhZ2VTdW1tYXJ5EgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEgwKBHNsdWcYAyABKAkSEQoJcHVibGlzaGVkGAQgASgIEhIKCmNyZWF0ZWRfYXQYBSABKAkSEgoKdXBkYXRlZF9hdBgGIAEoCRIwCg1jdXN0b21fZG9tYWluGAcgASgJQhm6RxY6FBISc3RhdHVzLmV4YW1wbGUuY29tKsABCg5QYWdlQWNjZXNzVHlwZRIgChxQQUdFX0FDQ0VTU19UWVBFX1VOU1BFQ0lGSUVEEAASGwoXUEFHRV9BQ0NFU1NfVFlQRV9QVUJMSUMQARInCiNQQUdFX0FDQ0VTU19UWVBFX1BBU1NXT1JEX1BST1RFQ1RFRBACEiIKHlBBR0VfQUNDRVNTX1RZUEVfQVVUSEVOVElDQVRFRBADEiIKHlBBR0VfQUNDRVNTX1RZUEVfSVBfUkVTVFJJQ1RFRBAEKmkKCVBhZ2VUaGVtZRIaChZQQUdFX1RIRU1FX1VOU1BFQ0lGSUVEEAASFQoRUEFHRV9USEVNRV9TWVNURU0QARIUChBQQUdFX1RIRU1FX0xJR0hUEAISEwoPUEFHRV9USEVNRV9EQVJLEAMqTQoGTG9jYWxlEhYKEkxPQ0FMRV9VTlNQRUNJRklFRBAAEg0KCUxPQ0FMRV9FThABEg0KCUxPQ0FMRV9GUhACEg0KCUxPQ0FMRV9ERRADKuwBCg1PdmVyYWxsU3RhdHVzEh4KGk9WRVJBTExfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHgoaT1ZFUkFMTF9TVEFUVVNfT1BFUkFUSU9OQUwQARIbChdPVkVSQUxMX1NUQVRVU19ERUdSQURFRBACEiEKHU9WRVJBTExfU1RBVFVTX1BBUlRJQUxfT1VUQUdFEAMSHwobT1ZFUkFMTF9TVEFUVVNfTUFKT1JfT1VUQUdFEAQSHgoaT1ZFUkFMTF9TVEFUVVNfTUFJTlRFTkFOQ0UQBRIaChZPVkVSQUxMX1NUQVRVU19VTktOT1dOEAZCWlpYZ2l0aHViLmNvbS9vcGVuc3RhdHVzaHEvb3BlbnN0YXR1cy9wYWNrYWdlcy9wcm90by9vcGVuc3RhdHVzL3N0YXR1c19wYWdlL3YxO3N0YXR1c3BhZ2V2MWIGcHJvdG8z", + "CitvcGVuc3RhdHVzL3N0YXR1c19wYWdlL3YxL3N0YXR1c19wYWdlLnByb3RvEhlvcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxIuoBCgtDdXN0b21UaGVtZRJACgVsaWdodBgBIAMoCzIxLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuQ3VzdG9tVGhlbWUuTGlnaHRFbnRyeRI+CgRkYXJrGAIgAygLMjAub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5DdXN0b21UaGVtZS5EYXJrRW50cnkaLAoKTGlnaHRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBGisKCURhcmtFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIsMBChFQYWdlQ29uZmlndXJhdGlvbhI+CgttZXRyaWNfdHlwZRgBIAEoDjIpLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuUGFnZU1ldHJpY1R5cGUSOAoIYmFyX3R5cGUYAiABKA4yJi5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VCYXJUeXBlEhMKC3Nob3dfdXB0aW1lGAMgASgIEhEKCXRoZW1lX2tleRgEIAEoCRIMCgRkYXlzGAUgASgFItIFCgpTdGF0dXNQYWdlEgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEh4KBHNsdWcYBCABKAlCELpHDToLEglhY21lLWNvcnASMAoNY3VzdG9tX2RvbWFpbhgFIAEoCUIZukcWOhQSEnN0YXR1cy5leGFtcGxlLmNvbRIRCglwdWJsaXNoZWQYBiABKAgSPgoLYWNjZXNzX3R5cGUYByABKA4yKS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLlBhZ2VBY2Nlc3NUeXBlEjMKBXRoZW1lGAggASgOMiQub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5QYWdlVGhlbWUSFAoMaG9tZXBhZ2VfdXJsGAkgASgJEhMKC2NvbnRhY3RfdXJsGAogASgJEgwKBGljb24YCyABKAkSLwoKY3JlYXRlZF9hdBgMIAEoCUIbukcYOhYSFDIwMjQtMDEtMTVUMDk6MDA6MDBaEi8KCnVwZGF0ZWRfYXQYDSABKAlCG7pHGDoWEhQyMDI0LTA2LTIwVDE0OjMwOjAwWhI5Cg5kZWZhdWx0X2xvY2FsZRgOIAEoDjIhLm9wZW5zdGF0dXMuc3RhdHVzX3BhZ2UudjEuTG9jYWxlEjIKB2xvY2FsZXMYDyADKA4yIS5vcGVuc3RhdHVzLnN0YXR1c19wYWdlLnYxLkxvY2FsZRIQCghwYXNzd29yZBgQIAEoCRIaChJhdXRoX2VtYWlsX2RvbWFpbnMYESADKAkSEwoLYWxsb3dfaW5kZXgYEiABKAgSGQoRYWxsb3dlZF9pcF9yYW5nZXMYEyABKAkSQQoMY3VzdG9tX3RoZW1lGBQgASgLMiYub3BlbnN0YXR1cy5zdGF0dXNfcGFnZS52MS5DdXN0b21UaGVtZUgAiAEBQg8KDV9jdXN0b21fdGhlbWUiqQEKEVN0YXR1c1BhZ2VTdW1tYXJ5EgoKAmlkGAEgASgJEg0KBXRpdGxlGAIgASgJEgwKBHNsdWcYAyABKAkSEQoJcHVibGlzaGVkGAQgASgIEhIKCmNyZWF0ZWRfYXQYBSABKAkSEgoKdXBkYXRlZF9hdBgGIAEoCRIwCg1jdXN0b21fZG9tYWluGAcgASgJQhm6RxY6FBISc3RhdHVzLmV4YW1wbGUuY29tKsABCg5QYWdlQWNjZXNzVHlwZRIgChxQQUdFX0FDQ0VTU19UWVBFX1VOU1BFQ0lGSUVEEAASGwoXUEFHRV9BQ0NFU1NfVFlQRV9QVUJMSUMQARInCiNQQUdFX0FDQ0VTU19UWVBFX1BBU1NXT1JEX1BST1RFQ1RFRBACEiIKHlBBR0VfQUNDRVNTX1RZUEVfQVVUSEVOVElDQVRFRBADEiIKHlBBR0VfQUNDRVNTX1RZUEVfSVBfUkVTVFJJQ1RFRBAEKmkKCVBhZ2VUaGVtZRIaChZQQUdFX1RIRU1FX1VOU1BFQ0lGSUVEEAASFQoRUEFHRV9USEVNRV9TWVNURU0QARIUChBQQUdFX1RIRU1FX0xJR0hUEAISEwoPUEFHRV9USEVNRV9EQVJLEAMqegoGTG9jYWxlEhYKEkxPQ0FMRV9VTlNQRUNJRklFRBAAEg0KCUxPQ0FMRV9FThABEg0KCUxPQ0FMRV9GUhACEg0KCUxPQ0FMRV9ERRADEg0KCUxPQ0FMRV9UUhAEEg0KCUxPQ0FMRV9ISRAFEg0KCUxPQ0FMRV9LTxAGKuwBCg1PdmVyYWxsU3RhdHVzEh4KGk9WRVJBTExfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHgoaT1ZFUkFMTF9TVEFUVVNfT1BFUkFUSU9OQUwQARIbChdPVkVSQUxMX1NUQVRVU19ERUdSQURFRBACEiEKHU9WRVJBTExfU1RBVFVTX1BBUlRJQUxfT1VUQUdFEAMSHwobT1ZFUkFMTF9TVEFUVVNfTUFKT1JfT1VUQUdFEAQSHgoaT1ZFUkFMTF9TVEFUVVNfTUFJTlRFTkFOQ0UQBRIaChZPVkVSQUxMX1NUQVRVU19VTktOT1dOEAYqjQEKDlBhZ2VNZXRyaWNUeXBlEiAKHFBBR0VfTUVUUklDX1RZUEVfVU5TUEVDSUZJRUQQABIdChlQQUdFX01FVFJJQ19UWVBFX0RVUkFUSU9OEAESHQoZUEFHRV9NRVRSSUNfVFlQRV9SRVFVRVNUUxACEhsKF1BBR0VfTUVUUklDX1RZUEVfTUFOVUFMEAMqYgoLUGFnZUJhclR5cGUSHQoZUEFHRV9CQVJfVFlQRV9VTlNQRUNJRklFRBAAEhoKFlBBR0VfQkFSX1RZUEVfQUJTT0xVVEUQARIYChRQQUdFX0JBUl9UWVBFX01BTlVBTBACQlpaWGdpdGh1Yi5jb20vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMvcGFja2FnZXMvcHJvdG8vb3BlbnN0YXR1cy9zdGF0dXNfcGFnZS92MTtzdGF0dXNwYWdldjFiBnByb3RvMw", [file_gnostic_openapi_v3_annotations], ); +/** + * CustomTheme holds per-mode CSS variable overrides merged over the page theme. + * + * @generated from message openstatus.status_page.v1.CustomTheme + */ +export type CustomTheme = Message<"openstatus.status_page.v1.CustomTheme"> & { + /** + * CSS variable overrides applied in light mode, keyed by variable name (e.g. "--primary": "hsl(24 94% 50%)"). + * + * @generated from field: map light = 1; + */ + light: { [key: string]: string }; + + /** + * CSS variable overrides applied in dark mode, keyed by variable name. + * + * @generated from field: map dark = 2; + */ + dark: { [key: string]: string }; +}; + +/** + * Describes the message openstatus.status_page.v1.CustomTheme. + * Use `create(CustomThemeSchema)` to create a new message. + */ +export const CustomThemeSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_openstatus_status_page_v1_status_page, 0); + +/** + * PageConfiguration is the rich rendering config stored in page.configuration. + * + * @generated from message openstatus.status_page.v1.PageConfiguration + */ +export type PageConfiguration = + & Message<"openstatus.status_page.v1.PageConfiguration"> + & { + /** + * Which metric the status bars represent (configuration.value). + * + * @generated from field: openstatus.status_page.v1.PageMetricType metric_type = 1; + */ + metricType: PageMetricType; + + /** + * How the status bar is computed (configuration.type). + * + * @generated from field: openstatus.status_page.v1.PageBarType bar_type = 2; + */ + barType: PageBarType; + + /** + * Whether to show the uptime percentage (configuration.uptime). + * + * @generated from field: bool show_uptime = 3; + */ + showUptime: boolean; + + /** + * Theme key from the theme store (configuration.theme), e.g. "default". + * Free-form string rather than an enum because the theme catalog is dynamic. + * + * @generated from field: string theme_key = 4; + */ + themeKey: string; + + /** + * Number of uptime-bar days rendered on the page (configuration.days): 30 or 45. + * + * @generated from field: int32 days = 5; + */ + days: number; + }; + +/** + * Describes the message openstatus.status_page.v1.PageConfiguration. + * Use `create(PageConfigurationSchema)` to create a new message. + */ +export const PageConfigurationSchema: GenMessage< + PageConfiguration +> = /*@__PURE__*/ + messageDesc(file_openstatus_status_page_v1_status_page, 1); + /** * StatusPage represents a full status page with all details. * @@ -158,6 +240,13 @@ export type StatusPage = Message<"openstatus.status_page.v1.StatusPage"> & { * @generated from field: string allowed_ip_ranges = 19; */ allowedIpRanges: string; + + /** + * Per-mode CSS variable overrides merged over the theme (only set when configured). + * + * @generated from field: optional openstatus.status_page.v1.CustomTheme custom_theme = 20; + */ + customTheme?: CustomTheme; }; /** @@ -165,7 +254,7 @@ export type StatusPage = Message<"openstatus.status_page.v1.StatusPage"> & { * Use `create(StatusPageSchema)` to create a new message. */ export const StatusPageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_status_page, 0); + messageDesc(file_openstatus_status_page_v1_status_page, 2); /** * StatusPageSummary represents metadata for a status page (used in list responses). @@ -232,7 +321,7 @@ export type StatusPageSummary = export const StatusPageSummarySchema: GenMessage< StatusPageSummary > = /*@__PURE__*/ - messageDesc(file_openstatus_status_page_v1_status_page, 1); + messageDesc(file_openstatus_status_page_v1_status_page, 3); /** * PageAccessType defines who can access the status page. @@ -330,6 +419,21 @@ export enum Locale { * @generated from enum value: LOCALE_DE = 3; */ DE = 3, + + /** + * @generated from enum value: LOCALE_TR = 4; + */ + TR = 4, + + /** + * @generated from enum value: LOCALE_HI = 5; + */ + HI = 5, + + /** + * @generated from enum value: LOCALE_KO = 6; + */ + KO = 6, } /** @@ -385,3 +489,64 @@ export enum OverallStatus { */ export const OverallStatusSchema: GenEnum = /*@__PURE__*/ enumDesc(file_openstatus_status_page_v1_status_page, 3); + +/** + * PageMetricType mirrors page.configuration.value (which metric the status bars represent). + * + * @generated from enum openstatus.status_page.v1.PageMetricType + */ +export enum PageMetricType { + /** + * @generated from enum value: PAGE_METRIC_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: PAGE_METRIC_TYPE_DURATION = 1; + */ + DURATION = 1, + + /** + * @generated from enum value: PAGE_METRIC_TYPE_REQUESTS = 2; + */ + REQUESTS = 2, + + /** + * @generated from enum value: PAGE_METRIC_TYPE_MANUAL = 3; + */ + MANUAL = 3, +} + +/** + * Describes the enum openstatus.status_page.v1.PageMetricType. + */ +export const PageMetricTypeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_openstatus_status_page_v1_status_page, 4); + +/** + * PageBarType mirrors page.configuration.type (how the status bar is computed). + * + * @generated from enum openstatus.status_page.v1.PageBarType + */ +export enum PageBarType { + /** + * @generated from enum value: PAGE_BAR_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: PAGE_BAR_TYPE_ABSOLUTE = 1; + */ + ABSOLUTE = 1, + + /** + * @generated from enum value: PAGE_BAR_TYPE_MANUAL = 2; + */ + MANUAL = 2, +} + +/** + * Describes the enum openstatus.status_page.v1.PageBarType. + */ +export const PageBarTypeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_openstatus_status_page_v1_status_page, 5); diff --git a/src/mod.ts b/src/mod.ts index 9896837..c7c592c 100644 --- a/src/mod.ts +++ b/src/mod.ts @@ -48,6 +48,7 @@ import { StatusReportService } from "./gen/openstatus/status_report/v1/service_p import { StatusPageService } from "./gen/openstatus/status_page/v1/service_pb.ts"; import { MaintenanceService } from "./gen/openstatus/maintenance/v1/service_pb.ts"; import { NotificationService } from "./gen/openstatus/notification/v1/service_pb.ts"; +import { PrivateLocationService } from "./gen/openstatus/private_location/v1/service_pb.ts"; // Re-export the generated service descriptors and Connect transport types so // non-Node runtimes (Cloudflare Workers, browsers) can build their own @@ -58,6 +59,7 @@ export { MaintenanceService, MonitorService, NotificationService, + PrivateLocationService, StatusPageService, StatusReportService, }; @@ -178,6 +180,8 @@ export type { // Re-export status page types export type { + CustomTheme, + PageConfiguration, StatusPage, StatusPageSummary, } from "./gen/openstatus/status_page/v1/status_page_pb.ts"; @@ -186,6 +190,8 @@ export { Locale, OverallStatus, PageAccessType, + PageBarType, + PageMetricType, PageTheme, } from "./gen/openstatus/status_page/v1/status_page_pb.ts"; @@ -226,8 +232,12 @@ export type { GetOverallStatusResponse, GetPageComponentDailySummaryRequest, GetPageComponentDailySummaryResponse, + GetPageComponentRequest, + GetPageComponentResponse, GetStatusPageContentRequest, GetStatusPageContentResponse, + GetStatusPageOverviewRequest, + GetStatusPageOverviewResponse, GetStatusPageRequest, GetStatusPageResponse, ListStatusPagesRequest, @@ -325,6 +335,28 @@ export type { UpdateNotificationResponse, } from "./gen/openstatus/notification/v1/service_pb.ts"; +// Re-export private location types +export type { + PrivateLocation, + PrivateLocationSummary, +} from "./gen/openstatus/private_location/v1/private_location_pb.ts"; + +export { PrivateLocationStatus } from "./gen/openstatus/private_location/v1/private_location_pb.ts"; + +// Re-export private location request/response types +export type { + CreatePrivateLocationRequest, + CreatePrivateLocationResponse, + DeletePrivateLocationRequest, + DeletePrivateLocationResponse, + GetPrivateLocationRequest, + GetPrivateLocationResponse, + ListPrivateLocationsRequest, + ListPrivateLocationsResponse, + UpdatePrivateLocationRequest, + UpdatePrivateLocationResponse, +} from "./gen/openstatus/private_location/v1/service_pb.ts"; + /** * Default OpenStatus API URL. */ @@ -469,6 +501,7 @@ export interface OpenStatusClient { * - `addStaticComponent` - Add a static component * - `removeComponent` - Remove a component * - `updateComponent` - Update a component + * - `getPageComponent` - Get a single component by ID * - `createComponentGroup` - Create a component group * - `deleteComponentGroup` - Delete a component group * - `updateComponentGroup` - Update a component group @@ -478,6 +511,7 @@ export interface OpenStatusClient { * - `listSubscribers` - List all subscribers * - `getStatusPageContent` - Get full status page content * - `getOverallStatus` - Get aggregated status + * - `getStatusPageOverview` - Get page, config, components, reports and statuses in one call * - `getPageComponentDailySummary` - Get per-component daily status buckets (status bars) */ StatusPageService: Client; @@ -521,6 +555,25 @@ export interface OpenStatusClient { NotificationService: Client; }; }; + /** + * Private location service namespace (v1). + */ + privateLocation: { + v1: { + /** + * PrivateLocationService provides CRUD operations for private locations — + * self-hosted checker agents that run monitors from your own network. + * + * Methods: + * - `createPrivateLocation` - Create a private location and get its agent token + * - `getPrivateLocation` - Get a private location by ID (includes the agent token) + * - `listPrivateLocations` - List private location summaries (no tokens) + * - `updatePrivateLocation` - Update a private location + * - `deletePrivateLocation` - Delete a private location + */ + PrivateLocationService: Client; + }; + }; } /** @@ -588,6 +641,11 @@ export function createOpenStatusClient( NotificationService: createClient(NotificationService, transport), }, }, + privateLocation: { + v1: { + PrivateLocationService: createClient(PrivateLocationService, transport), + }, + }, }; } -- 2.51.2