@ninedeploy/schemas 0.16.6 → 0.16.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -29,4 +29,5 @@ export * from './accessGrants.js';
29
29
  export * from './multiNode.js';
30
30
  export * from './serviceFiles.js';
31
31
  export * from './dockerLabels.js';
32
+ export * from './uptime.js';
32
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAElC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAElC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -27,4 +27,5 @@ export * from './accessGrants.js';
27
27
  export * from './multiNode.js';
28
28
  export * from './serviceFiles.js';
29
29
  export * from './dockerLabels.js';
30
+ export * from './uptime.js';
30
31
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAElC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAElC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
@@ -144,6 +144,10 @@ export declare function effectiveBuildOn(value: BuildOn | null | undefined): Bui
144
144
  * node's own clone would hold pointer files), so it builds on the panel and
145
145
  * the image is shipped to the node, as a fan-out target's already is. Such a
146
146
  * deploy was refused before. A chosen placement is always kept.
147
+ *
148
+ * 0.16.7: the same for a node docker service whose code is an uploaded
149
+ * archive ({@link uploadBuildsOnPanel}): the archive is kept on the panel and
150
+ * no node can fetch it.
147
151
  */
148
152
  export declare function serviceBuildOn(service: {
149
153
  buildOn?: string | null;
@@ -152,7 +156,16 @@ export declare function serviceBuildOn(service: {
152
156
  type?: string | null;
153
157
  repoUrl?: string | null;
154
158
  image?: string | null;
159
+ composeContent?: string | null;
155
160
  }): BuildOn;
161
+ /**
162
+ * 0.16.7: whether {@link serviceBuildOn} moves this service's build to the
163
+ * panel because its code is an uploaded archive: a node docker service with
164
+ * no repository, image or inline stack, and no placement chosen. The shape
165
+ * must name all three source fields; a partial one (a save-time check that
166
+ * passes only `serverId`) is never read as an upload.
167
+ */
168
+ export declare function uploadBuildsOnPanel(service: Parameters<typeof serviceBuildOn>[0]): boolean;
156
169
  /** Whether {@link serviceBuildOn} moves this service's build to the panel for Git LFS. */
157
170
  export declare function lfsBuildsOnPanel(service: Parameters<typeof serviceBuildOn>[0]): boolean;
158
171
  /** The orchestrator a stored value means: NULL is today's `container`. */
@@ -1 +1 @@
1
- {"version":3,"file":"multiNode.d.ts","sourceRoot":"","sources":["../src/multiNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multiNode.d.ts","sourceRoot":"","sources":["../src/multiNode.ts"],"names":[],"mappings":"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"}
package/dist/multiNode.js CHANGED
@@ -165,12 +165,34 @@ export function effectiveBuildOn(value) {
165
165
  * node's own clone would hold pointer files), so it builds on the panel and
166
166
  * the image is shipped to the node, as a fan-out target's already is. Such a
167
167
  * deploy was refused before. A chosen placement is always kept.
168
+ *
169
+ * 0.16.7: the same for a node docker service whose code is an uploaded
170
+ * archive ({@link uploadBuildsOnPanel}): the archive is kept on the panel and
171
+ * no node can fetch it.
168
172
  */
169
173
  export function serviceBuildOn(service) {
170
- if (lfsBuildsOnPanel(service))
174
+ if (lfsBuildsOnPanel(service) || uploadBuildsOnPanel(service))
171
175
  return 'panel';
172
176
  return effectiveBuildOn((service.buildOn ?? null));
173
177
  }
178
+ /**
179
+ * 0.16.7: whether {@link serviceBuildOn} moves this service's build to the
180
+ * panel because its code is an uploaded archive: a node docker service with
181
+ * no repository, image or inline stack, and no placement chosen. The shape
182
+ * must name all three source fields; a partial one (a save-time check that
183
+ * passes only `serverId`) is never read as an upload.
184
+ */
185
+ export function uploadBuildsOnPanel(service) {
186
+ return (service.buildOn == null &&
187
+ service.serverId != null &&
188
+ service.type === 'docker' &&
189
+ service.repoUrl !== undefined &&
190
+ service.image !== undefined &&
191
+ service.composeContent !== undefined &&
192
+ !service.repoUrl &&
193
+ !service.image &&
194
+ !service.composeContent);
195
+ }
174
196
  /** Whether {@link serviceBuildOn} moves this service's build to the panel for Git LFS. */
175
197
  export function lfsBuildsOnPanel(service) {
176
198
  return (service.buildOn == null &&
@@ -1 +1 @@
1
- {"version":3,"file":"multiNode.js","sourceRoot":"","sources":["../src/multiNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multiNode.js","sourceRoot":"","sources":["../src/multiNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * 0.16.8 uptime monitors and public status pages.
4
+ *
5
+ * A monitor probes a target from the panel host on an interval: an HTTP(S)
6
+ * URL (status code, optional keyword in the body) or a TCP `host:port`. Its
7
+ * state goes up / down after `failuresBeforeDown` failed checks in a row, and
8
+ * every transition is an `alert.monitor_down` / `alert.monitor_up` event on
9
+ * the existing notification channels. A status page shows a chosen set of
10
+ * monitors publicly, by name only (never the target).
11
+ */
12
+ export declare const MONITOR_KINDS: readonly ['http', 'tcp'];
13
+ export declare const monitorKind: z.ZodEnum<{
14
+ http: "http";
15
+ tcp: "tcp";
16
+ }>;
17
+ export type MonitorKind = z.infer<typeof monitorKind>;
18
+ export declare const MONITOR_METHODS: readonly ['GET', 'HEAD'];
19
+ export declare const monitorMethod: z.ZodEnum<{
20
+ GET: "GET";
21
+ HEAD: "HEAD";
22
+ }>;
23
+ export declare const MONITOR_STATUSES: readonly ['pending', 'up', 'down', 'paused'];
24
+ export type MonitorStatus = (typeof MONITOR_STATUSES)[number];
25
+ export declare const MONITOR_INTERVAL_MIN = 30;
26
+ export declare const MONITOR_INTERVAL_MAX = 3600;
27
+ export declare const MONITOR_TIMEOUT_MAX = 60;
28
+ export declare const MONITOR_FAILURES_MAX = 10;
29
+ export declare const MONITOR_KEYWORD_MAX = 200;
30
+ /** Status pages show at most this many monitors. */
31
+ export declare const STATUS_PAGE_MONITORS_MAX = 50;
32
+ /** Days of history a status page shows. */
33
+ export declare const STATUS_PAGE_DAYS = 90;
34
+ export declare const DEFAULT_EXPECTED_STATUS = "200-399";
35
+ /**
36
+ * The status codes an HTTP check accepts: comma-separated codes and ranges,
37
+ * each between 100 and 599 (`200-299`, `200,204,301-302`). Null when the
38
+ * text is not such a list.
39
+ */
40
+ export declare function parseExpectedStatus(spec: string): Array<[number, number]> | null;
41
+ /** Whether `code` is one of the codes `spec` accepts (an invalid spec accepts none). */
42
+ export declare function statusMatches(code: number, spec: string): boolean;
43
+ /** `host:port` for a TCP check: a hostname, an IPv4 address or a bracketed IPv6 address, and a port 1–65535. */
44
+ export declare function parseTcpTarget(target: string): {
45
+ host: string;
46
+ port: number;
47
+ } | null;
48
+ /** Why `target` is not valid for `kind`, or null. */
49
+ export declare function monitorTargetProblem(kind: MonitorKind, target: string): string | null;
50
+ /** `POST /v1/monitors` (operator). */
51
+ export declare const monitorCreate: z.ZodObject<{
52
+ name: z.ZodString;
53
+ kind: z.ZodEnum<{
54
+ http: "http";
55
+ tcp: "tcp";
56
+ }>;
57
+ target: z.ZodString;
58
+ serviceId: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
59
+ method: z.ZodDefault<z.ZodEnum<{
60
+ GET: "GET";
61
+ HEAD: "HEAD";
62
+ }>>;
63
+ expectedStatus: z.ZodDefault<z.ZodString>;
64
+ keyword: z.ZodDefault<z.ZodNullable<z.ZodString>>;
65
+ intervalSeconds: z.ZodDefault<z.ZodNumber>;
66
+ timeoutSeconds: z.ZodDefault<z.ZodNumber>;
67
+ failuresBeforeDown: z.ZodDefault<z.ZodNumber>;
68
+ followRedirects: z.ZodDefault<z.ZodBoolean>;
69
+ verifyTls: z.ZodDefault<z.ZodBoolean>;
70
+ enabled: z.ZodDefault<z.ZodBoolean>;
71
+ }, z.core.$strict>;
72
+ export type MonitorCreateInput = z.input<typeof monitorCreate>;
73
+ export type MonitorCreate = z.infer<typeof monitorCreate>;
74
+ /**
75
+ * `PATCH /v1/monitors/:id` (operator). Partial; the route checks the merged
76
+ * kind, target, method and keyword with {@link monitorTargetProblem} again.
77
+ */
78
+ export declare const monitorPatch: z.ZodObject<{
79
+ name: z.ZodOptional<z.ZodString>;
80
+ serviceId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
81
+ kind: z.ZodOptional<z.ZodEnum<{
82
+ http: "http";
83
+ tcp: "tcp";
84
+ }>>;
85
+ target: z.ZodOptional<z.ZodString>;
86
+ method: z.ZodOptional<z.ZodEnum<{
87
+ GET: "GET";
88
+ HEAD: "HEAD";
89
+ }>>;
90
+ expectedStatus: z.ZodOptional<z.ZodString>;
91
+ keyword: z.ZodOptional<z.ZodNullable<z.ZodString>>;
92
+ intervalSeconds: z.ZodOptional<z.ZodNumber>;
93
+ timeoutSeconds: z.ZodOptional<z.ZodNumber>;
94
+ failuresBeforeDown: z.ZodOptional<z.ZodNumber>;
95
+ followRedirects: z.ZodOptional<z.ZodBoolean>;
96
+ verifyTls: z.ZodOptional<z.ZodBoolean>;
97
+ enabled: z.ZodOptional<z.ZodBoolean>;
98
+ }, z.core.$strict>;
99
+ export type MonitorPatch = z.infer<typeof monitorPatch>;
100
+ /** A monitor as the API returns it. */
101
+ export interface MonitorView {
102
+ id: number;
103
+ name: string;
104
+ serviceId: number | null;
105
+ kind: MonitorKind;
106
+ target: string;
107
+ method: 'GET' | 'HEAD';
108
+ expectedStatus: string;
109
+ keyword: string | null;
110
+ intervalSeconds: number;
111
+ timeoutSeconds: number;
112
+ failuresBeforeDown: number;
113
+ followRedirects: boolean;
114
+ verifyTls: boolean;
115
+ enabled: boolean;
116
+ status: MonitorStatus;
117
+ /** When the status last changed. */
118
+ statusSince: string | null;
119
+ consecutiveFailures: number;
120
+ lastCheckedAt: string | null;
121
+ lastResponseMs: number | null;
122
+ lastStatusCode: number | null;
123
+ lastError: string | null;
124
+ /** https: when the certificate the last check saw expires. */
125
+ certExpiresAt: string | null;
126
+ /** Share of successful checks, 0–100 with two decimals; null without checks. */
127
+ uptime: {
128
+ h24: number | null;
129
+ d7: number | null;
130
+ d30: number | null;
131
+ };
132
+ createdAt: string;
133
+ }
134
+ /** One check result. */
135
+ export interface MonitorCheckView {
136
+ ts: string;
137
+ ok: boolean;
138
+ responseMs: number | null;
139
+ statusCode: number | null;
140
+ error: string | null;
141
+ }
142
+ /** A status page slug: lowercase letters, digits and dashes. */
143
+ export declare const statusPageSlug: z.ZodString;
144
+ /** `POST /v1/status-pages` (operator). */
145
+ export declare const statusPageCreate: z.ZodObject<{
146
+ slug: z.ZodString;
147
+ title: z.ZodString;
148
+ description: z.ZodDefault<z.ZodNullable<z.ZodString>>;
149
+ notice: z.ZodDefault<z.ZodNullable<z.ZodString>>;
150
+ published: z.ZodDefault<z.ZodBoolean>;
151
+ showResponseTimes: z.ZodDefault<z.ZodBoolean>;
152
+ monitorIds: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
153
+ }, z.core.$strict>;
154
+ export type StatusPageCreateInput = z.input<typeof statusPageCreate>;
155
+ /** `PATCH /v1/status-pages/:id` (operator). */
156
+ export declare const statusPagePatch: z.ZodObject<{
157
+ slug: z.ZodOptional<z.ZodString>;
158
+ title: z.ZodOptional<z.ZodString>;
159
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
160
+ notice: z.ZodOptional<z.ZodNullable<z.ZodString>>;
161
+ published: z.ZodOptional<z.ZodBoolean>;
162
+ showResponseTimes: z.ZodOptional<z.ZodBoolean>;
163
+ monitorIds: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
164
+ }, z.core.$strict>;
165
+ export type StatusPagePatch = z.infer<typeof statusPagePatch>;
166
+ export interface StatusPageView {
167
+ id: number;
168
+ slug: string;
169
+ title: string;
170
+ description: string | null;
171
+ notice: string | null;
172
+ published: boolean;
173
+ showResponseTimes: boolean;
174
+ monitorIds: number[];
175
+ /** Path of the public page on the panel. */
176
+ path: string;
177
+ createdAt: string;
178
+ }
179
+ /** One day of a monitor's history on a public status page. */
180
+ export interface PublicStatusDay {
181
+ /** `YYYY-MM-DD`, UTC. */
182
+ day: string;
183
+ /** Null: no checks that day. */
184
+ uptime: number | null;
185
+ }
186
+ /** `GET /v1/status/:slug`: what a public status page shows. Never a target. */
187
+ export interface PublicStatusPage {
188
+ title: string;
189
+ description: string | null;
190
+ notice: string | null;
191
+ /** `operational` when every monitor is up, `degraded` when some are down, `down` when all are. */
192
+ overall: 'operational' | 'degraded' | 'down' | 'unknown';
193
+ monitors: Array<{
194
+ name: string;
195
+ status: 'up' | 'down' | 'unknown';
196
+ uptime90d: number | null;
197
+ avgResponseMs: number | null;
198
+ days: PublicStatusDay[];
199
+ }>;
200
+ generatedAt: string;
201
+ }
202
+ /** The overall state of a status page from its monitors' states. */
203
+ export declare function overallStatus(states: Array<'up' | 'down' | 'unknown'>): PublicStatusPage['overall'];
204
+ //# sourceMappingURL=uptime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uptime.d.ts","sourceRoot":"","sources":["../src/uptime.ts"],"names":[],"mappings":"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"}
package/dist/uptime.js ADDED
@@ -0,0 +1,180 @@
1
+ import { z } from 'zod';
2
+ import { id } from './common.js';
3
+ /**
4
+ * 0.16.8 uptime monitors and public status pages.
5
+ *
6
+ * A monitor probes a target from the panel host on an interval: an HTTP(S)
7
+ * URL (status code, optional keyword in the body) or a TCP `host:port`. Its
8
+ * state goes up / down after `failuresBeforeDown` failed checks in a row, and
9
+ * every transition is an `alert.monitor_down` / `alert.monitor_up` event on
10
+ * the existing notification channels. A status page shows a chosen set of
11
+ * monitors publicly, by name only (never the target).
12
+ */
13
+ export const MONITOR_KINDS = ['http', 'tcp'];
14
+ export const monitorKind = z.enum(MONITOR_KINDS);
15
+ export const MONITOR_METHODS = ['GET', 'HEAD'];
16
+ export const monitorMethod = z.enum(MONITOR_METHODS);
17
+ export const MONITOR_STATUSES = ['pending', 'up', 'down', 'paused'];
18
+ export const MONITOR_INTERVAL_MIN = 30;
19
+ export const MONITOR_INTERVAL_MAX = 3600;
20
+ export const MONITOR_TIMEOUT_MAX = 60;
21
+ export const MONITOR_FAILURES_MAX = 10;
22
+ export const MONITOR_KEYWORD_MAX = 200;
23
+ /** Status pages show at most this many monitors. */
24
+ export const STATUS_PAGE_MONITORS_MAX = 50;
25
+ /** Days of history a status page shows. */
26
+ export const STATUS_PAGE_DAYS = 90;
27
+ export const DEFAULT_EXPECTED_STATUS = '200-399';
28
+ /**
29
+ * The status codes an HTTP check accepts: comma-separated codes and ranges,
30
+ * each between 100 and 599 (`200-299`, `200,204,301-302`). Null when the
31
+ * text is not such a list.
32
+ */
33
+ export function parseExpectedStatus(spec) {
34
+ const parts = spec.split(',').map((p) => p.trim());
35
+ if (parts.length === 0 || parts.length > 20)
36
+ return null;
37
+ const ranges = [];
38
+ for (const part of parts) {
39
+ const m = /^(\d{3})(?:-(\d{3}))?$/.exec(part);
40
+ if (!m)
41
+ return null;
42
+ const lo = Number(m[1]);
43
+ const hi = m[2] === undefined ? lo : Number(m[2]);
44
+ if (lo < 100 || hi > 599 || lo > hi)
45
+ return null;
46
+ ranges.push([lo, hi]);
47
+ }
48
+ return ranges;
49
+ }
50
+ /** Whether `code` is one of the codes `spec` accepts (an invalid spec accepts none). */
51
+ export function statusMatches(code, spec) {
52
+ const ranges = parseExpectedStatus(spec);
53
+ return ranges !== null && ranges.some(([lo, hi]) => code >= lo && code <= hi);
54
+ }
55
+ /** `host:port` for a TCP check: a hostname, an IPv4 address or a bracketed IPv6 address, and a port 1–65535. */
56
+ export function parseTcpTarget(target) {
57
+ const m = /^(\[[0-9A-Fa-f:.]+\]|[A-Za-z0-9](?:[A-Za-z0-9.-]{0,251}[A-Za-z0-9])?):(\d{1,5})$/.exec(target);
58
+ if (!m)
59
+ return null;
60
+ const port = Number(m[2]);
61
+ if (port < 1 || port > 65535)
62
+ return null;
63
+ const host = m[1].startsWith('[') ? m[1].slice(1, -1) : m[1];
64
+ return { host, port };
65
+ }
66
+ /** Why `target` is not valid for `kind`, or null. */
67
+ export function monitorTargetProblem(kind, target) {
68
+ if (kind === 'tcp')
69
+ return parseTcpTarget(target) ? null : 'a TCP target is host:port (an IPv6 address in brackets)';
70
+ if (!httpUrl.safeParse(target).success)
71
+ return 'an HTTP target is an http:// or https:// URL';
72
+ // userinfo is everything between `//` and an `@` before the first `/`, `?` or `#`.
73
+ if (/^https?:\/\/[^/?#]*@/i.test(target))
74
+ return 'credentials in the URL are not allowed';
75
+ return null;
76
+ }
77
+ const httpUrl = z.url({ protocol: /^https?$/ });
78
+ const monitorFields = {
79
+ name: z.string().trim().min(1).max(100),
80
+ /** The service the monitor belongs to (members who can see it see the monitor), or null for an operator-only monitor. */
81
+ serviceId: id.nullable(),
82
+ kind: monitorKind,
83
+ /** http: the URL; tcp: `host:port`. */
84
+ target: z.string().trim().min(1).max(2048),
85
+ method: monitorMethod,
86
+ /** http: accepted status codes, see {@link parseExpectedStatus}. */
87
+ expectedStatus: z
88
+ .string()
89
+ .trim()
90
+ .max(200)
91
+ .refine((v) => parseExpectedStatus(v) !== null, 'codes and ranges between 100 and 599, such as 200-299,301'),
92
+ /** http: text the body must contain (the first 1 MiB is read). */
93
+ keyword: z.string().max(MONITOR_KEYWORD_MAX).nullable(),
94
+ intervalSeconds: z.number().int().min(MONITOR_INTERVAL_MIN).max(MONITOR_INTERVAL_MAX),
95
+ timeoutSeconds: z.number().int().min(1).max(MONITOR_TIMEOUT_MAX),
96
+ failuresBeforeDown: z.number().int().min(1).max(MONITOR_FAILURES_MAX),
97
+ followRedirects: z.boolean(),
98
+ /** http: false accepts a self-signed or expired certificate. */
99
+ verifyTls: z.boolean(),
100
+ enabled: z.boolean(),
101
+ };
102
+ function checkTarget(v, ctx) {
103
+ if (v.kind !== undefined && v.target !== undefined) {
104
+ const problem = monitorTargetProblem(v.kind, v.target);
105
+ if (problem)
106
+ ctx.addIssue({ code: 'custom', path: ['target'], message: problem });
107
+ }
108
+ if (v.kind === 'tcp' && v.keyword)
109
+ ctx.addIssue({ code: 'custom', path: ['keyword'], message: 'a keyword applies to HTTP checks' });
110
+ if (v.method === 'HEAD' && v.keyword)
111
+ ctx.addIssue({ code: 'custom', path: ['keyword'], message: 'a HEAD request has no body to search; use GET' });
112
+ }
113
+ /** `POST /v1/monitors` (operator). */
114
+ export const monitorCreate = z
115
+ .object({
116
+ ...monitorFields,
117
+ serviceId: monitorFields.serviceId.default(null),
118
+ method: monitorFields.method.default('GET'),
119
+ expectedStatus: monitorFields.expectedStatus.default(DEFAULT_EXPECTED_STATUS),
120
+ keyword: monitorFields.keyword.default(null),
121
+ intervalSeconds: monitorFields.intervalSeconds.default(60),
122
+ timeoutSeconds: monitorFields.timeoutSeconds.default(10),
123
+ failuresBeforeDown: monitorFields.failuresBeforeDown.default(2),
124
+ followRedirects: monitorFields.followRedirects.default(true),
125
+ verifyTls: monitorFields.verifyTls.default(true),
126
+ enabled: monitorFields.enabled.default(true),
127
+ })
128
+ .strict()
129
+ .superRefine(checkTarget);
130
+ /**
131
+ * `PATCH /v1/monitors/:id` (operator). Partial; the route checks the merged
132
+ * kind, target, method and keyword with {@link monitorTargetProblem} again.
133
+ */
134
+ export const monitorPatch = z.object(monitorFields).partial().strict().superRefine(checkTarget);
135
+ /** A status page slug: lowercase letters, digits and dashes. */
136
+ export const statusPageSlug = z
137
+ .string()
138
+ .trim()
139
+ .min(1)
140
+ .max(64)
141
+ .regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/, 'lowercase letters, digits and dashes, not starting or ending with a dash');
142
+ const statusPageFields = {
143
+ slug: statusPageSlug,
144
+ title: z.string().trim().min(1).max(100),
145
+ description: z.string().trim().max(500).nullable(),
146
+ /** A notice shown at the top (maintenance, an incident), or null. */
147
+ notice: z.string().trim().max(1000).nullable(),
148
+ /** Off: the page answers 404 to everyone. */
149
+ published: z.boolean(),
150
+ showResponseTimes: z.boolean(),
151
+ /** In display order, each once. */
152
+ monitorIds: z
153
+ .array(id)
154
+ .max(STATUS_PAGE_MONITORS_MAX)
155
+ .refine((ids) => new Set(ids).size === ids.length, 'each monitor once'),
156
+ };
157
+ /** `POST /v1/status-pages` (operator). */
158
+ export const statusPageCreate = z
159
+ .object({
160
+ ...statusPageFields,
161
+ description: statusPageFields.description.default(null),
162
+ notice: statusPageFields.notice.default(null),
163
+ published: statusPageFields.published.default(false),
164
+ showResponseTimes: statusPageFields.showResponseTimes.default(true),
165
+ monitorIds: statusPageFields.monitorIds.default([]),
166
+ })
167
+ .strict();
168
+ /** `PATCH /v1/status-pages/:id` (operator). */
169
+ export const statusPagePatch = z.object(statusPageFields).partial().strict();
170
+ /** The overall state of a status page from its monitors' states. */
171
+ export function overallStatus(states) {
172
+ const known = states.filter((s) => s !== 'unknown');
173
+ if (known.length === 0)
174
+ return 'unknown';
175
+ const down = known.filter((s) => s === 'down').length;
176
+ if (down === 0)
177
+ return 'operational';
178
+ return down === known.length ? 'down' : 'degraded';
179
+ }
180
+ //# sourceMappingURL=uptime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uptime.js","sourceRoot":"","sources":["../src/uptime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ninedeploy/schemas",
3
- "version": "0.16.6",
3
+ "version": "0.16.8",
4
4
  "description": "Shared Zod schemas and validation types for NineDeploy",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/index.ts CHANGED
@@ -30,3 +30,4 @@ export * from './accessGrants.js';
30
30
  export * from './multiNode.js';
31
31
  export * from './serviceFiles.js';
32
32
  export * from './dockerLabels.js';
33
+ export * from './uptime.js';
package/src/multiNode.ts CHANGED
@@ -189,6 +189,10 @@ export function effectiveBuildOn(value: BuildOn | null | undefined): BuildOn {
189
189
  * node's own clone would hold pointer files), so it builds on the panel and
190
190
  * the image is shipped to the node, as a fan-out target's already is. Such a
191
191
  * deploy was refused before. A chosen placement is always kept.
192
+ *
193
+ * 0.16.7: the same for a node docker service whose code is an uploaded
194
+ * archive ({@link uploadBuildsOnPanel}): the archive is kept on the panel and
195
+ * no node can fetch it.
192
196
  */
193
197
  export function serviceBuildOn(service: {
194
198
  buildOn?: string | null;
@@ -197,11 +201,33 @@ export function serviceBuildOn(service: {
197
201
  type?: string | null;
198
202
  repoUrl?: string | null;
199
203
  image?: string | null;
204
+ composeContent?: string | null;
200
205
  }): BuildOn {
201
- if (lfsBuildsOnPanel(service)) return 'panel';
206
+ if (lfsBuildsOnPanel(service) || uploadBuildsOnPanel(service)) return 'panel';
202
207
  return effectiveBuildOn((service.buildOn ?? null) as BuildOn | null);
203
208
  }
204
209
 
210
+ /**
211
+ * 0.16.7: whether {@link serviceBuildOn} moves this service's build to the
212
+ * panel because its code is an uploaded archive: a node docker service with
213
+ * no repository, image or inline stack, and no placement chosen. The shape
214
+ * must name all three source fields; a partial one (a save-time check that
215
+ * passes only `serverId`) is never read as an upload.
216
+ */
217
+ export function uploadBuildsOnPanel(service: Parameters<typeof serviceBuildOn>[0]): boolean {
218
+ return (
219
+ service.buildOn == null &&
220
+ service.serverId != null &&
221
+ service.type === 'docker' &&
222
+ service.repoUrl !== undefined &&
223
+ service.image !== undefined &&
224
+ service.composeContent !== undefined &&
225
+ !service.repoUrl &&
226
+ !service.image &&
227
+ !service.composeContent
228
+ );
229
+ }
230
+
205
231
  /** Whether {@link serviceBuildOn} moves this service's build to the panel for Git LFS. */
206
232
  export function lfsBuildsOnPanel(service: Parameters<typeof serviceBuildOn>[0]): boolean {
207
233
  return (
package/src/uptime.ts ADDED
@@ -0,0 +1,273 @@
1
+ import { z } from 'zod';
2
+ import { id } from './common.js';
3
+
4
+ /**
5
+ * 0.16.8 uptime monitors and public status pages.
6
+ *
7
+ * A monitor probes a target from the panel host on an interval: an HTTP(S)
8
+ * URL (status code, optional keyword in the body) or a TCP `host:port`. Its
9
+ * state goes up / down after `failuresBeforeDown` failed checks in a row, and
10
+ * every transition is an `alert.monitor_down` / `alert.monitor_up` event on
11
+ * the existing notification channels. A status page shows a chosen set of
12
+ * monitors publicly, by name only (never the target).
13
+ */
14
+
15
+ export const MONITOR_KINDS = ['http', 'tcp'] as const;
16
+ export const monitorKind = z.enum(MONITOR_KINDS);
17
+ export type MonitorKind = z.infer<typeof monitorKind>;
18
+
19
+ export const MONITOR_METHODS = ['GET', 'HEAD'] as const;
20
+ export const monitorMethod = z.enum(MONITOR_METHODS);
21
+
22
+ export const MONITOR_STATUSES = ['pending', 'up', 'down', 'paused'] as const;
23
+ export type MonitorStatus = (typeof MONITOR_STATUSES)[number];
24
+
25
+ export const MONITOR_INTERVAL_MIN = 30;
26
+ export const MONITOR_INTERVAL_MAX = 3600;
27
+ export const MONITOR_TIMEOUT_MAX = 60;
28
+ export const MONITOR_FAILURES_MAX = 10;
29
+ export const MONITOR_KEYWORD_MAX = 200;
30
+ /** Status pages show at most this many monitors. */
31
+ export const STATUS_PAGE_MONITORS_MAX = 50;
32
+ /** Days of history a status page shows. */
33
+ export const STATUS_PAGE_DAYS = 90;
34
+ export const DEFAULT_EXPECTED_STATUS = '200-399';
35
+
36
+ /**
37
+ * The status codes an HTTP check accepts: comma-separated codes and ranges,
38
+ * each between 100 and 599 (`200-299`, `200,204,301-302`). Null when the
39
+ * text is not such a list.
40
+ */
41
+ export function parseExpectedStatus(spec: string): Array<[number, number]> | null {
42
+ const parts = spec.split(',').map((p) => p.trim());
43
+ if (parts.length === 0 || parts.length > 20) return null;
44
+ const ranges: Array<[number, number]> = [];
45
+ for (const part of parts) {
46
+ const m = /^(\d{3})(?:-(\d{3}))?$/.exec(part);
47
+ if (!m) return null;
48
+ const lo = Number(m[1]);
49
+ const hi = m[2] === undefined ? lo : Number(m[2]);
50
+ if (lo < 100 || hi > 599 || lo > hi) return null;
51
+ ranges.push([lo, hi]);
52
+ }
53
+ return ranges;
54
+ }
55
+
56
+ /** Whether `code` is one of the codes `spec` accepts (an invalid spec accepts none). */
57
+ export function statusMatches(code: number, spec: string): boolean {
58
+ const ranges = parseExpectedStatus(spec);
59
+ return ranges !== null && ranges.some(([lo, hi]) => code >= lo && code <= hi);
60
+ }
61
+
62
+ /** `host:port` for a TCP check: a hostname, an IPv4 address or a bracketed IPv6 address, and a port 1–65535. */
63
+ export function parseTcpTarget(target: string): { host: string; port: number } | null {
64
+ const m = /^(\[[0-9A-Fa-f:.]+\]|[A-Za-z0-9](?:[A-Za-z0-9.-]{0,251}[A-Za-z0-9])?):(\d{1,5})$/.exec(target);
65
+ if (!m) return null;
66
+ const port = Number(m[2]);
67
+ if (port < 1 || port > 65535) return null;
68
+ const host = m[1]!.startsWith('[') ? m[1]!.slice(1, -1) : m[1]!;
69
+ return { host, port };
70
+ }
71
+
72
+ /** Why `target` is not valid for `kind`, or null. */
73
+ export function monitorTargetProblem(kind: MonitorKind, target: string): string | null {
74
+ if (kind === 'tcp') return parseTcpTarget(target) ? null : 'a TCP target is host:port (an IPv6 address in brackets)';
75
+ if (!httpUrl.safeParse(target).success) return 'an HTTP target is an http:// or https:// URL';
76
+ // userinfo is everything between `//` and an `@` before the first `/`, `?` or `#`.
77
+ if (/^https?:\/\/[^/?#]*@/i.test(target)) return 'credentials in the URL are not allowed';
78
+ return null;
79
+ }
80
+
81
+ const httpUrl = z.url({ protocol: /^https?$/ });
82
+
83
+ const monitorFields = {
84
+ name: z.string().trim().min(1).max(100),
85
+ /** The service the monitor belongs to (members who can see it see the monitor), or null for an operator-only monitor. */
86
+ serviceId: id.nullable(),
87
+ kind: monitorKind,
88
+ /** http: the URL; tcp: `host:port`. */
89
+ target: z.string().trim().min(1).max(2048),
90
+ method: monitorMethod,
91
+ /** http: accepted status codes, see {@link parseExpectedStatus}. */
92
+ expectedStatus: z
93
+ .string()
94
+ .trim()
95
+ .max(200)
96
+ .refine((v) => parseExpectedStatus(v) !== null, 'codes and ranges between 100 and 599, such as 200-299,301'),
97
+ /** http: text the body must contain (the first 1 MiB is read). */
98
+ keyword: z.string().max(MONITOR_KEYWORD_MAX).nullable(),
99
+ intervalSeconds: z.number().int().min(MONITOR_INTERVAL_MIN).max(MONITOR_INTERVAL_MAX),
100
+ timeoutSeconds: z.number().int().min(1).max(MONITOR_TIMEOUT_MAX),
101
+ failuresBeforeDown: z.number().int().min(1).max(MONITOR_FAILURES_MAX),
102
+ followRedirects: z.boolean(),
103
+ /** http: false accepts a self-signed or expired certificate. */
104
+ verifyTls: z.boolean(),
105
+ enabled: z.boolean(),
106
+ };
107
+
108
+ type TargetFields = { kind?: MonitorKind; target?: string; keyword?: string | null; method?: string };
109
+
110
+ function checkTarget(v: TargetFields, ctx: z.RefinementCtx): void {
111
+ if (v.kind !== undefined && v.target !== undefined) {
112
+ const problem = monitorTargetProblem(v.kind, v.target);
113
+ if (problem) ctx.addIssue({ code: 'custom', path: ['target'], message: problem });
114
+ }
115
+ if (v.kind === 'tcp' && v.keyword) ctx.addIssue({ code: 'custom', path: ['keyword'], message: 'a keyword applies to HTTP checks' });
116
+ if (v.method === 'HEAD' && v.keyword) ctx.addIssue({ code: 'custom', path: ['keyword'], message: 'a HEAD request has no body to search; use GET' });
117
+ }
118
+
119
+ /** `POST /v1/monitors` (operator). */
120
+ export const monitorCreate = z
121
+ .object({
122
+ ...monitorFields,
123
+ serviceId: monitorFields.serviceId.default(null),
124
+ method: monitorFields.method.default('GET'),
125
+ expectedStatus: monitorFields.expectedStatus.default(DEFAULT_EXPECTED_STATUS),
126
+ keyword: monitorFields.keyword.default(null),
127
+ intervalSeconds: monitorFields.intervalSeconds.default(60),
128
+ timeoutSeconds: monitorFields.timeoutSeconds.default(10),
129
+ failuresBeforeDown: monitorFields.failuresBeforeDown.default(2),
130
+ followRedirects: monitorFields.followRedirects.default(true),
131
+ verifyTls: monitorFields.verifyTls.default(true),
132
+ enabled: monitorFields.enabled.default(true),
133
+ })
134
+ .strict()
135
+ .superRefine(checkTarget);
136
+ export type MonitorCreateInput = z.input<typeof monitorCreate>;
137
+ export type MonitorCreate = z.infer<typeof monitorCreate>;
138
+
139
+ /**
140
+ * `PATCH /v1/monitors/:id` (operator). Partial; the route checks the merged
141
+ * kind, target, method and keyword with {@link monitorTargetProblem} again.
142
+ */
143
+ export const monitorPatch = z.object(monitorFields).partial().strict().superRefine(checkTarget);
144
+ export type MonitorPatch = z.infer<typeof monitorPatch>;
145
+
146
+ /** A monitor as the API returns it. */
147
+ export interface MonitorView {
148
+ id: number;
149
+ name: string;
150
+ serviceId: number | null;
151
+ kind: MonitorKind;
152
+ target: string;
153
+ method: 'GET' | 'HEAD';
154
+ expectedStatus: string;
155
+ keyword: string | null;
156
+ intervalSeconds: number;
157
+ timeoutSeconds: number;
158
+ failuresBeforeDown: number;
159
+ followRedirects: boolean;
160
+ verifyTls: boolean;
161
+ enabled: boolean;
162
+ status: MonitorStatus;
163
+ /** When the status last changed. */
164
+ statusSince: string | null;
165
+ consecutiveFailures: number;
166
+ lastCheckedAt: string | null;
167
+ lastResponseMs: number | null;
168
+ lastStatusCode: number | null;
169
+ lastError: string | null;
170
+ /** https: when the certificate the last check saw expires. */
171
+ certExpiresAt: string | null;
172
+ /** Share of successful checks, 0–100 with two decimals; null without checks. */
173
+ uptime: { h24: number | null; d7: number | null; d30: number | null };
174
+ createdAt: string;
175
+ }
176
+
177
+ /** One check result. */
178
+ export interface MonitorCheckView {
179
+ ts: string;
180
+ ok: boolean;
181
+ responseMs: number | null;
182
+ statusCode: number | null;
183
+ error: string | null;
184
+ }
185
+
186
+ /** A status page slug: lowercase letters, digits and dashes. */
187
+ export const statusPageSlug = z
188
+ .string()
189
+ .trim()
190
+ .min(1)
191
+ .max(64)
192
+ .regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/, 'lowercase letters, digits and dashes, not starting or ending with a dash');
193
+
194
+ const statusPageFields = {
195
+ slug: statusPageSlug,
196
+ title: z.string().trim().min(1).max(100),
197
+ description: z.string().trim().max(500).nullable(),
198
+ /** A notice shown at the top (maintenance, an incident), or null. */
199
+ notice: z.string().trim().max(1000).nullable(),
200
+ /** Off: the page answers 404 to everyone. */
201
+ published: z.boolean(),
202
+ showResponseTimes: z.boolean(),
203
+ /** In display order, each once. */
204
+ monitorIds: z
205
+ .array(id)
206
+ .max(STATUS_PAGE_MONITORS_MAX)
207
+ .refine((ids) => new Set(ids).size === ids.length, 'each monitor once'),
208
+ };
209
+
210
+ /** `POST /v1/status-pages` (operator). */
211
+ export const statusPageCreate = z
212
+ .object({
213
+ ...statusPageFields,
214
+ description: statusPageFields.description.default(null),
215
+ notice: statusPageFields.notice.default(null),
216
+ published: statusPageFields.published.default(false),
217
+ showResponseTimes: statusPageFields.showResponseTimes.default(true),
218
+ monitorIds: statusPageFields.monitorIds.default([]),
219
+ })
220
+ .strict();
221
+ export type StatusPageCreateInput = z.input<typeof statusPageCreate>;
222
+
223
+ /** `PATCH /v1/status-pages/:id` (operator). */
224
+ export const statusPagePatch = z.object(statusPageFields).partial().strict();
225
+ export type StatusPagePatch = z.infer<typeof statusPagePatch>;
226
+
227
+ export interface StatusPageView {
228
+ id: number;
229
+ slug: string;
230
+ title: string;
231
+ description: string | null;
232
+ notice: string | null;
233
+ published: boolean;
234
+ showResponseTimes: boolean;
235
+ monitorIds: number[];
236
+ /** Path of the public page on the panel. */
237
+ path: string;
238
+ createdAt: string;
239
+ }
240
+
241
+ /** One day of a monitor's history on a public status page. */
242
+ export interface PublicStatusDay {
243
+ /** `YYYY-MM-DD`, UTC. */
244
+ day: string;
245
+ /** Null: no checks that day. */
246
+ uptime: number | null;
247
+ }
248
+
249
+ /** `GET /v1/status/:slug`: what a public status page shows. Never a target. */
250
+ export interface PublicStatusPage {
251
+ title: string;
252
+ description: string | null;
253
+ notice: string | null;
254
+ /** `operational` when every monitor is up, `degraded` when some are down, `down` when all are. */
255
+ overall: 'operational' | 'degraded' | 'down' | 'unknown';
256
+ monitors: Array<{
257
+ name: string;
258
+ status: 'up' | 'down' | 'unknown';
259
+ uptime90d: number | null;
260
+ avgResponseMs: number | null;
261
+ days: PublicStatusDay[];
262
+ }>;
263
+ generatedAt: string;
264
+ }
265
+
266
+ /** The overall state of a status page from its monitors' states. */
267
+ export function overallStatus(states: Array<'up' | 'down' | 'unknown'>): PublicStatusPage['overall'] {
268
+ const known = states.filter((s) => s !== 'unknown');
269
+ if (known.length === 0) return 'unknown';
270
+ const down = known.filter((s) => s === 'down').length;
271
+ if (down === 0) return 'operational';
272
+ return down === known.length ? 'down' : 'degraded';
273
+ }