@observeone/cli 1.11.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 +78 -4
- package/dist/README.md +78 -4
- package/dist/commands/ai-check/index.d.ts.map +1 -1
- package/dist/commands/ai-check/index.js +1 -0
- package/dist/commands/ai-check/index.js.map +1 -1
- package/dist/commands/alert-channel.d.ts.map +1 -1
- package/dist/commands/alert-channel.js +30 -1
- package/dist/commands/alert-channel.js.map +1 -1
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +25 -92
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +101 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +2 -14
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/heartbeat.d.ts.map +1 -1
- package/dist/commands/heartbeat.js +12 -1
- package/dist/commands/heartbeat.js.map +1 -1
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +68 -6
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/resource-command.factory.d.ts +2 -0
- package/dist/commands/resource-command.factory.d.ts.map +1 -1
- package/dist/commands/resource-command.factory.js +15 -5
- package/dist/commands/resource-command.factory.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/commands/suite/formatters.js +2 -2
- package/dist/commands/suite/formatters.js.map +1 -1
- package/dist/commands/suite/index.d.ts.map +1 -1
- package/dist/commands/suite/index.js +6 -0
- package/dist/commands/suite/index.js.map +1 -1
- package/dist/commands/suite/pull.d.ts +6 -0
- package/dist/commands/suite/pull.d.ts.map +1 -0
- package/dist/commands/suite/pull.js +61 -0
- package/dist/commands/suite/pull.js.map +1 -0
- package/dist/commands/suite/push.d.ts +6 -0
- package/dist/commands/suite/push.d.ts.map +1 -0
- package/dist/commands/suite/push.js +92 -0
- package/dist/commands/suite/push.js.map +1 -0
- package/dist/commands/suite/update.d.ts +6 -0
- package/dist/commands/suite/update.d.ts.map +1 -0
- package/dist/commands/suite/update.js +48 -0
- package/dist/commands/suite/update.js.map +1 -0
- package/dist/interfaces/api-client.interface.d.ts +7 -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 +43 -1
- package/dist/services/api-client.service.d.ts.map +1 -1
- package/dist/services/api-client.service.js +119 -16
- package/dist/services/api-client.service.js.map +1 -1
- package/dist/services/output.service.d.ts.map +1 -1
- package/dist/services/output.service.js +23 -8
- package/dist/services/output.service.js.map +1 -1
- package/dist/types/index.d.ts +40 -2
- 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/dist/utils/list-query.d.ts +6 -0
- package/dist/utils/list-query.d.ts.map +1 -0
- package/dist/utils/list-query.js +32 -0
- package/dist/utils/list-query.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { IOutputService } from '../interfaces/output.interface.js';
|
|
3
|
+
import { HeartbeatPing, ResourceRun } from '../types/index.js';
|
|
4
|
+
interface RunsCommandOptions<T> {
|
|
5
|
+
title: string;
|
|
6
|
+
emptyMessage: string;
|
|
7
|
+
description: string;
|
|
8
|
+
fetchRuns: (id: number, limit: number) => Promise<T[]>;
|
|
9
|
+
formatRuns: (runs: T[]) => void;
|
|
10
|
+
outputService: IOutputService;
|
|
11
|
+
}
|
|
12
|
+
export declare function attachRunsCommand<T>(cmd: Command, options: RunsCommandOptions<T>): void;
|
|
13
|
+
export declare function printExecutionRuns(runs: ResourceRun[]): void;
|
|
14
|
+
export declare function printHeartbeatRuns(runs: HeartbeatPing[]): void;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=runs-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs-command.d.ts","sourceRoot":"","sources":["../../src/commands/runs-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG/D,UAAU,kBAAkB,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAChC,aAAa,EAAE,cAAc,CAAC;CAC/B;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,CAqCvF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAiB5D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAU9D"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { brand as c } from '../utils/theme.js';
|
|
3
|
+
export function attachRunsCommand(cmd, options) {
|
|
4
|
+
cmd
|
|
5
|
+
.command('runs <id>')
|
|
6
|
+
.description(options.description)
|
|
7
|
+
.option('-l, --limit <n>', 'Maximum runs to fetch', '20')
|
|
8
|
+
.action(async (id, commandOptions) => {
|
|
9
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
10
|
+
try {
|
|
11
|
+
const resourceId = parseNumericId(id, 'resource');
|
|
12
|
+
const limit = parsePositiveInteger(commandOptions.limit, 'limit');
|
|
13
|
+
const runs = await options.fetchRuns(resourceId, limit);
|
|
14
|
+
if (isJson) {
|
|
15
|
+
options.outputService.formatJsonOutput({ runs });
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (runs.length === 0) {
|
|
19
|
+
options.outputService.info(options.emptyMessage);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
console.log(chalk.bold(`\n${options.title}`));
|
|
23
|
+
console.log(c.muted('─'.repeat(80)));
|
|
24
|
+
options.formatRuns(runs);
|
|
25
|
+
console.log('');
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const message = error instanceof Error ? error.message : 'Failed to fetch runs';
|
|
29
|
+
if (isJson) {
|
|
30
|
+
options.outputService.error(message);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.error(chalk.red(`\n${message}\n`));
|
|
34
|
+
}
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
export function printExecutionRuns(runs) {
|
|
40
|
+
runs.forEach((run, index) => {
|
|
41
|
+
const status = formatStatus(run.status);
|
|
42
|
+
console.log(chalk.bold(`${index + 1}. #${run.id} [${status}]`));
|
|
43
|
+
if (run.region)
|
|
44
|
+
console.log(c.muted(` Region: ${run.region}`));
|
|
45
|
+
if (run.start_time)
|
|
46
|
+
console.log(c.muted(` Started: ${new Date(run.start_time).toLocaleString()}`));
|
|
47
|
+
if (run.end_time)
|
|
48
|
+
console.log(c.muted(` Ended: ${new Date(run.end_time).toLocaleString()}`));
|
|
49
|
+
if (run.response_status !== undefined && run.response_status !== null) {
|
|
50
|
+
console.log(c.muted(` HTTP: ${run.response_status}`));
|
|
51
|
+
}
|
|
52
|
+
if (run.response_time_ms !== undefined && run.response_time_ms !== null) {
|
|
53
|
+
console.log(c.muted(` Duration: ${run.response_time_ms}ms`));
|
|
54
|
+
}
|
|
55
|
+
if (run.error_message)
|
|
56
|
+
console.log(c.error(` Error: ${run.error_message}`));
|
|
57
|
+
console.log('');
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export function printHeartbeatRuns(runs) {
|
|
61
|
+
runs.forEach((run, index) => {
|
|
62
|
+
const status = run.is_late ? c.warning('LATE') : c.success('ON_TIME');
|
|
63
|
+
console.log(chalk.bold(`${index + 1}. #${run.id} [${status}]`));
|
|
64
|
+
console.log(c.muted(` Pinged: ${new Date(run.pinged_at).toLocaleString()}`));
|
|
65
|
+
if (run.duration !== undefined && run.duration !== null) {
|
|
66
|
+
console.log(c.muted(` Duration: ${run.duration}ms`));
|
|
67
|
+
}
|
|
68
|
+
console.log('');
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function parseNumericId(value, label) {
|
|
72
|
+
const parsed = parseInt(value, 10);
|
|
73
|
+
if (Number.isNaN(parsed)) {
|
|
74
|
+
throw new Error(`Invalid ${label} ID`);
|
|
75
|
+
}
|
|
76
|
+
return parsed;
|
|
77
|
+
}
|
|
78
|
+
function parsePositiveInteger(value, label) {
|
|
79
|
+
const parsed = parseInt(value || '20', 10);
|
|
80
|
+
if (Number.isNaN(parsed) || parsed < 1) {
|
|
81
|
+
throw new Error(`${label} must be a positive integer`);
|
|
82
|
+
}
|
|
83
|
+
return parsed;
|
|
84
|
+
}
|
|
85
|
+
function formatStatus(status) {
|
|
86
|
+
const normalized = status.toUpperCase();
|
|
87
|
+
if (normalized === 'SUCCESS' || normalized === 'UP')
|
|
88
|
+
return c.success(normalized);
|
|
89
|
+
if (normalized === 'FAILED' || normalized === 'DOWN')
|
|
90
|
+
return c.error(normalized);
|
|
91
|
+
if (normalized === 'PENDING' || normalized === 'RUNNING')
|
|
92
|
+
return c.warning(normalized);
|
|
93
|
+
return c.accent(normalized);
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=runs-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs-command.js","sourceRoot":"","sources":["../../src/commands/runs-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,13 +52,13 @@ export function printSuiteDetail(suite) {
|
|
|
52
52
|
console.log(` ID: ${suite.id}`);
|
|
53
53
|
console.log(` Tests: ${suite.test_count} / ${suite.max_tests} max`);
|
|
54
54
|
console.log(` Schedule: ${formatCron(suite.cron_expression, suite.schedule_active)}`);
|
|
55
|
-
if (suite.secret_keys
|
|
55
|
+
if (suite.secret_keys?.length > 0) {
|
|
56
56
|
console.log(` Variables: ${suite.secret_keys.map((k) => chalk.yellow(k)).join(', ')}`);
|
|
57
57
|
}
|
|
58
58
|
if (suite.error_message) {
|
|
59
59
|
console.log(` Error: ${chalk.red(suite.error_message)}`);
|
|
60
60
|
}
|
|
61
|
-
if (suite.generated_tests
|
|
61
|
+
if (suite.generated_tests?.length > 0) {
|
|
62
62
|
console.log(chalk.bold('\n Generated tests:'));
|
|
63
63
|
suite.generated_tests.forEach((t, i) => {
|
|
64
64
|
console.log(chalk.gray(` ${i + 1}. ${t.name} (id: ${t.id})`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../src/commands/suite/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,KAAK,SAAS,CAAC;QACf,KAAK,YAAY;YACf,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B;YACE,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,MAAe;IACtD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,QAAQ,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CACT,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CACtJ,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,eAAe,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,UAAU,MAAM,KAAK,CAAC,SAAS,MAAM,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACvF,IAAI,KAAK,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../src/commands/suite/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AActE,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAiBT"}
|
|
@@ -8,8 +8,12 @@ import { createSuiteWaitCommand } from './wait.js';
|
|
|
8
8
|
import { createSuiteDeleteCommand } from './delete.js';
|
|
9
9
|
import { createSuiteScheduleCommand } from './schedule.js';
|
|
10
10
|
import { createSuiteSecretsCommand } from './secrets.js';
|
|
11
|
+
import { createSuiteUpdateCommand } from './update.js';
|
|
12
|
+
import { createSuitePullCommand } from './pull.js';
|
|
13
|
+
import { createSuitePushCommand } from './push.js';
|
|
11
14
|
export function createSuiteCommand(configService, apiClient, outputService) {
|
|
12
15
|
const suite = new Command('suite').description('Manage Playwright Autopilot suites');
|
|
16
|
+
suite.addCommand(createSuiteUpdateCommand(configService, apiClient, outputService));
|
|
13
17
|
suite.addCommand(createSuiteListCommand(configService, apiClient, outputService));
|
|
14
18
|
suite.addCommand(createSuiteGetCommand(configService, apiClient, outputService));
|
|
15
19
|
suite.addCommand(createSuiteGenerateCommand(configService, apiClient, outputService));
|
|
@@ -19,6 +23,8 @@ export function createSuiteCommand(configService, apiClient, outputService) {
|
|
|
19
23
|
suite.addCommand(createSuiteDeleteCommand(configService, apiClient, outputService));
|
|
20
24
|
suite.addCommand(createSuiteScheduleCommand(configService, apiClient, outputService));
|
|
21
25
|
suite.addCommand(createSuiteSecretsCommand(configService, apiClient, outputService));
|
|
26
|
+
suite.addCommand(createSuitePullCommand(configService, apiClient, outputService));
|
|
27
|
+
suite.addCommand(createSuitePushCommand(configService, apiClient, outputService));
|
|
22
28
|
return suite;
|
|
23
29
|
}
|
|
24
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/suite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/suite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,UAAU,kBAAkB,CAChC,aAA6B,EAC7B,SAAoB,EACpB,aAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErF,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACpF,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACtF,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IACrF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAClF,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAElF,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { ApiClient } from '../../services/api-client.service.js';
|
|
3
|
+
import { IConfigService } from '../../interfaces/config.interface.js';
|
|
4
|
+
import { IOutputService } from '../../interfaces/output.interface.js';
|
|
5
|
+
export declare function createSuitePullCommand(_configService: IConfigService, apiClient: ApiClient, _outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAStE,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,GAC7B,OAAO,CA2DT"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
function slugify(name) {
|
|
6
|
+
return name
|
|
7
|
+
.toLowerCase()
|
|
8
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
9
|
+
.replace(/^-|-$/g, '');
|
|
10
|
+
}
|
|
11
|
+
export function createSuitePullCommand(_configService, apiClient, _outputService) {
|
|
12
|
+
return new Command('pull')
|
|
13
|
+
.description('Download a suite and its generated test scripts to disk')
|
|
14
|
+
.argument('<id>', 'Suite ID')
|
|
15
|
+
.option('--out <dir>', 'Base output directory', './suites')
|
|
16
|
+
.action(async (id, options) => {
|
|
17
|
+
try {
|
|
18
|
+
const [suite, scripts] = await Promise.all([
|
|
19
|
+
apiClient.getSuite(id),
|
|
20
|
+
apiClient.getSuiteScripts(id),
|
|
21
|
+
]);
|
|
22
|
+
const folderName = `${slugify(suite.suite_name)}-${suite.id}`;
|
|
23
|
+
const folderPath = path.resolve(options.out, folderName);
|
|
24
|
+
fs.mkdirSync(folderPath, { recursive: true });
|
|
25
|
+
// Write PLAN.md
|
|
26
|
+
if (suite.plan_markdown) {
|
|
27
|
+
fs.writeFileSync(path.join(folderPath, 'PLAN.md'), suite.plan_markdown, 'utf8');
|
|
28
|
+
}
|
|
29
|
+
// Build test manifest
|
|
30
|
+
const testManifest = [];
|
|
31
|
+
for (const t of scripts.tests) {
|
|
32
|
+
const fileName = `${slugify(t.name)}.spec.ts`;
|
|
33
|
+
fs.writeFileSync(path.join(folderPath, fileName), t.code, 'utf8');
|
|
34
|
+
testManifest.push({ id: t.id, name: t.name, file: fileName });
|
|
35
|
+
}
|
|
36
|
+
// Write suite.json
|
|
37
|
+
const suiteJson = {
|
|
38
|
+
id: suite.id,
|
|
39
|
+
name: suite.suite_name,
|
|
40
|
+
target_url: suite.target_url,
|
|
41
|
+
cron_expression: suite.cron_expression ?? null,
|
|
42
|
+
schedule_active: suite.schedule_active,
|
|
43
|
+
pulled_at: new Date().toISOString(),
|
|
44
|
+
tests: testManifest,
|
|
45
|
+
};
|
|
46
|
+
fs.writeFileSync(path.join(folderPath, 'suite.json'), JSON.stringify(suiteJson, null, 2), 'utf8');
|
|
47
|
+
const parts = [];
|
|
48
|
+
if (suite.plan_markdown)
|
|
49
|
+
parts.push('PLAN.md');
|
|
50
|
+
parts.push(`${scripts.tests.length} test${scripts.tests.length !== 1 ? 's' : ''}`);
|
|
51
|
+
console.log(chalk.green('✔') +
|
|
52
|
+
` Pulled ${chalk.bold(`"${suite.suite_name}"`)} → ${chalk.cyan(path.relative(process.cwd(), folderPath) + '/')}`);
|
|
53
|
+
console.log(` ${parts.join(' ')}`);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
console.error(chalk.red(`❌ ${err.message || 'Failed to pull suite'}`));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/suite/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { ApiClient } from '../../services/api-client.service.js';
|
|
3
|
+
import { IConfigService } from '../../interfaces/config.interface.js';
|
|
4
|
+
import { IOutputService } from '../../interfaces/output.interface.js';
|
|
5
|
+
export declare function createSuitePushCommand(_configService: IConfigService, apiClient: ApiClient, _outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=push.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAetE,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAsFT"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
function slugify(name) {
|
|
6
|
+
return name
|
|
7
|
+
.toLowerCase()
|
|
8
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
9
|
+
.replace(/^-|-$/g, '');
|
|
10
|
+
}
|
|
11
|
+
export function createSuitePushCommand(_configService, apiClient, _outputService) {
|
|
12
|
+
return new Command('push')
|
|
13
|
+
.description('Push locally modified test scripts back to a suite')
|
|
14
|
+
.argument('<id>', 'Suite ID')
|
|
15
|
+
.option('--from <dir>', 'Base directory containing pulled suites', './suites')
|
|
16
|
+
.action(async (id, options) => {
|
|
17
|
+
try {
|
|
18
|
+
// Locate the suite folder — find by suite.json id field rather than parsing folder name
|
|
19
|
+
const baseDir = path.resolve(options.from);
|
|
20
|
+
if (!fs.existsSync(baseDir)) {
|
|
21
|
+
console.error(chalk.red(`❌ Directory not found: ${baseDir}`));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
// Search for a suite.json with matching id
|
|
25
|
+
const entries = fs.readdirSync(baseDir, { withFileTypes: true });
|
|
26
|
+
let suiteJson = null;
|
|
27
|
+
let folderPath = '';
|
|
28
|
+
for (const entry of entries) {
|
|
29
|
+
if (!entry.isDirectory())
|
|
30
|
+
continue;
|
|
31
|
+
const candidate = path.join(baseDir, entry.name, 'suite.json');
|
|
32
|
+
if (!fs.existsSync(candidate))
|
|
33
|
+
continue;
|
|
34
|
+
try {
|
|
35
|
+
const parsed = JSON.parse(fs.readFileSync(candidate, 'utf8'));
|
|
36
|
+
if (parsed.id === id) {
|
|
37
|
+
suiteJson = parsed;
|
|
38
|
+
folderPath = path.join(baseDir, entry.name);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// skip malformed suite.json
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Fallback: check the expected folder name directly
|
|
47
|
+
if (!suiteJson) {
|
|
48
|
+
// We don't have the suite name here, so attempt to fetch it to build the expected path
|
|
49
|
+
try {
|
|
50
|
+
const suite = await apiClient.getSuite(id);
|
|
51
|
+
const folderName = `${slugify(suite.suite_name)}-${suite.id}`;
|
|
52
|
+
const expectedPath = path.join(baseDir, folderName);
|
|
53
|
+
const jsonPath = path.join(expectedPath, 'suite.json');
|
|
54
|
+
if (fs.existsSync(jsonPath)) {
|
|
55
|
+
suiteJson = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
|
|
56
|
+
folderPath = expectedPath;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// ignore — will fail below
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!suiteJson || !folderPath) {
|
|
64
|
+
console.error(chalk.red(`❌ No pulled suite found for id ${id} in ${baseDir}`) +
|
|
65
|
+
`\n Run ${chalk.cyan(`obs suite pull ${id}`)} first.`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
const { tests, name: suiteName } = suiteJson;
|
|
69
|
+
let updated = 0;
|
|
70
|
+
let skipped = 0;
|
|
71
|
+
for (const t of tests) {
|
|
72
|
+
const filePath = path.join(folderPath, t.file);
|
|
73
|
+
if (!fs.existsSync(filePath)) {
|
|
74
|
+
console.warn(chalk.yellow(` ⚠ Skipping "${t.name}" — file not found: ${t.file}`));
|
|
75
|
+
skipped++;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const code = fs.readFileSync(filePath, 'utf8');
|
|
79
|
+
await apiClient.updateTestScript(t.id, code);
|
|
80
|
+
updated++;
|
|
81
|
+
}
|
|
82
|
+
console.log(chalk.green('✔') +
|
|
83
|
+
` Pushed ${chalk.bold(`"${suiteName}"`)} — ${updated} test${updated !== 1 ? 's' : ''} updated` +
|
|
84
|
+
(skipped > 0 ? chalk.yellow(` (${skipped} skipped)`) : ''));
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
console.error(chalk.red(`❌ ${err.message || 'Failed to push suite'}`));
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/commands/suite/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAWxB,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,cAA8B,EAC9B,SAAoB,EACpB,cAA8B;IAE9B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,oDAAoD,CAAC;SACjE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;SAC5B,MAAM,CAAC,cAAc,EAAE,yCAAyC,EAAE,UAAU,CAAC;SAC7E,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAyB,EAAE,EAAE;QACtD,IAAI,CAAC;YACH,wFAAwF;YACxF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,2CAA2C;YAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,IAAI,SAAS,GAAqB,IAAI,CAAC;YACvC,IAAI,UAAU,GAAG,EAAE,CAAC;YAEpB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBAAE,SAAS;gBACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAC/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;oBAAE,SAAS;gBACxC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAc,CAAC;oBAC3E,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;wBACrB,SAAS,GAAG,MAAM,CAAC;wBACnB,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC5C,MAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,4BAA4B;gBAC9B,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,uFAAuF;gBACvF,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAC3C,MAAM,UAAU,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;oBAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;oBACvD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC5B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAc,CAAC;wBACvE,UAAU,GAAG,YAAY,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,2BAA2B;gBAC7B,CAAC;YACH,CAAC;YAED,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,kCAAkC,EAAE,OAAO,OAAO,EAAE,CAAC;oBAC7D,WAAW,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,SAAS,CACzD,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;YAC7C,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACnF,OAAO,EAAE,CAAC;oBACV,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC/C,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC7C,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBACd,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,GAAG,CAAC,MAAM,OAAO,QAAQ,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU;gBAC9F,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC7D,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAM,GAAa,CAAC,OAAO,IAAI,sBAAsB,EAAE,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { ApiClient } from '../../services/api-client.service.js';
|
|
3
|
+
import { IConfigService } from '../../interfaces/config.interface.js';
|
|
4
|
+
import { IOutputService } from '../../interfaces/output.interface.js';
|
|
5
|
+
export declare function createSuiteUpdateCommand(_configService: IConfigService, apiClient: ApiClient, outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAGtE,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA0CT"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { printSuiteDetail } from './formatters.js';
|
|
4
|
+
export function createSuiteUpdateCommand(_configService, apiClient, outputService) {
|
|
5
|
+
return new Command('update')
|
|
6
|
+
.description('Update suite name or target URL')
|
|
7
|
+
.argument('<id>', 'Suite ID')
|
|
8
|
+
.option('--name <name>', 'New suite name')
|
|
9
|
+
.option('--url <url>', 'New target URL')
|
|
10
|
+
.action(async (id, options) => {
|
|
11
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
12
|
+
try {
|
|
13
|
+
if (!options.name && !options.url) {
|
|
14
|
+
const msg = 'At least one of --name or --url is required';
|
|
15
|
+
if (isJson) {
|
|
16
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
console.error(chalk.red(`❌ ${msg}`));
|
|
20
|
+
}
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
const payload = {};
|
|
24
|
+
if (options.name)
|
|
25
|
+
payload.suite_name = options.name;
|
|
26
|
+
if (options.url)
|
|
27
|
+
payload.target_url = options.url;
|
|
28
|
+
const suite = await apiClient.updateSuite(id, payload);
|
|
29
|
+
if (isJson) {
|
|
30
|
+
outputService.formatJsonOutput({ suite });
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
console.log(chalk.bold('\n Suite updated'));
|
|
34
|
+
printSuiteDetail(suite);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
const msg = err.message || 'Failed to update suite';
|
|
38
|
+
if (isJson) {
|
|
39
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.error(chalk.red(`❌ ${msg}`));
|
|
43
|
+
}
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/suite/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,UAAU,wBAAwB,CACtC,cAA8B,EAC9B,SAAoB,EACpB,aAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;SAC5B,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACzC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAwC,EAAE,EAAE;QACrE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,6CAA6C,CAAC;gBAC1D,IAAI,MAAM,EAAE,CAAC;oBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;gBACvC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,OAAO,GAAiD,EAAE,CAAC;YACjE,IAAI,OAAO,CAAC,IAAI;gBAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YACpD,IAAI,OAAO,CAAC,GAAG;gBAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;YAElD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAEvD,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC5C,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,wBAAwB,CAAC;YAC/D,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Test, TestExecution, TestResult, UrlMonitor, ApiCheck, Heartbeat, AlertChannel, StatusPage, Incident } from '../types/index.js';
|
|
1
|
+
import { Test, TestExecution, TestResult, UrlMonitor, ApiCheck, Heartbeat, ResourceRun, HeartbeatPing, ListQueryOptions, PaginatedListResult, AlertChannel, StatusPage, Incident } from '../types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* API Client interface
|
|
4
4
|
* Abstracts HTTP communication with ObserveOne backend
|
|
@@ -41,23 +41,29 @@ export interface IApiClient {
|
|
|
41
41
|
message?: string;
|
|
42
42
|
}>;
|
|
43
43
|
getUrlMonitors(): Promise<UrlMonitor[]>;
|
|
44
|
+
listUrlMonitors(query?: ListQueryOptions): Promise<PaginatedListResult<UrlMonitor>>;
|
|
44
45
|
getUrlMonitor(id: number): Promise<UrlMonitor>;
|
|
45
46
|
createUrlMonitor(data: Partial<UrlMonitor>): Promise<UrlMonitor>;
|
|
46
47
|
updateUrlMonitor(id: number, data: Partial<UrlMonitor>): Promise<UrlMonitor>;
|
|
47
48
|
deleteUrlMonitor(id: number): Promise<void>;
|
|
48
49
|
toggleUrlMonitor(id: number): Promise<boolean>;
|
|
50
|
+
getUrlMonitorRuns(id: number, limit?: number): Promise<ResourceRun[]>;
|
|
49
51
|
getApiChecks(): Promise<ApiCheck[]>;
|
|
52
|
+
listApiChecks(query?: ListQueryOptions): Promise<PaginatedListResult<ApiCheck>>;
|
|
50
53
|
getApiCheck(id: number): Promise<ApiCheck>;
|
|
51
54
|
createApiCheck(data: Partial<ApiCheck>): Promise<ApiCheck>;
|
|
52
55
|
updateApiCheck(id: number, data: Partial<ApiCheck>): Promise<ApiCheck>;
|
|
53
56
|
deleteApiCheck(id: number): Promise<void>;
|
|
54
57
|
toggleApiCheck(id: number): Promise<boolean>;
|
|
58
|
+
getApiCheckRuns(id: number, limit?: number): Promise<ResourceRun[]>;
|
|
55
59
|
getHeartbeats(): Promise<Heartbeat[]>;
|
|
60
|
+
listHeartbeats(query?: ListQueryOptions): Promise<PaginatedListResult<Heartbeat>>;
|
|
56
61
|
getHeartbeat(id: number): Promise<Heartbeat>;
|
|
57
62
|
createHeartbeat(data: Partial<Heartbeat>): Promise<Heartbeat>;
|
|
58
63
|
updateHeartbeat(id: number, data: Partial<Heartbeat>): Promise<Heartbeat>;
|
|
59
64
|
deleteHeartbeat(id: number): Promise<void>;
|
|
60
65
|
toggleHeartbeat(id: number): Promise<boolean>;
|
|
66
|
+
getHeartbeatRuns(id: number, limit?: number): Promise<HeartbeatPing[]>;
|
|
61
67
|
getAlertChannels(): Promise<AlertChannel[]>;
|
|
62
68
|
getAlertChannel(id: number): Promise<AlertChannel>;
|
|
63
69
|
createAlertChannel(data: Partial<AlertChannel>): Promise<AlertChannel>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/api-client.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,UAAU,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"api-client.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/api-client.interface.ts"],"names":[],"mappings":"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"}
|