@observeone/cli 1.5.0 → 1.7.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 +36 -0
- package/dist/README.md +36 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +31 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/resource-command.factory.d.ts.map +1 -1
- package/dist/commands/resource-command.factory.js +22 -3
- package/dist/commands/resource-command.factory.js.map +1 -1
- package/dist/commands/suite/delete.d.ts +6 -0
- package/dist/commands/suite/delete.d.ts.map +1 -0
- package/dist/commands/suite/delete.js +31 -0
- package/dist/commands/suite/delete.js.map +1 -0
- package/dist/commands/suite/formatters.d.ts +7 -0
- package/dist/commands/suite/formatters.d.ts.map +1 -0
- package/dist/commands/suite/formatters.js +100 -0
- package/dist/commands/suite/formatters.js.map +1 -0
- package/dist/commands/suite/generate.d.ts +6 -0
- package/dist/commands/suite/generate.d.ts.map +1 -0
- package/dist/commands/suite/generate.js +98 -0
- package/dist/commands/suite/generate.js.map +1 -0
- package/dist/commands/suite/get.d.ts +6 -0
- package/dist/commands/suite/get.d.ts.map +1 -0
- package/dist/commands/suite/get.js +30 -0
- package/dist/commands/suite/get.js.map +1 -0
- package/dist/commands/suite/index.d.ts +6 -0
- package/dist/commands/suite/index.d.ts.map +1 -0
- package/dist/commands/suite/index.js +20 -0
- package/dist/commands/suite/index.js.map +1 -0
- package/dist/commands/suite/list.d.ts +6 -0
- package/dist/commands/suite/list.d.ts.map +1 -0
- package/dist/commands/suite/list.js +29 -0
- package/dist/commands/suite/list.js.map +1 -0
- package/dist/commands/suite/run.d.ts +6 -0
- package/dist/commands/suite/run.d.ts.map +1 -0
- package/dist/commands/suite/run.js +57 -0
- package/dist/commands/suite/run.js.map +1 -0
- package/dist/commands/suite/status.d.ts +6 -0
- package/dist/commands/suite/status.d.ts.map +1 -0
- package/dist/commands/suite/status.js +52 -0
- package/dist/commands/suite/status.js.map +1 -0
- package/dist/commands/suite/vars.d.ts +4 -0
- package/dist/commands/suite/vars.d.ts.map +1 -0
- package/dist/commands/suite/vars.js +38 -0
- package/dist/commands/suite/vars.js.map +1 -0
- package/dist/commands/suite/wait.d.ts +6 -0
- package/dist/commands/suite/wait.d.ts.map +1 -0
- package/dist/commands/suite/wait.js +40 -0
- package/dist/commands/suite/wait.js.map +1 -0
- package/dist/commands/validate.d.ts +4 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +49 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/services/api-client.service.d.ts +20 -1
- package/dist/services/api-client.service.d.ts.map +1 -1
- package/dist/services/api-client.service.js +58 -0
- package/dist/services/api-client.service.js.map +1 -1
- package/dist/types/index.d.ts +49 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/schemas.d.ts +8 -0
- package/dist/utils/schemas.d.ts.map +1 -0
- package/dist/utils/schemas.js +87 -0
- package/dist/utils/schemas.js.map +1 -0
- package/package.json +18 -17
|
@@ -0,0 +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;AAEvD,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,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;IAEpF,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 createSuiteListCommand(_configService: IConfigService, apiClient: ApiClient, outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/list.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,sBAAsB,CACpC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAsBT"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { printSuiteList } from './formatters.js';
|
|
4
|
+
export function createSuiteListCommand(_configService, apiClient, outputService) {
|
|
5
|
+
return new Command('list')
|
|
6
|
+
.description('List all Playwright Autopilot suites')
|
|
7
|
+
.action(async () => {
|
|
8
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
9
|
+
try {
|
|
10
|
+
const suites = await apiClient.listSuites();
|
|
11
|
+
if (isJson) {
|
|
12
|
+
outputService.formatJsonOutput({ suites });
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
printSuiteList(suites);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
const msg = err.message || 'Failed to list suites';
|
|
19
|
+
if (isJson) {
|
|
20
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.error(chalk.red(`❌ ${msg}`));
|
|
24
|
+
}
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/suite/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,UAAU,sBAAsB,CACpC,cAA8B,EAC9B,SAAoB,EACpB,aAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;YAC5C,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3C,OAAO;YACT,CAAC;YACD,cAAc,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,uBAAuB,CAAC;YAC9D,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"}
|
|
@@ -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 createSuiteRunCommand(_configService: IConfigService, apiClient: ApiClient, outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,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,qBAAqB,CACnC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAsDT"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { printExecutionResults } from './formatters.js';
|
|
5
|
+
export function createSuiteRunCommand(_configService, apiClient, outputService) {
|
|
6
|
+
return new Command('run')
|
|
7
|
+
.description('Trigger a suite execution')
|
|
8
|
+
.argument('<id>', 'Suite ID')
|
|
9
|
+
.option('-w, --wait', 'Wait for the execution to complete')
|
|
10
|
+
.option('--tests <ids>', 'Comma-separated list of test IDs to run')
|
|
11
|
+
.action(async (id, options) => {
|
|
12
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
13
|
+
try {
|
|
14
|
+
const testIds = options.tests ? options.tests.split(',').map((s) => s.trim()) : undefined;
|
|
15
|
+
const { execution_id } = await apiClient.runSuite(id, testIds);
|
|
16
|
+
if (!options.wait) {
|
|
17
|
+
if (isJson) {
|
|
18
|
+
outputService.formatJsonOutput({ execution_id });
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.log(chalk.bold(`\n Suite run triggered`));
|
|
22
|
+
console.log(chalk.gray(` Execution ID: ${execution_id}`));
|
|
23
|
+
console.log(chalk.gray(` Wait: obs suite wait ${id} ${execution_id}\n`));
|
|
24
|
+
}
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!isJson) {
|
|
28
|
+
console.log(chalk.bold(`\n Running suite...`));
|
|
29
|
+
console.log(chalk.gray('─'.repeat(56)));
|
|
30
|
+
}
|
|
31
|
+
const spinner = ora({ text: 'Running...', stream: process.stdout }).start();
|
|
32
|
+
const started = Date.now();
|
|
33
|
+
const done = await apiClient.pollSuiteExecution(id, execution_id);
|
|
34
|
+
const elapsed = ((Date.now() - started) / 1000).toFixed(0);
|
|
35
|
+
spinner.stop();
|
|
36
|
+
if (isJson) {
|
|
37
|
+
outputService.formatJsonOutput({ execution: done });
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
printExecutionResults(done);
|
|
41
|
+
}
|
|
42
|
+
const allPassed = done.status === 'COMPLETED' && (done.failed ?? 0) === 0;
|
|
43
|
+
process.exit(allPassed ? 0 : 1);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
const msg = err.message || 'Failed to run suite';
|
|
47
|
+
if (isJson) {
|
|
48
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
52
|
+
}
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/suite/run.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 createSuiteStatusCommand(_configService: IConfigService, apiClient: ApiClient, outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/status.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,CA8CT"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { printExecutionResults } from './formatters.js';
|
|
4
|
+
export function createSuiteStatusCommand(_configService, apiClient, outputService) {
|
|
5
|
+
return new Command('status')
|
|
6
|
+
.description('Check the status of a suite execution (defaults to latest)')
|
|
7
|
+
.argument('<id>', 'Suite ID')
|
|
8
|
+
.argument('[executionId]', 'Execution ID (optional, defaults to latest)')
|
|
9
|
+
.action(async (id, executionId) => {
|
|
10
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
11
|
+
try {
|
|
12
|
+
let resolvedExecId;
|
|
13
|
+
if (executionId) {
|
|
14
|
+
resolvedExecId = executionId;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const executions = await apiClient.listSuiteExecutions(id);
|
|
18
|
+
const latest = executions[0];
|
|
19
|
+
if (!latest) {
|
|
20
|
+
const msg = 'No executions found for this suite. Run: obs suite run <id>';
|
|
21
|
+
if (isJson) {
|
|
22
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
console.log(chalk.gray(`\n ${msg}\n`));
|
|
26
|
+
}
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
resolvedExecId = latest.id;
|
|
30
|
+
}
|
|
31
|
+
const execution = await apiClient.getSuiteExecution(id, resolvedExecId);
|
|
32
|
+
if (isJson) {
|
|
33
|
+
outputService.formatJsonOutput({ execution });
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const lastRun = new Date(execution.created_at).toLocaleString();
|
|
37
|
+
console.log(chalk.gray(`\n Last run: ${lastRun}`));
|
|
38
|
+
printExecutionResults(execution);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
const msg = err.message || 'Failed to get suite status';
|
|
42
|
+
if (isJson) {
|
|
43
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.error(chalk.red(`❌ ${msg}`));
|
|
47
|
+
}
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/suite/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,UAAU,wBAAwB,CACtC,cAA8B,EAC9B,SAAoB,EACpB,aAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,4DAA4D,CAAC;SACzE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;SAC5B,QAAQ,CAAC,eAAe,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,WAAoB,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,IAAI,cAAsB,CAAC;YAC3B,IAAI,WAAW,EAAE,CAAC;gBAChB,cAAc,GAAG,WAAW,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,GAAG,6DAA6D,CAAC;oBAC1E,IAAI,MAAM,EAAE,CAAC;wBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC/E,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;oBACzC,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC;YAC7B,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;YAExE,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC,CAAC;YACnD,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,4BAA4B,CAAC;YACnE,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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function parseVarFlags(vars: string[]): Record<string, string>;
|
|
2
|
+
export declare function parseVarFile(filePath: string): Record<string, string>;
|
|
3
|
+
export declare function mergeVars(varFlags: string[], varFile?: string): Record<string, string> | undefined;
|
|
4
|
+
//# sourceMappingURL=vars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vars.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/vars.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAarE;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAKpC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
function normalizeKey(key) {
|
|
3
|
+
return key.trim().toUpperCase().replace(/\s+/g, '_');
|
|
4
|
+
}
|
|
5
|
+
export function parseVarFlags(vars) {
|
|
6
|
+
const result = {};
|
|
7
|
+
for (const v of vars) {
|
|
8
|
+
const idx = v.indexOf('=');
|
|
9
|
+
if (idx === -1)
|
|
10
|
+
throw new Error(`Invalid --var format: "${v}". Expected KEY=VALUE`);
|
|
11
|
+
result[normalizeKey(v.slice(0, idx))] = v.slice(idx + 1);
|
|
12
|
+
}
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
export function parseVarFile(filePath) {
|
|
16
|
+
const content = readFileSync(filePath, 'utf8');
|
|
17
|
+
const result = {};
|
|
18
|
+
for (const line of content.split('\n')) {
|
|
19
|
+
const trimmed = line.trim();
|
|
20
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
21
|
+
continue;
|
|
22
|
+
const idx = trimmed.indexOf('=');
|
|
23
|
+
if (idx === -1)
|
|
24
|
+
continue;
|
|
25
|
+
const key = normalizeKey(trimmed.slice(0, idx));
|
|
26
|
+
const value = trimmed.slice(idx + 1).replace(/^["']|["']$/g, '');
|
|
27
|
+
result[key] = value;
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
export function mergeVars(varFlags, varFile) {
|
|
32
|
+
const result = {};
|
|
33
|
+
if (varFile)
|
|
34
|
+
Object.assign(result, parseVarFile(varFile));
|
|
35
|
+
Object.assign(result, parseVarFlags(varFlags));
|
|
36
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=vars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vars.js","sourceRoot":"","sources":["../../../src/commands/suite/vars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QACpF,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,SAAS;QACzB,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,QAAkB,EAClB,OAAgB;IAEhB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,OAAO;QAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,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 createSuiteWaitCommand(_configService: IConfigService, apiClient: ApiClient, outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=wait.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/wait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,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,sBAAsB,CACpC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAmCT"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { printExecutionResults } from './formatters.js';
|
|
5
|
+
export function createSuiteWaitCommand(_configService, apiClient, outputService) {
|
|
6
|
+
return new Command('wait')
|
|
7
|
+
.description('Wait for a suite execution to complete (CI-friendly)')
|
|
8
|
+
.argument('<id>', 'Suite ID')
|
|
9
|
+
.argument('<executionId>', 'Execution ID')
|
|
10
|
+
.action(async (id, executionId) => {
|
|
11
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
12
|
+
try {
|
|
13
|
+
const spinner = ora({
|
|
14
|
+
text: 'Waiting for execution to complete...',
|
|
15
|
+
stream: process.stdout,
|
|
16
|
+
}).start();
|
|
17
|
+
const done = await apiClient.pollSuiteExecution(id, executionId);
|
|
18
|
+
spinner.stop();
|
|
19
|
+
if (isJson) {
|
|
20
|
+
outputService.formatJsonOutput({ execution: done });
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
printExecutionResults(done);
|
|
24
|
+
}
|
|
25
|
+
const allPassed = done.status === 'COMPLETED' && (done.failed ?? 0) === 0;
|
|
26
|
+
process.exit(allPassed ? 0 : 1);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
const msg = err.message || 'Failed to wait for suite execution';
|
|
30
|
+
if (isJson) {
|
|
31
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.error(chalk.red(`❌ ${msg}`));
|
|
35
|
+
}
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=wait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/commands/suite/wait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAItB,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,UAAU,sBAAsB,CACpC,cAA8B,EAC9B,SAAoB,EACpB,aAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,sDAAsD,CAAC;SACnE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;SAC5B,QAAQ,CAAC,eAAe,EAAE,cAAc,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,WAAmB,EAAE,EAAE;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC;gBAClB,IAAI,EAAE,sCAAsC;gBAC5C,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC,KAAK,EAAE,CAAC;YAEX,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAEjE,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,oCAAoC,CAAC;YAC3E,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,cAAc,GAAG,OAAO,CAkD5E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { readFileSync, existsSync } from 'fs';
|
|
3
|
+
import { resolveSchema, resourceNames } from '../utils/schemas.js';
|
|
4
|
+
export function createValidateCommand(outputService) {
|
|
5
|
+
return new Command('validate')
|
|
6
|
+
.description('Validate a resource JSON file against the expected schema')
|
|
7
|
+
.requiredOption('-r, --resource <type>', `Resource type (${resourceNames.join(', ')})`)
|
|
8
|
+
.requiredOption('-f, --file <path>', 'Path to JSON file to validate')
|
|
9
|
+
.option('-j, --json', 'Output in JSON format')
|
|
10
|
+
.action((options) => {
|
|
11
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true' || options.json === true;
|
|
12
|
+
if (isJson)
|
|
13
|
+
outputService.enableJsonMode();
|
|
14
|
+
const schema = resolveSchema(options.resource);
|
|
15
|
+
if (!schema) {
|
|
16
|
+
outputService.error(`Unknown resource type "${options.resource}". Valid types: ${resourceNames.join(', ')}`);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
if (!existsSync(options.file)) {
|
|
20
|
+
outputService.error(`File not found: ${options.file}`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
let data;
|
|
24
|
+
try {
|
|
25
|
+
data = JSON.parse(readFileSync(options.file, 'utf-8'));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
outputService.error(`Failed to parse ${options.file} as JSON.`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const missing = schema.required.filter((field) => data[field] === undefined || data[field] === '');
|
|
32
|
+
if (missing.length > 0) {
|
|
33
|
+
if (isJson) {
|
|
34
|
+
outputService.formatJsonOutput({ valid: false, missing_fields: missing });
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
outputService.error(`Validation failed — missing required fields: ${missing.join(', ')}`);
|
|
38
|
+
}
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
if (isJson) {
|
|
42
|
+
outputService.formatJsonOutput({ valid: true, resource: options.resource });
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
outputService.success(`${options.file} is valid for resource type "${options.resource}".`);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEnE,MAAM,UAAU,qBAAqB,CAAC,aAA6B;IACjE,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;SAC3B,WAAW,CAAC,2DAA2D,CAAC;SACxE,cAAc,CAAC,uBAAuB,EAAE,kBAAkB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SACtF,cAAc,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;SACpE,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC;SAC7C,MAAM,CAAC,CAAC,OAA2D,EAAE,EAAE;QACtE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;QAC/E,IAAI,MAAM;YAAE,aAAa,CAAC,cAAc,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,aAAa,CAAC,KAAK,CACjB,0BAA0B,OAAO,CAAC,QAAQ,mBAAmB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,aAAa,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,IAA6B,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAA4B,CAAC;QACpF,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CACpC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAC3D,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,KAAK,CAAC,gDAAgD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,gCAAgC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAoI9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { UpdateService } from './services/update.service.js';
|
|
|
16
16
|
import { createLoginCommand } from './commands/login.js';
|
|
17
17
|
import { createLogoutCommand } from './commands/logout.js';
|
|
18
18
|
import { createInitCommand } from './commands/init.js';
|
|
19
|
+
import { createValidateCommand } from './commands/validate.js';
|
|
19
20
|
import { createAiCheckCommand } from './commands/ai-check.js';
|
|
20
21
|
import { createMonitorCommand } from './commands/monitor.js';
|
|
21
22
|
import { createCheckCommand } from './commands/check.js';
|
|
@@ -25,6 +26,7 @@ import { createExportCommand } from './commands/export.js';
|
|
|
25
26
|
import { createAlertChannelCommand } from './commands/alert-channel.js';
|
|
26
27
|
import { createStatusPageCommand } from './commands/status-page.js';
|
|
27
28
|
import { createIncidentCommand } from './commands/incident.js';
|
|
29
|
+
import { createSuiteCommand } from './commands/suite/index.js';
|
|
28
30
|
const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
|
|
29
31
|
const { version } = packageJson;
|
|
30
32
|
// Create services directly
|
|
@@ -63,6 +65,8 @@ program.addCommand(createExportCommand(configService, apiClient, outputService))
|
|
|
63
65
|
program.addCommand(createAlertChannelCommand(configService, apiClient, outputService));
|
|
64
66
|
program.addCommand(createStatusPageCommand(configService, apiClient, outputService));
|
|
65
67
|
program.addCommand(createIncidentCommand(configService, apiClient, outputService));
|
|
68
|
+
program.addCommand(createValidateCommand(outputService));
|
|
69
|
+
program.addCommand(createSuiteCommand(configService, apiClient, outputService));
|
|
66
70
|
// Global options handler
|
|
67
71
|
program.hook('preAction', (thisCommand) => {
|
|
68
72
|
const options = thisCommand.opts();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IConfigService } from '../interfaces/config.interface.js';
|
|
2
2
|
import { IApiClient } from '../interfaces/api-client.interface.js';
|
|
3
|
-
import { Test, TestExecution, TestResult, UrlMonitor, ApiCheck, Heartbeat, AlertChannel, StatusPage, Incident } from '../types/index.js';
|
|
3
|
+
import { Test, TestExecution, TestResult, UrlMonitor, ApiCheck, Heartbeat, AlertChannel, StatusPage, Incident, Suite, SuiteExecution } from '../types/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* API Client implementation
|
|
6
6
|
* Handles HTTP communication with ObserveOne backend
|
|
@@ -85,6 +85,25 @@ export declare class ApiClient implements IApiClient {
|
|
|
85
85
|
environment: string;
|
|
86
86
|
}>;
|
|
87
87
|
pollExecutionStatus(executionId: number, maxAttempts?: number, intervalMs?: number): Promise<TestExecution>;
|
|
88
|
+
listSuites(): Promise<Suite[]>;
|
|
89
|
+
getSuite(id: string): Promise<Suite>;
|
|
90
|
+
generateSuite(payload: {
|
|
91
|
+
target_url: string;
|
|
92
|
+
suite_name: string;
|
|
93
|
+
cron_expression?: string;
|
|
94
|
+
schedule_active?: boolean;
|
|
95
|
+
max_tests?: number;
|
|
96
|
+
secrets?: Record<string, string>;
|
|
97
|
+
allow_form_submit?: boolean;
|
|
98
|
+
}): Promise<Suite>;
|
|
99
|
+
runSuite(suiteId: string, testIds?: string[]): Promise<{
|
|
100
|
+
execution_id: string;
|
|
101
|
+
}>;
|
|
102
|
+
getSuiteExecution(suiteId: string, executionId: string): Promise<SuiteExecution>;
|
|
103
|
+
listSuiteExecutions(suiteId: string): Promise<SuiteExecution[]>;
|
|
104
|
+
deleteSuite(id: string): Promise<void>;
|
|
105
|
+
pollSuiteGeneration(suiteId: string, maxAttempts?: number, intervalMs?: number): Promise<Suite>;
|
|
106
|
+
pollSuiteExecution(suiteId: string, executionId: string, maxAttempts?: number, intervalMs?: number): Promise<SuiteExecution>;
|
|
88
107
|
requestCliAuth(): Promise<{
|
|
89
108
|
request_id: string;
|
|
90
109
|
auth_url: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.service.d.ts","sourceRoot":"","sources":["../../src/services/api-client.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,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.service.d.ts","sourceRoot":"","sources":["../../src/services/api-client.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EACL,IAAI,EACJ,aAAa,EACb,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,UAAU,EACV,QAAQ,EAER,KAAK,EACL,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,aAAa,CAAiB;gBAE1B,aAAa,EAAE,cAAc,EAAE,OAAO,GAAE,MAAgB;IAkDpE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKzB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBhD,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAUjC,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAmBtF,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAO3B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,UAAU,CAAC,QAAQ,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQtC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhD,gBAAgB,CAAC,QAAQ,EAAE;QAC/B,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,UAAU,CAAC;IAKjB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAO/D,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAK5D,UAAU,CACd,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAcI,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAQvC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ9C,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAQhE,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ5E,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS9C,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAOnC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAQ1C,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAS1D,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAStE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5C,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAOrC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ5C,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ7D,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IASzE,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS7C,gBAAgB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAO3C,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKlD,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAKtE,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAKlF,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAKvC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAK9C,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhE,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAK5E,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IASnC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK1C,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK1D,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKtE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,WAAW,IAAI,OAAO,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAUI,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAW,EACxB,UAAU,GAAE,MAAa,GACxB,OAAO,CAAC,aAAa,CAAC;IA+BnB,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAK9B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAKpC,aAAa,CAAC,OAAO,EAAE;QAC3B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,OAAO,CAAC,KAAK,CAAC;IAKZ,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAQhF,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOhF,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAO/D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAY,EACzB,UAAU,GAAE,MAAa,GACxB,OAAO,CAAC,KAAK,CAAC;IAWX,kBAAkB,CACtB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAAW,EACxB,UAAU,GAAE,MAAa,GACxB,OAAO,CAAC,cAAc,CAAC;IAiBpB,cAAc,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAQnE,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACnD,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;QAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CAOH"}
|
|
@@ -326,6 +326,64 @@ export class ApiClient {
|
|
|
326
326
|
}
|
|
327
327
|
throw new Error(`Test execution ${executionId} did not complete within the timeout period`);
|
|
328
328
|
}
|
|
329
|
+
// Suites (Playwright Autopilot)
|
|
330
|
+
async listSuites() {
|
|
331
|
+
const response = await this.client.get('/playwright-autopilot/suites');
|
|
332
|
+
return Array.isArray(response.data) ? response.data : [];
|
|
333
|
+
}
|
|
334
|
+
async getSuite(id) {
|
|
335
|
+
const response = await this.client.get(`/playwright-autopilot/suites/${id}`);
|
|
336
|
+
return response.data;
|
|
337
|
+
}
|
|
338
|
+
async generateSuite(payload) {
|
|
339
|
+
const response = await this.client.post('/playwright-autopilot/suites', payload);
|
|
340
|
+
return response.data;
|
|
341
|
+
}
|
|
342
|
+
async runSuite(suiteId, testIds) {
|
|
343
|
+
const response = await this.client.post(`/playwright-autopilot/suites/${suiteId}/run`, testIds?.length ? { test_ids: testIds } : {});
|
|
344
|
+
return response.data;
|
|
345
|
+
}
|
|
346
|
+
async getSuiteExecution(suiteId, executionId) {
|
|
347
|
+
const response = await this.client.get(`/playwright-autopilot/suites/${suiteId}/executions/${executionId}`);
|
|
348
|
+
return response.data;
|
|
349
|
+
}
|
|
350
|
+
async listSuiteExecutions(suiteId) {
|
|
351
|
+
const response = await this.client.get(`/playwright-autopilot/suites/${suiteId}/executions`);
|
|
352
|
+
return Array.isArray(response.data) ? response.data : [];
|
|
353
|
+
}
|
|
354
|
+
async deleteSuite(id) {
|
|
355
|
+
await this.client.delete(`/playwright-autopilot/suites/${id}`);
|
|
356
|
+
}
|
|
357
|
+
async pollSuiteGeneration(suiteId, maxAttempts = 120, intervalMs = 5000) {
|
|
358
|
+
let attempts = 0;
|
|
359
|
+
while (attempts < maxAttempts) {
|
|
360
|
+
const suite = await this.getSuite(suiteId);
|
|
361
|
+
if (suite.status === 'scheduled' || suite.status === 'failed')
|
|
362
|
+
return suite;
|
|
363
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
364
|
+
attempts++;
|
|
365
|
+
}
|
|
366
|
+
throw new Error('Suite generation did not complete within the timeout period');
|
|
367
|
+
}
|
|
368
|
+
async pollSuiteExecution(suiteId, executionId, maxAttempts = 60, intervalMs = 5000) {
|
|
369
|
+
let attempts = 0;
|
|
370
|
+
while (attempts < maxAttempts) {
|
|
371
|
+
try {
|
|
372
|
+
const execution = await this.getSuiteExecution(suiteId, executionId);
|
|
373
|
+
if (execution.status === 'COMPLETED' || execution.status === 'FAILED')
|
|
374
|
+
return execution;
|
|
375
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
376
|
+
attempts++;
|
|
377
|
+
}
|
|
378
|
+
catch (_error) {
|
|
379
|
+
attempts++;
|
|
380
|
+
if (attempts >= maxAttempts)
|
|
381
|
+
throw _error;
|
|
382
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
throw new Error('Suite execution did not complete within the timeout period');
|
|
386
|
+
}
|
|
329
387
|
async requestCliAuth() {
|
|
330
388
|
const response = await this.client.post('/cli/auth/request');
|
|
331
389
|
return response.data;
|