@observeone/cli 1.15.1 → 1.16.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 +38 -0
- package/dist/README.md +38 -0
- package/dist/commands/api-key.d.ts +6 -0
- package/dist/commands/api-key.d.ts.map +1 -0
- package/dist/commands/api-key.js +146 -0
- package/dist/commands/api-key.js.map +1 -0
- package/dist/commands/incident.d.ts.map +1 -1
- package/dist/commands/incident.js +101 -1
- package/dist/commands/incident.js.map +1 -1
- package/dist/commands/suite/heal.d.ts +6 -0
- package/dist/commands/suite/heal.d.ts.map +1 -0
- package/dist/commands/suite/heal.js +38 -0
- package/dist/commands/suite/heal.js.map +1 -0
- package/dist/commands/suite/index.d.ts.map +1 -1
- package/dist/commands/suite/index.js +4 -0
- package/dist/commands/suite/index.js.map +1 -1
- package/dist/commands/suite/toggle-public.d.ts +6 -0
- package/dist/commands/suite/toggle-public.d.ts.map +1 -0
- package/dist/commands/suite/toggle-public.js +33 -0
- package/dist/commands/suite/toggle-public.js.map +1 -0
- package/dist/commands/team.d.ts +6 -0
- package/dist/commands/team.d.ts.map +1 -0
- package/dist/commands/team.js +167 -0
- package/dist/commands/team.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/interfaces/api-client.interface.d.ts +29 -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 +29 -1
- package/dist/services/api-client.service.d.ts.map +1 -1
- package/dist/services/api-client.service.js +69 -1
- package/dist/services/api-client.service.js.map +1 -1
- package/dist/types/index.d.ts +29 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -160,6 +160,7 @@ obs monitor update <id> --description "Updated copy" --alert-channel-id 47
|
|
|
160
160
|
obs monitor runs <id> --limit 10 # recent executions
|
|
161
161
|
obs monitor run <id> # trigger a manual run
|
|
162
162
|
obs monitor toggle <id>
|
|
163
|
+
obs monitor toggle-muted <id>
|
|
163
164
|
obs monitor delete <id> -y
|
|
164
165
|
```
|
|
165
166
|
|
|
@@ -183,6 +184,7 @@ obs check update <id> --description "Signup v2" --header "X-Trace=ci-v2"
|
|
|
183
184
|
obs check runs <id> --limit 10 # recent executions
|
|
184
185
|
obs check run <id> # trigger a manual run
|
|
185
186
|
obs check toggle <id>
|
|
187
|
+
obs check toggle-muted <id>
|
|
186
188
|
obs check delete <id> -y
|
|
187
189
|
```
|
|
188
190
|
|
|
@@ -202,6 +204,8 @@ obs heartbeat list --search "Backup" --status late --limit 5 --json
|
|
|
202
204
|
obs heartbeat update <id> --period 43200
|
|
203
205
|
obs heartbeat runs <id> --limit 10 # recent pings
|
|
204
206
|
obs heartbeat toggle <id>
|
|
207
|
+
obs heartbeat toggle-muted <id>
|
|
208
|
+
obs heartbeat reset <id> # acknowledge missed pings and restart grace window
|
|
205
209
|
obs heartbeat delete <id> -y
|
|
206
210
|
```
|
|
207
211
|
|
|
@@ -230,6 +234,10 @@ obs status-page list
|
|
|
230
234
|
obs status-page get <id>
|
|
231
235
|
obs status-page update <id> --description "Updated"
|
|
232
236
|
obs status-page delete <id> -y
|
|
237
|
+
|
|
238
|
+
# Attach / detach monitors from a status page
|
|
239
|
+
obs status-page add-monitor <sp-id> <resource-id> --type url-monitor --name "API" --order 1
|
|
240
|
+
obs status-page remove-monitor <sp-id> <resource-id>
|
|
233
241
|
```
|
|
234
242
|
|
|
235
243
|
### Incidents
|
|
@@ -239,6 +247,30 @@ obs incident list
|
|
|
239
247
|
obs incident get <id>
|
|
240
248
|
obs incident update <id> --description "Resolved"
|
|
241
249
|
obs incident delete <id> -y
|
|
250
|
+
|
|
251
|
+
# Comment on an incident
|
|
252
|
+
obs incident comment <id> --message "Investigating upstream provider issue"
|
|
253
|
+
|
|
254
|
+
# Assign / unassign
|
|
255
|
+
obs incident assign <id> --user <user-id>
|
|
256
|
+
obs incident unassign <id>
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### API Keys
|
|
260
|
+
```bash
|
|
261
|
+
obs api-key list
|
|
262
|
+
obs api-key create --name "CI Bot"
|
|
263
|
+
obs api-key revoke <id>
|
|
264
|
+
obs api-key toggle <id>
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Teams
|
|
268
|
+
```bash
|
|
269
|
+
obs team list
|
|
270
|
+
obs team members <team-id>
|
|
271
|
+
obs team invite <team-id> # regenerate invite code
|
|
272
|
+
obs team remove-member <team-id> <user-id>
|
|
273
|
+
obs team update-role <team-id> <user-id> --role member
|
|
242
274
|
```
|
|
243
275
|
|
|
244
276
|
---
|
|
@@ -302,6 +334,12 @@ obs suite schedule <id> --cron "*/30 * * * *"
|
|
|
302
334
|
obs suite secrets <id> --var USERNAME=admin --var PASSWORD=secret
|
|
303
335
|
obs suite secrets <id> --var-file .env.test
|
|
304
336
|
|
|
337
|
+
# Toggle public visibility of a suite
|
|
338
|
+
obs suite toggle-public <id>
|
|
339
|
+
|
|
340
|
+
# Trigger self-heal on a suite's failing tests
|
|
341
|
+
obs suite heal <id>
|
|
342
|
+
|
|
305
343
|
# Delete a suite
|
|
306
344
|
obs suite delete <id>
|
|
307
345
|
```
|
package/dist/README.md
CHANGED
|
@@ -160,6 +160,7 @@ obs monitor update <id> --description "Updated copy" --alert-channel-id 47
|
|
|
160
160
|
obs monitor runs <id> --limit 10 # recent executions
|
|
161
161
|
obs monitor run <id> # trigger a manual run
|
|
162
162
|
obs monitor toggle <id>
|
|
163
|
+
obs monitor toggle-muted <id>
|
|
163
164
|
obs monitor delete <id> -y
|
|
164
165
|
```
|
|
165
166
|
|
|
@@ -183,6 +184,7 @@ obs check update <id> --description "Signup v2" --header "X-Trace=ci-v2"
|
|
|
183
184
|
obs check runs <id> --limit 10 # recent executions
|
|
184
185
|
obs check run <id> # trigger a manual run
|
|
185
186
|
obs check toggle <id>
|
|
187
|
+
obs check toggle-muted <id>
|
|
186
188
|
obs check delete <id> -y
|
|
187
189
|
```
|
|
188
190
|
|
|
@@ -202,6 +204,8 @@ obs heartbeat list --search "Backup" --status late --limit 5 --json
|
|
|
202
204
|
obs heartbeat update <id> --period 43200
|
|
203
205
|
obs heartbeat runs <id> --limit 10 # recent pings
|
|
204
206
|
obs heartbeat toggle <id>
|
|
207
|
+
obs heartbeat toggle-muted <id>
|
|
208
|
+
obs heartbeat reset <id> # acknowledge missed pings and restart grace window
|
|
205
209
|
obs heartbeat delete <id> -y
|
|
206
210
|
```
|
|
207
211
|
|
|
@@ -230,6 +234,10 @@ obs status-page list
|
|
|
230
234
|
obs status-page get <id>
|
|
231
235
|
obs status-page update <id> --description "Updated"
|
|
232
236
|
obs status-page delete <id> -y
|
|
237
|
+
|
|
238
|
+
# Attach / detach monitors from a status page
|
|
239
|
+
obs status-page add-monitor <sp-id> <resource-id> --type url-monitor --name "API" --order 1
|
|
240
|
+
obs status-page remove-monitor <sp-id> <resource-id>
|
|
233
241
|
```
|
|
234
242
|
|
|
235
243
|
### Incidents
|
|
@@ -239,6 +247,30 @@ obs incident list
|
|
|
239
247
|
obs incident get <id>
|
|
240
248
|
obs incident update <id> --description "Resolved"
|
|
241
249
|
obs incident delete <id> -y
|
|
250
|
+
|
|
251
|
+
# Comment on an incident
|
|
252
|
+
obs incident comment <id> --message "Investigating upstream provider issue"
|
|
253
|
+
|
|
254
|
+
# Assign / unassign
|
|
255
|
+
obs incident assign <id> --user <user-id>
|
|
256
|
+
obs incident unassign <id>
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### API Keys
|
|
260
|
+
```bash
|
|
261
|
+
obs api-key list
|
|
262
|
+
obs api-key create --name "CI Bot"
|
|
263
|
+
obs api-key revoke <id>
|
|
264
|
+
obs api-key toggle <id>
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Teams
|
|
268
|
+
```bash
|
|
269
|
+
obs team list
|
|
270
|
+
obs team members <team-id>
|
|
271
|
+
obs team invite <team-id> # regenerate invite code
|
|
272
|
+
obs team remove-member <team-id> <user-id>
|
|
273
|
+
obs team update-role <team-id> <user-id> --role member
|
|
242
274
|
```
|
|
243
275
|
|
|
244
276
|
---
|
|
@@ -302,6 +334,12 @@ obs suite schedule <id> --cron "*/30 * * * *"
|
|
|
302
334
|
obs suite secrets <id> --var USERNAME=admin --var PASSWORD=secret
|
|
303
335
|
obs suite secrets <id> --var-file .env.test
|
|
304
336
|
|
|
337
|
+
# Toggle public visibility of a suite
|
|
338
|
+
obs suite toggle-public <id>
|
|
339
|
+
|
|
340
|
+
# Trigger self-heal on a suite's failing tests
|
|
341
|
+
obs suite heal <id>
|
|
342
|
+
|
|
305
343
|
# Delete a suite
|
|
306
344
|
obs suite delete <id>
|
|
307
345
|
```
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { IConfigService } from '../interfaces/config.interface.js';
|
|
3
|
+
import { IApiClient } from '../interfaces/api-client.interface.js';
|
|
4
|
+
import { IOutputService } from '../interfaces/output.interface.js';
|
|
5
|
+
export declare function createApiKeyCommand(_configService: IConfigService, apiClient: IApiClient, outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=api-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../../src/commands/api-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA0IT"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
export function createApiKeyCommand(_configService, apiClient, outputService) {
|
|
5
|
+
const cmd = new Command('api-key').description('Manage API keys');
|
|
6
|
+
// obs api-key list [--json]
|
|
7
|
+
cmd
|
|
8
|
+
.command('list')
|
|
9
|
+
.description('List all API keys')
|
|
10
|
+
.action(async () => {
|
|
11
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
12
|
+
try {
|
|
13
|
+
const apiKeys = await apiClient.getApiKeys();
|
|
14
|
+
if (isJson) {
|
|
15
|
+
outputService.formatJsonOutput({ apiKeys });
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (apiKeys.length === 0) {
|
|
19
|
+
console.log(chalk.gray('\n No API keys found.\n'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
console.log(chalk.bold('\n API Keys\n'));
|
|
23
|
+
for (const key of apiKeys) {
|
|
24
|
+
const status = key.is_active ? chalk.green('active') : chalk.gray('inactive');
|
|
25
|
+
console.log(chalk.white(` ${key.name}`) + chalk.gray(` [${key.id}]`) + ` — ${status}`);
|
|
26
|
+
}
|
|
27
|
+
console.log('');
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const msg = err.message || 'Failed to list API keys';
|
|
31
|
+
if (isJson) {
|
|
32
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
36
|
+
}
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// obs api-key create --name <name> [--json]
|
|
41
|
+
cmd
|
|
42
|
+
.command('create')
|
|
43
|
+
.description('Create a new API key')
|
|
44
|
+
.option('-n, --name <name>', 'API key name')
|
|
45
|
+
.action(async (options) => {
|
|
46
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
47
|
+
try {
|
|
48
|
+
let name = options.name;
|
|
49
|
+
if (!name) {
|
|
50
|
+
const answers = await inquirer.prompt([
|
|
51
|
+
{
|
|
52
|
+
type: 'input',
|
|
53
|
+
name: 'name',
|
|
54
|
+
message: 'API key name:',
|
|
55
|
+
validate: (val) => (val.trim() ? true : 'Name is required'),
|
|
56
|
+
},
|
|
57
|
+
]);
|
|
58
|
+
name = answers.name;
|
|
59
|
+
}
|
|
60
|
+
const apiKey = await apiClient.createApiKey(name);
|
|
61
|
+
if (isJson) {
|
|
62
|
+
outputService.formatJsonOutput({ apiKey });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
console.log(chalk.green(`\n✓ API key created: ${apiKey.name} [${apiKey.id}]\n`));
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
const msg = err.message || 'Failed to create API key';
|
|
69
|
+
if (isJson) {
|
|
70
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
74
|
+
}
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
// obs api-key revoke <id> [-y] [--json]
|
|
79
|
+
cmd
|
|
80
|
+
.command('revoke <id>')
|
|
81
|
+
.description('Revoke (delete) an API key')
|
|
82
|
+
.option('-y, --yes', 'Skip confirmation prompt')
|
|
83
|
+
.action(async (id, options) => {
|
|
84
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
85
|
+
try {
|
|
86
|
+
if (!options.yes) {
|
|
87
|
+
const { confirm } = await inquirer.prompt([
|
|
88
|
+
{
|
|
89
|
+
type: 'confirm',
|
|
90
|
+
name: 'confirm',
|
|
91
|
+
message: `Are you sure you want to revoke API key ${id}?`,
|
|
92
|
+
default: false,
|
|
93
|
+
},
|
|
94
|
+
]);
|
|
95
|
+
if (!confirm) {
|
|
96
|
+
console.log(chalk.gray(' Revoke cancelled.'));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const result = await apiClient.deleteApiKey(id);
|
|
101
|
+
if (isJson) {
|
|
102
|
+
outputService.formatJsonOutput(result);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
console.log(chalk.green(`\n✓ ${result.message || `API key ${id} revoked.`}\n`));
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const msg = err.message || 'Failed to revoke API key';
|
|
109
|
+
if (isJson) {
|
|
110
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
114
|
+
}
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
// obs api-key toggle <id> [--json]
|
|
119
|
+
cmd
|
|
120
|
+
.command('toggle <id>')
|
|
121
|
+
.description('Toggle an API key active/inactive')
|
|
122
|
+
.action(async (id) => {
|
|
123
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
124
|
+
try {
|
|
125
|
+
const result = await apiClient.toggleApiKey(id);
|
|
126
|
+
if (isJson) {
|
|
127
|
+
outputService.formatJsonOutput(result);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const status = result.apiKey?.is_active ? chalk.green('active') : chalk.gray('inactive');
|
|
131
|
+
console.log(chalk.bold(`\n✓ ${result.message || 'Toggled.'} Status: ${status}\n`));
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
const msg = err.message || 'Failed to toggle API key';
|
|
135
|
+
if (isJson) {
|
|
136
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
140
|
+
}
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
return cmd;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=api-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.js","sourceRoot":"","sources":["../../src/commands/api-key.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incident.d.ts","sourceRoot":"","sources":["../../src/commands/incident.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"incident.d.ts","sourceRoot":"","sources":["../../src/commands/incident.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAYnE,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA+MT"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
1
2
|
import inquirer from 'inquirer';
|
|
2
3
|
import { createResourceCommand } from './resource-command.factory.js';
|
|
3
4
|
const priorities = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW'];
|
|
@@ -8,7 +9,7 @@ function normalizePriority(priority) {
|
|
|
8
9
|
return priorities.includes(normalized) ? normalized : undefined;
|
|
9
10
|
}
|
|
10
11
|
export function createIncidentCommand(configService, apiClient, outputService) {
|
|
11
|
-
|
|
12
|
+
const cmd = createResourceCommand(configService, apiClient, outputService, {
|
|
12
13
|
resourceName: 'incident',
|
|
13
14
|
pluralName: 'incidents',
|
|
14
15
|
description: 'Manage incidents',
|
|
@@ -103,5 +104,104 @@ export function createIncidentCommand(configService, apiClient, outputService) {
|
|
|
103
104
|
return payload;
|
|
104
105
|
},
|
|
105
106
|
});
|
|
107
|
+
// obs incident comment <id> --message <msg> [--json]
|
|
108
|
+
cmd
|
|
109
|
+
.command('comment <id>')
|
|
110
|
+
.description('Add a comment to an incident')
|
|
111
|
+
.option('-m, --message <message>', 'Comment message')
|
|
112
|
+
.action(async (id, options) => {
|
|
113
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
114
|
+
try {
|
|
115
|
+
const incidentId = parseInt(id);
|
|
116
|
+
if (isNaN(incidentId))
|
|
117
|
+
throw new Error('Invalid incident ID');
|
|
118
|
+
let message = options.message;
|
|
119
|
+
if (!message) {
|
|
120
|
+
const answers = await inquirer.prompt([
|
|
121
|
+
{
|
|
122
|
+
type: 'input',
|
|
123
|
+
name: 'message',
|
|
124
|
+
message: 'Comment message:',
|
|
125
|
+
validate: (val) => (val.trim() ? true : 'Message is required'),
|
|
126
|
+
},
|
|
127
|
+
]);
|
|
128
|
+
message = answers.message;
|
|
129
|
+
}
|
|
130
|
+
const event = await apiClient.addIncidentComment(incidentId, message);
|
|
131
|
+
if (isJson) {
|
|
132
|
+
outputService.formatJsonOutput({ event });
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
console.log(chalk.green(`\n✓ Comment added to incident ${incidentId}.\n`));
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
const msg = err.message || 'Failed to add comment';
|
|
139
|
+
if (isJson) {
|
|
140
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
144
|
+
}
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
// obs incident assign <id> --user <user-id> [--json]
|
|
149
|
+
cmd
|
|
150
|
+
.command('assign <id>')
|
|
151
|
+
.description('Assign an incident to a user')
|
|
152
|
+
.requiredOption('--user <user-id>', 'User ID to assign the incident to')
|
|
153
|
+
.action(async (id, options) => {
|
|
154
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
155
|
+
try {
|
|
156
|
+
const incidentId = parseInt(id);
|
|
157
|
+
if (isNaN(incidentId))
|
|
158
|
+
throw new Error('Invalid incident ID');
|
|
159
|
+
const incident = await apiClient.assignIncident(incidentId, options.user);
|
|
160
|
+
if (isJson) {
|
|
161
|
+
outputService.formatJsonOutput({ incident });
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
console.log(chalk.green(`\n✓ Incident ${incidentId} assigned to user ${options.user}.\n`));
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
const msg = err.message || 'Failed to assign incident';
|
|
168
|
+
if (isJson) {
|
|
169
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
173
|
+
}
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
// obs incident unassign <id> [--json]
|
|
178
|
+
cmd
|
|
179
|
+
.command('unassign <id>')
|
|
180
|
+
.description('Unassign an incident')
|
|
181
|
+
.action(async (id) => {
|
|
182
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
183
|
+
try {
|
|
184
|
+
const incidentId = parseInt(id);
|
|
185
|
+
if (isNaN(incidentId))
|
|
186
|
+
throw new Error('Invalid incident ID');
|
|
187
|
+
const incident = await apiClient.assignIncident(incidentId, null);
|
|
188
|
+
if (isJson) {
|
|
189
|
+
outputService.formatJsonOutput({ incident });
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
console.log(chalk.green(`\n✓ Incident ${incidentId} unassigned.\n`));
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
const msg = err.message || 'Failed to unassign incident';
|
|
196
|
+
if (isJson) {
|
|
197
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
201
|
+
}
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
return cmd;
|
|
106
206
|
}
|
|
107
207
|
//# sourceMappingURL=incident.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"incident.js","sourceRoot":"","sources":["../../src/commands/incident.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,MAAM,UAAU,GAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAE7E,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAsB,CAAC;IAC9D,OAAO,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,aAA6B,EAC7B,SAAqB,EACrB,aAA6B;IAE7B,
|
|
1
|
+
{"version":3,"file":"incident.js","sourceRoot":"","sources":["../../src/commands/incident.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,MAAM,UAAU,GAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAE7E,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAsB,CAAC;IAC9D,OAAO,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,aAA6B,EAC7B,SAAqB,EACrB,aAA6B;IAE7B,MAAM,GAAG,GAAG,qBAAqB,CAAW,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE;QACnF,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,WAAW;QACvB,WAAW,EAAE,kBAAkB;QAC/B,UAAU,EAAE;YACV,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE;YACpC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC;YAChD,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC;YACxD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;SAC7C;QACD,UAAU,EAAE;YACV,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;SAC3E;QACD,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1B,GAAG;iBACA,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;iBAC/C,MAAM,CAAC,2BAA2B,EAAE,wCAAwC,CAAC;iBAC7E,MAAM,CAAC,iCAAiC,EAAE,sBAAsB,CAAC;iBACjE,MAAM,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;iBACrD,MAAM,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;QACD,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1B,GAAG;iBACA,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;iBAC/C,MAAM,CAAC,2BAA2B,EAAE,wCAAwC,CAAC;iBAC7E,MAAM,CAAC,iCAAiC,EAAE,sBAAsB,CAAC;iBACjE,MAAM,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;iBACrD,MAAM,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC;QACD,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC/B,IAAI,KAAK,GAAG,OAAO,CAAC,KAA2B,CAAC;YAChD,IAAI,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAA8B,CAAC,CAAC;YAEzE,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACpC;wBACE,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,iBAAiB;wBAC1B,IAAI,EAAE,CAAC,KAAK;wBACZ,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC;qBACjF;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,WAAW;wBACpB,IAAI,EAAE,CAAC,QAAQ;wBACf,OAAO,EAAE,UAAU;qBACpB;iBACF,CAAC,CAAC;gBACH,KAAK,GAAG,KAAK,IAAK,OAAO,CAAC,KAAgB,CAAC;gBAC3C,QAAQ,GAAG,QAAQ,IAAK,OAAO,CAAC,QAA6B,CAAC;YAChE,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO;gBACL,KAAK;gBACL,QAAQ;gBACR,WAAW,EAAE,OAAO,CAAC,WAAiC;gBACtD,WAAW,EAAE,OAAO,CAAC,UAAgC;gBACrD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;aAC7E,CAAC;QACJ,CAAC;QACD,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;YAC9C,MAAM,UAAU,GACd,OAAO,CAAC,KAAK;gBACb,OAAO,CAAC,QAAQ;gBAChB,OAAO,CAAC,WAAW;gBACnB,OAAO,CAAC,UAAU;gBAClB,OAAO,CAAC,MAAM,CAAC;YAEjB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,aAAa,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,QAAQ,GACZ,iBAAiB,CAAC,OAAO,CAAC,QAA8B,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC;YAEjF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;YAED,MAAM,OAAO,GAAsB;gBACjC,KAAK,EAAG,OAAO,CAAC,KAA4B,IAAI,QAAQ,CAAC,KAAK;gBAC9D,QAAQ;aACT,CAAC;YAEF,MAAM,WAAW,GACd,OAAO,CAAC,WAAkC;gBAC3C,CAAC,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAChF,IAAI,WAAW,KAAK,SAAS;gBAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;YAEjE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,UAAoB,CAAC;YACrD,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAgB,EAAE,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC,CAAC;IAEH,qDAAqD;IACrD,GAAG;SACA,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,yBAAyB,EAAE,iBAAiB,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA6B,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAE9D,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACpC;wBACE,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,kBAAkB;wBAC3B,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC;qBACvE;iBACF,CAAC,CAAC;gBACH,OAAO,GAAG,OAAO,CAAC,OAAiB,CAAC;YACtC,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAQ,CAAC,CAAC;YACvE,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iCAAiC,UAAU,KAAK,CAAC,CAAC,CAAC;QAC7E,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,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,qDAAqD;IACrD,GAAG;SACA,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,cAAc,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAyB,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAE9D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1E,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,UAAU,qBAAqB,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAC7F,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,2BAA2B,CAAC;YAClE,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,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,sCAAsC;IACtC,GAAG;SACA,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,sBAAsB,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAE9D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAClE,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,UAAU,gBAAgB,CAAC,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,6BAA6B,CAAC;YACpE,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,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,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 createSuiteHealCommand(_configService: IConfigService, apiClient: ApiClient, outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=heal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heal.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/heal.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;AAEtE,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA+BT"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export function createSuiteHealCommand(_configService, apiClient, outputService) {
|
|
4
|
+
return new Command('heal')
|
|
5
|
+
.description('Trigger a heal for a suite')
|
|
6
|
+
.argument('<id>', 'Suite ID')
|
|
7
|
+
.action(async (id) => {
|
|
8
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
9
|
+
try {
|
|
10
|
+
const result = await apiClient.healSuite(id);
|
|
11
|
+
if (isJson) {
|
|
12
|
+
outputService.formatJsonOutput(result);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
console.log(chalk.bold(`\n✓ Heal triggered for suite ${id}`));
|
|
16
|
+
if (result.heals && result.heals.length > 0) {
|
|
17
|
+
for (const heal of result.heals) {
|
|
18
|
+
console.log(chalk.gray(` Test ${heal.testId} → heal ${heal.healId}`));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(chalk.gray(' No heals generated.'));
|
|
23
|
+
}
|
|
24
|
+
console.log('');
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
const msg = err.message || 'Failed to heal suite';
|
|
28
|
+
if (isJson) {
|
|
29
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
33
|
+
}
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=heal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heal.js","sourceRoot":"","sources":["../../../src/commands/suite/heal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,UAAU,sBAAsB,CACpC,cAA8B,EAC9B,SAAoB,EACpB,aAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,4BAA4B,CAAC;SACzC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;SAC5B,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,sBAAsB,CAAC;YAC7D,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,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -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;AAgBtE,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAmBT"}
|
|
@@ -11,6 +11,8 @@ import { createSuiteSecretsCommand } from './secrets.js';
|
|
|
11
11
|
import { createSuiteUpdateCommand } from './update.js';
|
|
12
12
|
import { createSuitePullCommand } from './pull.js';
|
|
13
13
|
import { createSuitePushCommand } from './push.js';
|
|
14
|
+
import { createSuiteTogglePublicCommand } from './toggle-public.js';
|
|
15
|
+
import { createSuiteHealCommand } from './heal.js';
|
|
14
16
|
export function createSuiteCommand(configService, apiClient, outputService) {
|
|
15
17
|
const suite = new Command('suite').description('Manage Playwright Autopilot suites');
|
|
16
18
|
suite.addCommand(createSuiteUpdateCommand(configService, apiClient, outputService));
|
|
@@ -25,6 +27,8 @@ export function createSuiteCommand(configService, apiClient, outputService) {
|
|
|
25
27
|
suite.addCommand(createSuiteSecretsCommand(configService, apiClient, outputService));
|
|
26
28
|
suite.addCommand(createSuitePullCommand(configService, apiClient, outputService));
|
|
27
29
|
suite.addCommand(createSuitePushCommand(configService, apiClient, outputService));
|
|
30
|
+
suite.addCommand(createSuiteTogglePublicCommand(configService, apiClient, outputService));
|
|
31
|
+
suite.addCommand(createSuiteHealCommand(configService, apiClient, outputService));
|
|
28
32
|
return suite;
|
|
29
33
|
}
|
|
30
34
|
//# 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;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"}
|
|
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;AACnD,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,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;IAClF,KAAK,CAAC,UAAU,CAAC,8BAA8B,CAAC,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1F,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 createSuiteTogglePublicCommand(_configService: IConfigService, apiClient: ApiClient, outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=toggle-public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle-public.d.ts","sourceRoot":"","sources":["../../../src/commands/suite/toggle-public.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;AAEtE,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,cAAc,GAC5B,OAAO,CA2BT"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export function createSuiteTogglePublicCommand(_configService, apiClient, outputService) {
|
|
4
|
+
return new Command('toggle-public')
|
|
5
|
+
.description('Toggle public visibility of a suite')
|
|
6
|
+
.argument('<id>', 'Suite ID')
|
|
7
|
+
.action(async (id) => {
|
|
8
|
+
const isJson = process.env.OBS_JSON_OUTPUT === 'true';
|
|
9
|
+
try {
|
|
10
|
+
// Fetch current state to toggle
|
|
11
|
+
const suite = await apiClient.getSuite(id);
|
|
12
|
+
const newPublic = !suite.is_public;
|
|
13
|
+
const result = await apiClient.toggleSuitePublic(id, newPublic);
|
|
14
|
+
if (isJson) {
|
|
15
|
+
outputService.formatJsonOutput({ suite: result });
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const status = newPublic ? chalk.green('public') : chalk.gray('private');
|
|
19
|
+
console.log(chalk.bold(`\n✓ Suite ${id} is now ${status}.\n`));
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const msg = err.message || 'Failed to toggle suite visibility';
|
|
23
|
+
if (isJson) {
|
|
24
|
+
outputService.formatJsonOutput({ status: 'ERROR', error: { message: msg } });
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.error(chalk.red(`\n❌ ${msg}\n`));
|
|
28
|
+
}
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=toggle-public.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle-public.js","sourceRoot":"","sources":["../../../src/commands/suite/toggle-public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,UAAU,8BAA8B,CAC5C,cAA8B,EAC9B,SAAoB,EACpB,aAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;SAChC,WAAW,CAAC,qCAAqC,CAAC;SAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;SAC5B,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;QACtD,IAAI,CAAC;YACH,gCAAgC;YAChC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YAChE,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,MAAM,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,mCAAmC,CAAC;YAC1E,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,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3C,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 { IConfigService } from '../interfaces/config.interface.js';
|
|
3
|
+
import { IApiClient } from '../interfaces/api-client.interface.js';
|
|
4
|
+
import { IOutputService } from '../interfaces/output.interface.js';
|
|
5
|
+
export declare function createTeamCommand(_configService: IConfigService, apiClient: IApiClient, outputService: IOutputService): Command;
|
|
6
|
+
//# sourceMappingURL=team.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team.d.ts","sourceRoot":"","sources":["../../src/commands/team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAgKT"}
|