@observeone/cli 1.12.0 → 1.13.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/README.md +50 -4
- package/dist/README.md +50 -4
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +19 -3
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +63 -5
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/heartbeat.d.ts.map +1 -1
- package/dist/commands/heartbeat.js +11 -1
- package/dist/commands/heartbeat.js.map +1 -1
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +28 -3
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/runs-command.d.ts +16 -0
- package/dist/commands/runs-command.d.ts.map +1 -0
- package/dist/commands/runs-command.js +95 -0
- package/dist/commands/runs-command.js.map +1 -0
- package/dist/interfaces/api-client.interface.d.ts +4 -1
- package/dist/interfaces/api-client.interface.d.ts.map +1 -1
- package/dist/package.json +1 -1
- package/dist/services/api-client.service.d.ts +4 -1
- package/dist/services/api-client.service.d.ts.map +1 -1
- package/dist/services/api-client.service.js +16 -0
- package/dist/services/api-client.service.js.map +1 -1
- package/dist/types/index.d.ts +19 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/apply-config.d.ts +9 -0
- package/dist/utils/apply-config.d.ts.map +1 -0
- package/dist/utils/apply-config.js +87 -0
- package/dist/utils/apply-config.js.map +1 -0
- package/dist/utils/cli-input.d.ts +5 -0
- package/dist/utils/cli-input.d.ts.map +1 -0
- package/dist/utils/cli-input.js +55 -0
- package/dist/utils/cli-input.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
const singularResourceKeys = {
|
|
2
|
+
monitor: 'monitors',
|
|
3
|
+
'url-monitor': 'monitors',
|
|
4
|
+
url_monitor: 'monitors',
|
|
5
|
+
check: 'api_checks',
|
|
6
|
+
'api-check': 'api_checks',
|
|
7
|
+
api_check: 'api_checks',
|
|
8
|
+
heartbeat: 'heartbeats',
|
|
9
|
+
'ai-check': 'ai_checks',
|
|
10
|
+
ai_check: 'ai_checks',
|
|
11
|
+
'browser-check': 'ai_checks',
|
|
12
|
+
browser_check: 'ai_checks',
|
|
13
|
+
};
|
|
14
|
+
const pluralResourceKeys = ['monitors', 'api_checks', 'heartbeats', 'ai_checks'];
|
|
15
|
+
export function normalizeApplyConfig(raw) {
|
|
16
|
+
if (!isRecord(raw)) {
|
|
17
|
+
throw new Error('Apply file must contain a JSON object.');
|
|
18
|
+
}
|
|
19
|
+
if (hasPluralConfig(raw)) {
|
|
20
|
+
return normalizePluralConfig(raw);
|
|
21
|
+
}
|
|
22
|
+
const wrappedEntry = getWrappedResource(raw);
|
|
23
|
+
if (wrappedEntry) {
|
|
24
|
+
return { [wrappedEntry.key]: [wrappedEntry.resource] };
|
|
25
|
+
}
|
|
26
|
+
const inferred = inferBareResource(raw);
|
|
27
|
+
if (inferred) {
|
|
28
|
+
return { [inferred.key]: [inferred.resource] };
|
|
29
|
+
}
|
|
30
|
+
throw new Error('Unsupported apply file shape. Use obs.json, {"monitor": {...}}, or a bare monitor/check/heartbeat object.');
|
|
31
|
+
}
|
|
32
|
+
function hasPluralConfig(value) {
|
|
33
|
+
return pluralResourceKeys.some((key) => key in value);
|
|
34
|
+
}
|
|
35
|
+
function normalizePluralConfig(value) {
|
|
36
|
+
const config = {};
|
|
37
|
+
for (const key of pluralResourceKeys) {
|
|
38
|
+
const entry = value[key];
|
|
39
|
+
if (entry === undefined)
|
|
40
|
+
continue;
|
|
41
|
+
if (!Array.isArray(entry)) {
|
|
42
|
+
throw new Error(`'${key}' must be an array in apply config files.`);
|
|
43
|
+
}
|
|
44
|
+
config[key] = entry;
|
|
45
|
+
}
|
|
46
|
+
return config;
|
|
47
|
+
}
|
|
48
|
+
function getWrappedResource(value) {
|
|
49
|
+
const entries = Object.entries(value).filter(([key]) => key !== 'type' && key !== 'resource');
|
|
50
|
+
if (entries.length !== 1)
|
|
51
|
+
return null;
|
|
52
|
+
const [resourceKey, resourceValue] = entries[0];
|
|
53
|
+
const normalizedKey = singularResourceKeys[resourceKey];
|
|
54
|
+
if (!normalizedKey || !isRecord(resourceValue))
|
|
55
|
+
return null;
|
|
56
|
+
return { key: normalizedKey, resource: resourceValue };
|
|
57
|
+
}
|
|
58
|
+
function inferBareResource(value) {
|
|
59
|
+
const resourceType = getDeclaredResourceType(value.type ?? value.resource);
|
|
60
|
+
const resource = stripMetadataKeys(value);
|
|
61
|
+
if (resourceType) {
|
|
62
|
+
return { key: resourceType, resource };
|
|
63
|
+
}
|
|
64
|
+
if ('prompt' in resource)
|
|
65
|
+
return { key: 'ai_checks', resource };
|
|
66
|
+
if ('period' in resource || 'grace_period' in resource || 'ping_key' in resource) {
|
|
67
|
+
return { key: 'heartbeats', resource };
|
|
68
|
+
}
|
|
69
|
+
if ('url' in resource && 'method' in resource)
|
|
70
|
+
return { key: 'api_checks', resource };
|
|
71
|
+
if ('url' in resource)
|
|
72
|
+
return { key: 'monitors', resource };
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
function getDeclaredResourceType(value) {
|
|
76
|
+
if (typeof value !== 'string')
|
|
77
|
+
return null;
|
|
78
|
+
return singularResourceKeys[value] || null;
|
|
79
|
+
}
|
|
80
|
+
function stripMetadataKeys(value) {
|
|
81
|
+
const { type: _type, resource: _resource, ...rest } = value;
|
|
82
|
+
return rest;
|
|
83
|
+
}
|
|
84
|
+
function isRecord(value) {
|
|
85
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=apply-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-config.js","sourceRoot":"","sources":["../../src/utils/apply-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function collectOptionValues(value: string, previous?: string[]): string[];
|
|
2
|
+
export declare function parseKeyValuePairs(input: string | string[] | undefined, label: string): Record<string, string> | undefined;
|
|
3
|
+
export declare function parseJsonArrayOption<T>(input: string | string[] | undefined, label: string): T[] | undefined;
|
|
4
|
+
export declare function parseNumericIds(input: string | string[] | undefined, label: string): number[] | undefined;
|
|
5
|
+
//# sourceMappingURL=cli-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-input.d.ts","sourceRoot":"","sources":["../../src/utils/cli-input.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAGpF;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EACpC,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAwBpC;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EACpC,KAAK,EAAE,MAAM,GACZ,CAAC,EAAE,GAAG,SAAS,CAYjB;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EACpC,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,GAAG,SAAS,CAYtB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export function collectOptionValues(value, previous = []) {
|
|
2
|
+
previous.push(value);
|
|
3
|
+
return previous;
|
|
4
|
+
}
|
|
5
|
+
export function parseKeyValuePairs(input, label) {
|
|
6
|
+
if (!input)
|
|
7
|
+
return undefined;
|
|
8
|
+
const values = Array.isArray(input) ? input : [input];
|
|
9
|
+
if (values.length === 0)
|
|
10
|
+
return undefined;
|
|
11
|
+
const result = {};
|
|
12
|
+
for (const entry of values) {
|
|
13
|
+
const idx = entry.indexOf('=');
|
|
14
|
+
if (idx <= 0) {
|
|
15
|
+
throw new Error(`Invalid --${label} format: "${entry}". Expected KEY=VALUE`);
|
|
16
|
+
}
|
|
17
|
+
const key = entry.slice(0, idx).trim();
|
|
18
|
+
const value = entry.slice(idx + 1).trim();
|
|
19
|
+
if (!key) {
|
|
20
|
+
throw new Error(`Invalid --${label} format: "${entry}". Key cannot be empty`);
|
|
21
|
+
}
|
|
22
|
+
result[key] = value;
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
export function parseJsonArrayOption(input, label) {
|
|
27
|
+
if (!input)
|
|
28
|
+
return undefined;
|
|
29
|
+
const values = Array.isArray(input) ? input : [input];
|
|
30
|
+
if (values.length === 0)
|
|
31
|
+
return undefined;
|
|
32
|
+
return values.map((entry) => {
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(entry);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
throw new Error(`Invalid --${label} JSON: "${entry}"`);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
export function parseNumericIds(input, label) {
|
|
42
|
+
if (!input)
|
|
43
|
+
return undefined;
|
|
44
|
+
const values = Array.isArray(input) ? input : [input];
|
|
45
|
+
if (values.length === 0)
|
|
46
|
+
return undefined;
|
|
47
|
+
return values.map((entry) => {
|
|
48
|
+
const parsed = Number(entry);
|
|
49
|
+
if (!Number.isInteger(parsed) || parsed <= 0) {
|
|
50
|
+
throw new Error(`Invalid --${label} value: "${entry}". Expected a positive integer`);
|
|
51
|
+
}
|
|
52
|
+
return parsed;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=cli-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-input.js","sourceRoot":"","sources":["../../src/utils/cli-input.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,WAAqB,EAAE;IACxE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAoC,EACpC,KAAa;IAEb,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,aAAa,KAAK,uBAAuB,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE1C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,aAAa,KAAK,wBAAwB,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAoC,EACpC,KAAa;IAEb,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,WAAW,KAAK,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAoC,EACpC,KAAa;IAEb,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,YAAY,KAAK,gCAAgC,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC"}
|