@observeone/cli 1.21.0 → 1.22.0
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/commands/alert-channel.d.ts.map +1 -1
- package/dist/commands/alert-channel.js +12 -73
- package/dist/commands/alert-channel.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +12 -109
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/heartbeat.d.ts.map +1 -1
- package/dist/commands/heartbeat.js +3 -64
- package/dist/commands/heartbeat.js.map +1 -1
- package/dist/commands/incident.d.ts.map +1 -1
- package/dist/commands/incident.js +3 -71
- package/dist/commands/incident.js.map +1 -1
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +7 -80
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/resource-command.factory.d.ts.map +1 -1
- package/dist/commands/resource-command.factory.js +14 -0
- package/dist/commands/resource-command.factory.js.map +1 -1
- package/dist/commands/status-page.d.ts.map +1 -1
- package/dist/commands/status-page.js +3 -79
- package/dist/commands/status-page.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/utils/schema-prompts.d.ts +36 -0
- package/dist/utils/schema-prompts.d.ts.map +1 -0
- package/dist/utils/schema-prompts.js +175 -0
- package/dist/utils/schema-prompts.js.map +1 -0
- package/dist/utils/schemas.d.ts +41 -0
- package/dist/utils/schemas.d.ts.map +1 -1
- package/dist/utils/schemas.js +237 -0
- package/dist/utils/schemas.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/schemas.d.ts
CHANGED
|
@@ -1,7 +1,48 @@
|
|
|
1
|
+
export type InquirerType = 'input' | 'list' | 'number' | 'confirm';
|
|
2
|
+
export interface FieldSchema {
|
|
3
|
+
/** CLI option key (camelCase). If omitted, no CLI flag is bound to this field. */
|
|
4
|
+
flagName?: string;
|
|
5
|
+
/** Inquirer prompt type for interactive fallback. */
|
|
6
|
+
inquirerType?: InquirerType;
|
|
7
|
+
/** Prompt message (with trailing colon, e.g. "Monitor name:"). */
|
|
8
|
+
label?: string;
|
|
9
|
+
/** Force an interactive prompt on create when the flag is missing. */
|
|
10
|
+
requiredOnCreate?: boolean;
|
|
11
|
+
/** Whether the field appears in update payloads. Default true. */
|
|
12
|
+
updatable?: boolean;
|
|
13
|
+
/** Default value emitted on create when option and prompt are both absent. */
|
|
14
|
+
default?: unknown;
|
|
15
|
+
/** Inquirer choices for list-type fields. */
|
|
16
|
+
choices?: readonly string[];
|
|
17
|
+
/** Synchronous validator (returns true or an error message). */
|
|
18
|
+
validate?: (val: unknown) => boolean | string;
|
|
19
|
+
/** Transform a CLI string or inquirer answer before merging into the payload. */
|
|
20
|
+
transformer?: (val: unknown) => unknown;
|
|
21
|
+
/**
|
|
22
|
+
* Treat an empty array value as if the flag wasn't passed at all.
|
|
23
|
+
*
|
|
24
|
+
* Needed for fields backed by commander's repeatable-option collector
|
|
25
|
+
* (`.option('-a, --foo <v>', 'desc', collectOptionValues, [])`) where the
|
|
26
|
+
* empty `[]` default is indistinguishable from the user explicitly clearing
|
|
27
|
+
* the field. With this opt-in, an empty array falls through to `existing`
|
|
28
|
+
* on update (rather than wiping the existing value).
|
|
29
|
+
*/
|
|
30
|
+
treatEmptyArrayAsAbsent?: boolean;
|
|
31
|
+
}
|
|
1
32
|
export interface ResourceSchema {
|
|
2
33
|
description: string;
|
|
3
34
|
required: string[];
|
|
4
35
|
template: Record<string, unknown>;
|
|
36
|
+
/** Per-field metadata that drives the schema-driven prompt fallback in the resource-command factory. */
|
|
37
|
+
fieldMetadata?: Record<string, FieldSchema>;
|
|
38
|
+
/**
|
|
39
|
+
* Extra CLI flag names (camelCase) that count toward the "any updatable
|
|
40
|
+
* field was passed" check on update, but don't appear in the payload
|
|
41
|
+
* directly. Use for inputs that flow into a custom composer (e.g.
|
|
42
|
+
* alert-channel's --email / --webhook-url which feed buildConfigFromOptions
|
|
43
|
+
* to produce a single `config` field).
|
|
44
|
+
*/
|
|
45
|
+
extraUpdateTriggers?: readonly string[];
|
|
5
46
|
}
|
|
6
47
|
export declare const schemas: Record<string, ResourceSchema>;
|
|
7
48
|
export declare function resolveSchema(resource: string): ResourceSchema | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,MAAM,CAAC;IAC9C,iFAAiF;IACjF,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;IACxC;;;;;;;;OAQG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,wGAAwG;IACxG,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC5C;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAyCD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAsSlD,CAAC;AAQF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAG1E;AAED,eAAO,MAAM,aAAa,UAAuB,CAAC;AA8BlD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAarF"}
|
package/dist/utils/schemas.js
CHANGED
|
@@ -1,3 +1,32 @@
|
|
|
1
|
+
import { parseKeyValuePairs, parseNumericIds } from './cli-input.js';
|
|
2
|
+
const trimNonEmpty = (label) => (val) => typeof val === 'string' && val.trim().length > 0 ? true : `${label} is required`;
|
|
3
|
+
const validateUrl = (val) => {
|
|
4
|
+
if (typeof val !== 'string')
|
|
5
|
+
return 'Please enter a valid URL (e.g. https://example.com)';
|
|
6
|
+
try {
|
|
7
|
+
new URL(val);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return 'Please enter a valid URL (e.g. https://example.com)';
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const validateMinLength = (label, min) => (val) => typeof val === 'string' && val.trim().length >= min ? true : `${label} is required`;
|
|
15
|
+
/** Coerce CLI strings to integers; leave inquirer numbers untouched. */
|
|
16
|
+
const toInt = (val) => (typeof val === 'string' ? parseInt(val, 10) : val);
|
|
17
|
+
const toUpper = (val) => (typeof val === 'string' ? val.toUpperCase() : val);
|
|
18
|
+
const negateBool = (val) => !val;
|
|
19
|
+
const HTTP_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'];
|
|
20
|
+
const INCIDENT_PRIORITIES = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW'];
|
|
21
|
+
const ALERT_CHANNEL_TYPES = [
|
|
22
|
+
'email',
|
|
23
|
+
'slack',
|
|
24
|
+
'discord',
|
|
25
|
+
'teams',
|
|
26
|
+
'telegram',
|
|
27
|
+
'sms',
|
|
28
|
+
'webhook',
|
|
29
|
+
];
|
|
1
30
|
export const schemas = {
|
|
2
31
|
monitor: {
|
|
3
32
|
description: 'URL monitor — pings an HTTP endpoint on a cron schedule',
|
|
@@ -11,6 +40,39 @@ export const schemas = {
|
|
|
11
40
|
description: '',
|
|
12
41
|
channel_ids: [],
|
|
13
42
|
},
|
|
43
|
+
fieldMetadata: {
|
|
44
|
+
name: {
|
|
45
|
+
flagName: 'name',
|
|
46
|
+
inquirerType: 'input',
|
|
47
|
+
label: 'Monitor name:',
|
|
48
|
+
requiredOnCreate: true,
|
|
49
|
+
validate: trimNonEmpty('Name'),
|
|
50
|
+
},
|
|
51
|
+
url: {
|
|
52
|
+
flagName: 'url',
|
|
53
|
+
inquirerType: 'input',
|
|
54
|
+
label: 'URL to monitor:',
|
|
55
|
+
requiredOnCreate: true,
|
|
56
|
+
validate: validateUrl,
|
|
57
|
+
},
|
|
58
|
+
interval: {
|
|
59
|
+
flagName: 'interval',
|
|
60
|
+
inquirerType: 'input',
|
|
61
|
+
label: 'Cron interval (default: Every 5 mins):',
|
|
62
|
+
default: '*/5 * * * *',
|
|
63
|
+
},
|
|
64
|
+
description: { flagName: 'description', default: '' },
|
|
65
|
+
// `--no-alerts` flag → options.alerts === false on commander; absence
|
|
66
|
+
// is undefined, so the default fires and alert_on_failure stays true.
|
|
67
|
+
alert_on_failure: { flagName: 'alerts', default: true },
|
|
68
|
+
timeout_ms: { default: 30000 },
|
|
69
|
+
channel_ids: {
|
|
70
|
+
flagName: 'alertChannelId',
|
|
71
|
+
default: [],
|
|
72
|
+
treatEmptyArrayAsAbsent: true,
|
|
73
|
+
transformer: (v) => parseNumericIds(v, 'alert-channel-id') ?? [],
|
|
74
|
+
},
|
|
75
|
+
},
|
|
14
76
|
},
|
|
15
77
|
check: {
|
|
16
78
|
description: 'API check — HTTP request with method/headers/body/assertions',
|
|
@@ -28,6 +90,52 @@ export const schemas = {
|
|
|
28
90
|
description: '',
|
|
29
91
|
channel_ids: [],
|
|
30
92
|
},
|
|
93
|
+
fieldMetadata: {
|
|
94
|
+
name: {
|
|
95
|
+
flagName: 'name',
|
|
96
|
+
inquirerType: 'input',
|
|
97
|
+
label: 'Check name:',
|
|
98
|
+
requiredOnCreate: true,
|
|
99
|
+
validate: trimNonEmpty('Name'),
|
|
100
|
+
},
|
|
101
|
+
url: {
|
|
102
|
+
flagName: 'url',
|
|
103
|
+
inquirerType: 'input',
|
|
104
|
+
label: 'API URL:',
|
|
105
|
+
requiredOnCreate: true,
|
|
106
|
+
validate: trimNonEmpty('URL'),
|
|
107
|
+
},
|
|
108
|
+
method: {
|
|
109
|
+
flagName: 'method',
|
|
110
|
+
inquirerType: 'list',
|
|
111
|
+
label: 'HTTP Method:',
|
|
112
|
+
// Not requiredOnCreate — mirrors old behavior where method silently
|
|
113
|
+
// defaults to GET when the flag is missing. Still gets prompted as
|
|
114
|
+
// part of the batch when name or url are missing.
|
|
115
|
+
choices: HTTP_METHODS,
|
|
116
|
+
default: 'GET',
|
|
117
|
+
transformer: toUpper,
|
|
118
|
+
},
|
|
119
|
+
description: { flagName: 'description', default: '' },
|
|
120
|
+
body: { flagName: 'body' },
|
|
121
|
+
cron_expression: { flagName: 'interval' },
|
|
122
|
+
headers: {
|
|
123
|
+
flagName: 'header',
|
|
124
|
+
treatEmptyArrayAsAbsent: true,
|
|
125
|
+
transformer: (v) => parseKeyValuePairs(v, 'header'),
|
|
126
|
+
},
|
|
127
|
+
regions: { flagName: 'regions', treatEmptyArrayAsAbsent: true },
|
|
128
|
+
retry_count: { flagName: 'retryCount', transformer: toInt },
|
|
129
|
+
retry_interval: { flagName: 'retryInterval', transformer: toInt },
|
|
130
|
+
channel_ids: {
|
|
131
|
+
flagName: 'alertChannelId',
|
|
132
|
+
default: [],
|
|
133
|
+
treatEmptyArrayAsAbsent: true,
|
|
134
|
+
transformer: (v) => parseNumericIds(v, 'alert-channel-id') ?? [],
|
|
135
|
+
},
|
|
136
|
+
alert_on_failure: { flagName: 'alerts', default: true },
|
|
137
|
+
timeout_ms: { default: 30000 },
|
|
138
|
+
},
|
|
31
139
|
},
|
|
32
140
|
heartbeat: {
|
|
33
141
|
description: 'Heartbeat — inbound ping receiver with grace period',
|
|
@@ -38,6 +146,30 @@ export const schemas = {
|
|
|
38
146
|
grace_period: 60,
|
|
39
147
|
description: '',
|
|
40
148
|
},
|
|
149
|
+
fieldMetadata: {
|
|
150
|
+
name: {
|
|
151
|
+
flagName: 'name',
|
|
152
|
+
inquirerType: 'input',
|
|
153
|
+
label: 'Heartbeat name:',
|
|
154
|
+
requiredOnCreate: true,
|
|
155
|
+
validate: trimNonEmpty('Name'),
|
|
156
|
+
},
|
|
157
|
+
period: {
|
|
158
|
+
flagName: 'period',
|
|
159
|
+
inquirerType: 'number',
|
|
160
|
+
label: 'Expected period (seconds):',
|
|
161
|
+
default: 300,
|
|
162
|
+
transformer: toInt,
|
|
163
|
+
},
|
|
164
|
+
grace_period: {
|
|
165
|
+
flagName: 'grace',
|
|
166
|
+
inquirerType: 'number',
|
|
167
|
+
label: 'Grace period (seconds):',
|
|
168
|
+
default: 60,
|
|
169
|
+
transformer: toInt,
|
|
170
|
+
},
|
|
171
|
+
description: { flagName: 'description', default: '' },
|
|
172
|
+
},
|
|
41
173
|
},
|
|
42
174
|
'alert-channel': {
|
|
43
175
|
description: 'Alert channel — delivery target for notifications (email, slack, webhook, etc.)',
|
|
@@ -49,6 +181,33 @@ export const schemas = {
|
|
|
49
181
|
email: 'alerts@example.com',
|
|
50
182
|
},
|
|
51
183
|
},
|
|
184
|
+
fieldMetadata: {
|
|
185
|
+
name: {
|
|
186
|
+
flagName: 'name',
|
|
187
|
+
inquirerType: 'input',
|
|
188
|
+
label: 'Channel name:',
|
|
189
|
+
requiredOnCreate: true,
|
|
190
|
+
validate: trimNonEmpty('Name'),
|
|
191
|
+
},
|
|
192
|
+
type: {
|
|
193
|
+
flagName: 'type',
|
|
194
|
+
inquirerType: 'list',
|
|
195
|
+
label: 'Channel type:',
|
|
196
|
+
requiredOnCreate: true,
|
|
197
|
+
choices: ALERT_CHANNEL_TYPES,
|
|
198
|
+
},
|
|
199
|
+
is_default: { flagName: 'default', default: false },
|
|
200
|
+
},
|
|
201
|
+
extraUpdateTriggers: [
|
|
202
|
+
'email',
|
|
203
|
+
'webhookUrl',
|
|
204
|
+
'botToken',
|
|
205
|
+
'chatId',
|
|
206
|
+
'accountSid',
|
|
207
|
+
'authToken',
|
|
208
|
+
'fromNumber',
|
|
209
|
+
'phoneNumber',
|
|
210
|
+
],
|
|
52
211
|
},
|
|
53
212
|
'status-page': {
|
|
54
213
|
description: 'Public status page — aggregates resource statuses and incident history',
|
|
@@ -61,6 +220,40 @@ export const schemas = {
|
|
|
61
220
|
show_incident_history: true,
|
|
62
221
|
show_uptime_percentage: true,
|
|
63
222
|
},
|
|
223
|
+
fieldMetadata: {
|
|
224
|
+
slug: {
|
|
225
|
+
flagName: 'slug',
|
|
226
|
+
inquirerType: 'input',
|
|
227
|
+
label: 'Status page slug:',
|
|
228
|
+
requiredOnCreate: true,
|
|
229
|
+
validate: trimNonEmpty('Slug'),
|
|
230
|
+
},
|
|
231
|
+
name: {
|
|
232
|
+
flagName: 'name',
|
|
233
|
+
inquirerType: 'input',
|
|
234
|
+
label: 'Status page name:',
|
|
235
|
+
requiredOnCreate: true,
|
|
236
|
+
validate: trimNonEmpty('Name'),
|
|
237
|
+
},
|
|
238
|
+
description: { flagName: 'description', default: '' },
|
|
239
|
+
logo_url: { flagName: 'logoUrl' },
|
|
240
|
+
theme_primary_color: { flagName: 'themePrimaryColor' },
|
|
241
|
+
theme_background_color: { flagName: 'themeBackgroundColor' },
|
|
242
|
+
// Inverted booleans: --private flag presence sets is_public=false.
|
|
243
|
+
// When the flag is absent on update we fall through to existing[field];
|
|
244
|
+
// on create the default (true) wins.
|
|
245
|
+
is_public: { flagName: 'private', transformer: negateBool, default: true },
|
|
246
|
+
show_incident_history: {
|
|
247
|
+
flagName: 'hideIncidentHistory',
|
|
248
|
+
transformer: negateBool,
|
|
249
|
+
default: true,
|
|
250
|
+
},
|
|
251
|
+
show_uptime_percentage: {
|
|
252
|
+
flagName: 'hideUptime',
|
|
253
|
+
transformer: negateBool,
|
|
254
|
+
default: true,
|
|
255
|
+
},
|
|
256
|
+
},
|
|
64
257
|
},
|
|
65
258
|
incident: {
|
|
66
259
|
description: 'Incident — human-authored status event visible on a status page',
|
|
@@ -71,6 +264,26 @@ export const schemas = {
|
|
|
71
264
|
status: 'OPEN',
|
|
72
265
|
description: '',
|
|
73
266
|
},
|
|
267
|
+
fieldMetadata: {
|
|
268
|
+
title: {
|
|
269
|
+
flagName: 'title',
|
|
270
|
+
inquirerType: 'input',
|
|
271
|
+
label: 'Incident title:',
|
|
272
|
+
requiredOnCreate: true,
|
|
273
|
+
validate: validateMinLength('Title', 3),
|
|
274
|
+
},
|
|
275
|
+
priority: {
|
|
276
|
+
flagName: 'priority',
|
|
277
|
+
inquirerType: 'list',
|
|
278
|
+
label: 'Priority:',
|
|
279
|
+
requiredOnCreate: true,
|
|
280
|
+
choices: INCIDENT_PRIORITIES,
|
|
281
|
+
transformer: toUpper,
|
|
282
|
+
},
|
|
283
|
+
description: { flagName: 'description', default: '' },
|
|
284
|
+
assigned_to: { flagName: 'assignedTo' },
|
|
285
|
+
team_id: { flagName: 'teamId', transformer: toInt },
|
|
286
|
+
},
|
|
74
287
|
},
|
|
75
288
|
'ai-check': {
|
|
76
289
|
description: 'AI browser check — prompt-driven Playwright run against a URL',
|
|
@@ -81,6 +294,30 @@ export const schemas = {
|
|
|
81
294
|
prompt: 'Verify the page loads and the main heading is visible',
|
|
82
295
|
description: '',
|
|
83
296
|
},
|
|
297
|
+
fieldMetadata: {
|
|
298
|
+
name: {
|
|
299
|
+
flagName: 'name',
|
|
300
|
+
inquirerType: 'input',
|
|
301
|
+
label: 'AI check name:',
|
|
302
|
+
requiredOnCreate: true,
|
|
303
|
+
validate: trimNonEmpty('Name'),
|
|
304
|
+
},
|
|
305
|
+
url: {
|
|
306
|
+
flagName: 'url',
|
|
307
|
+
inquirerType: 'input',
|
|
308
|
+
label: 'URL to test:',
|
|
309
|
+
requiredOnCreate: true,
|
|
310
|
+
validate: validateUrl,
|
|
311
|
+
},
|
|
312
|
+
prompt: {
|
|
313
|
+
flagName: 'prompt',
|
|
314
|
+
inquirerType: 'input',
|
|
315
|
+
label: 'AI prompt:',
|
|
316
|
+
requiredOnCreate: true,
|
|
317
|
+
validate: trimNonEmpty('Prompt'),
|
|
318
|
+
},
|
|
319
|
+
description: { flagName: 'description', default: '' },
|
|
320
|
+
},
|
|
84
321
|
},
|
|
85
322
|
};
|
|
86
323
|
const resourceAliases = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"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"}
|