@observeone/cli 1.15.1 → 1.17.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 +75 -1
- package/dist/README.md +75 -1
- 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/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +226 -4
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +88 -4
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/incident.d.ts.map +1 -1
- package/dist/commands/incident.js +102 -1
- package/dist/commands/incident.js.map +1 -1
- package/dist/commands/status-page.d.ts.map +1 -1
- package/dist/commands/status-page.js +6 -4
- package/dist/commands/status-page.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 +35 -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/dist/utils/apply-config.d.ts +5 -1
- package/dist/utils/apply-config.d.ts.map +1 -1
- package/dist/utils/apply-config.js +16 -1
- package/dist/utils/apply-config.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -104,7 +104,7 @@ obs apply -f my-stack.json
|
|
|
104
104
|
"name": "Production Website",
|
|
105
105
|
"description": "Main landing page monitor",
|
|
106
106
|
"url": "https://example.com",
|
|
107
|
-
"
|
|
107
|
+
"interval": "*/5 * * * *",
|
|
108
108
|
"alert_on_failure": true
|
|
109
109
|
}
|
|
110
110
|
],
|
|
@@ -121,10 +121,46 @@ obs apply -f my-stack.json
|
|
|
121
121
|
"period": 86400,
|
|
122
122
|
"grace_period": 3600
|
|
123
123
|
}
|
|
124
|
+
],
|
|
125
|
+
"alert_channels": [
|
|
126
|
+
{
|
|
127
|
+
"name": "Slack Alerts",
|
|
128
|
+
"type": "slack",
|
|
129
|
+
"config": { "webhook_url": "https://hooks.slack.com/..." }
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
"status_pages": [
|
|
133
|
+
{
|
|
134
|
+
"slug": "status",
|
|
135
|
+
"name": "System Status",
|
|
136
|
+
"is_public": true,
|
|
137
|
+
"show_incident_history": true,
|
|
138
|
+
"show_uptime_percentage": true
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"suites": [
|
|
142
|
+
{
|
|
143
|
+
"suite_name": "Smoke Tests",
|
|
144
|
+
"target_url": "https://example.com",
|
|
145
|
+
"cron_expression": "0 */6 * * *",
|
|
146
|
+
"schedule_active": true
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"incidents": [
|
|
150
|
+
{
|
|
151
|
+
"title": "API Degradation",
|
|
152
|
+
"status": "OPEN",
|
|
153
|
+
"priority": "HIGH"
|
|
154
|
+
}
|
|
124
155
|
]
|
|
125
156
|
}
|
|
126
157
|
```
|
|
127
158
|
|
|
159
|
+
> **Notes:**
|
|
160
|
+
> - `incidents` — included in export as a backup/audit artifact. `obs apply` warns and skips this block; incidents cannot be re-created from config.
|
|
161
|
+
> - `suites` — `obs apply` updates metadata for existing suites only. New suites require AI generation via `obs suite generate`.
|
|
162
|
+
> - Status-page attached monitors are exported but not applied. Manage them via `obs status-page add-monitor / remove-monitor`.
|
|
163
|
+
|
|
128
164
|
**Single-resource files (v1.13.0):** `obs apply` also accepts files holding a single resource, in three shapes:
|
|
129
165
|
|
|
130
166
|
```json
|
|
@@ -160,6 +196,7 @@ obs monitor update <id> --description "Updated copy" --alert-channel-id 47
|
|
|
160
196
|
obs monitor runs <id> --limit 10 # recent executions
|
|
161
197
|
obs monitor run <id> # trigger a manual run
|
|
162
198
|
obs monitor toggle <id>
|
|
199
|
+
obs monitor toggle-muted <id>
|
|
163
200
|
obs monitor delete <id> -y
|
|
164
201
|
```
|
|
165
202
|
|
|
@@ -183,6 +220,7 @@ obs check update <id> --description "Signup v2" --header "X-Trace=ci-v2"
|
|
|
183
220
|
obs check runs <id> --limit 10 # recent executions
|
|
184
221
|
obs check run <id> # trigger a manual run
|
|
185
222
|
obs check toggle <id>
|
|
223
|
+
obs check toggle-muted <id>
|
|
186
224
|
obs check delete <id> -y
|
|
187
225
|
```
|
|
188
226
|
|
|
@@ -202,6 +240,8 @@ obs heartbeat list --search "Backup" --status late --limit 5 --json
|
|
|
202
240
|
obs heartbeat update <id> --period 43200
|
|
203
241
|
obs heartbeat runs <id> --limit 10 # recent pings
|
|
204
242
|
obs heartbeat toggle <id>
|
|
243
|
+
obs heartbeat toggle-muted <id>
|
|
244
|
+
obs heartbeat reset <id> # acknowledge missed pings and restart grace window
|
|
205
245
|
obs heartbeat delete <id> -y
|
|
206
246
|
```
|
|
207
247
|
|
|
@@ -230,6 +270,10 @@ obs status-page list
|
|
|
230
270
|
obs status-page get <id>
|
|
231
271
|
obs status-page update <id> --description "Updated"
|
|
232
272
|
obs status-page delete <id> -y
|
|
273
|
+
|
|
274
|
+
# Attach / detach monitors from a status page
|
|
275
|
+
obs status-page add-monitor <sp-id> <resource-id> --type url-monitor --name "API" --order 1
|
|
276
|
+
obs status-page remove-monitor <sp-id> <resource-id>
|
|
233
277
|
```
|
|
234
278
|
|
|
235
279
|
### Incidents
|
|
@@ -239,6 +283,30 @@ obs incident list
|
|
|
239
283
|
obs incident get <id>
|
|
240
284
|
obs incident update <id> --description "Resolved"
|
|
241
285
|
obs incident delete <id> -y
|
|
286
|
+
|
|
287
|
+
# Comment on an incident
|
|
288
|
+
obs incident comment <id> --message "Investigating upstream provider issue"
|
|
289
|
+
|
|
290
|
+
# Assign / unassign
|
|
291
|
+
obs incident assign <id> --user <user-id>
|
|
292
|
+
obs incident unassign <id>
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### API Keys
|
|
296
|
+
```bash
|
|
297
|
+
obs api-key list
|
|
298
|
+
obs api-key create --name "CI Bot"
|
|
299
|
+
obs api-key revoke <id>
|
|
300
|
+
obs api-key toggle <id>
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Teams
|
|
304
|
+
```bash
|
|
305
|
+
obs team list
|
|
306
|
+
obs team members <team-id>
|
|
307
|
+
obs team invite <team-id> # regenerate invite code
|
|
308
|
+
obs team remove-member <team-id> <user-id>
|
|
309
|
+
obs team update-role <team-id> <user-id> --role member
|
|
242
310
|
```
|
|
243
311
|
|
|
244
312
|
---
|
|
@@ -302,6 +370,12 @@ obs suite schedule <id> --cron "*/30 * * * *"
|
|
|
302
370
|
obs suite secrets <id> --var USERNAME=admin --var PASSWORD=secret
|
|
303
371
|
obs suite secrets <id> --var-file .env.test
|
|
304
372
|
|
|
373
|
+
# Toggle public visibility of a suite
|
|
374
|
+
obs suite toggle-public <id>
|
|
375
|
+
|
|
376
|
+
# Trigger self-heal on a suite's failing tests
|
|
377
|
+
obs suite heal <id>
|
|
378
|
+
|
|
305
379
|
# Delete a suite
|
|
306
380
|
obs suite delete <id>
|
|
307
381
|
```
|
package/dist/README.md
CHANGED
|
@@ -104,7 +104,7 @@ obs apply -f my-stack.json
|
|
|
104
104
|
"name": "Production Website",
|
|
105
105
|
"description": "Main landing page monitor",
|
|
106
106
|
"url": "https://example.com",
|
|
107
|
-
"
|
|
107
|
+
"interval": "*/5 * * * *",
|
|
108
108
|
"alert_on_failure": true
|
|
109
109
|
}
|
|
110
110
|
],
|
|
@@ -121,10 +121,46 @@ obs apply -f my-stack.json
|
|
|
121
121
|
"period": 86400,
|
|
122
122
|
"grace_period": 3600
|
|
123
123
|
}
|
|
124
|
+
],
|
|
125
|
+
"alert_channels": [
|
|
126
|
+
{
|
|
127
|
+
"name": "Slack Alerts",
|
|
128
|
+
"type": "slack",
|
|
129
|
+
"config": { "webhook_url": "https://hooks.slack.com/..." }
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
"status_pages": [
|
|
133
|
+
{
|
|
134
|
+
"slug": "status",
|
|
135
|
+
"name": "System Status",
|
|
136
|
+
"is_public": true,
|
|
137
|
+
"show_incident_history": true,
|
|
138
|
+
"show_uptime_percentage": true
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"suites": [
|
|
142
|
+
{
|
|
143
|
+
"suite_name": "Smoke Tests",
|
|
144
|
+
"target_url": "https://example.com",
|
|
145
|
+
"cron_expression": "0 */6 * * *",
|
|
146
|
+
"schedule_active": true
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"incidents": [
|
|
150
|
+
{
|
|
151
|
+
"title": "API Degradation",
|
|
152
|
+
"status": "OPEN",
|
|
153
|
+
"priority": "HIGH"
|
|
154
|
+
}
|
|
124
155
|
]
|
|
125
156
|
}
|
|
126
157
|
```
|
|
127
158
|
|
|
159
|
+
> **Notes:**
|
|
160
|
+
> - `incidents` — included in export as a backup/audit artifact. `obs apply` warns and skips this block; incidents cannot be re-created from config.
|
|
161
|
+
> - `suites` — `obs apply` updates metadata for existing suites only. New suites require AI generation via `obs suite generate`.
|
|
162
|
+
> - Status-page attached monitors are exported but not applied. Manage them via `obs status-page add-monitor / remove-monitor`.
|
|
163
|
+
|
|
128
164
|
**Single-resource files (v1.13.0):** `obs apply` also accepts files holding a single resource, in three shapes:
|
|
129
165
|
|
|
130
166
|
```json
|
|
@@ -160,6 +196,7 @@ obs monitor update <id> --description "Updated copy" --alert-channel-id 47
|
|
|
160
196
|
obs monitor runs <id> --limit 10 # recent executions
|
|
161
197
|
obs monitor run <id> # trigger a manual run
|
|
162
198
|
obs monitor toggle <id>
|
|
199
|
+
obs monitor toggle-muted <id>
|
|
163
200
|
obs monitor delete <id> -y
|
|
164
201
|
```
|
|
165
202
|
|
|
@@ -183,6 +220,7 @@ obs check update <id> --description "Signup v2" --header "X-Trace=ci-v2"
|
|
|
183
220
|
obs check runs <id> --limit 10 # recent executions
|
|
184
221
|
obs check run <id> # trigger a manual run
|
|
185
222
|
obs check toggle <id>
|
|
223
|
+
obs check toggle-muted <id>
|
|
186
224
|
obs check delete <id> -y
|
|
187
225
|
```
|
|
188
226
|
|
|
@@ -202,6 +240,8 @@ obs heartbeat list --search "Backup" --status late --limit 5 --json
|
|
|
202
240
|
obs heartbeat update <id> --period 43200
|
|
203
241
|
obs heartbeat runs <id> --limit 10 # recent pings
|
|
204
242
|
obs heartbeat toggle <id>
|
|
243
|
+
obs heartbeat toggle-muted <id>
|
|
244
|
+
obs heartbeat reset <id> # acknowledge missed pings and restart grace window
|
|
205
245
|
obs heartbeat delete <id> -y
|
|
206
246
|
```
|
|
207
247
|
|
|
@@ -230,6 +270,10 @@ obs status-page list
|
|
|
230
270
|
obs status-page get <id>
|
|
231
271
|
obs status-page update <id> --description "Updated"
|
|
232
272
|
obs status-page delete <id> -y
|
|
273
|
+
|
|
274
|
+
# Attach / detach monitors from a status page
|
|
275
|
+
obs status-page add-monitor <sp-id> <resource-id> --type url-monitor --name "API" --order 1
|
|
276
|
+
obs status-page remove-monitor <sp-id> <resource-id>
|
|
233
277
|
```
|
|
234
278
|
|
|
235
279
|
### Incidents
|
|
@@ -239,6 +283,30 @@ obs incident list
|
|
|
239
283
|
obs incident get <id>
|
|
240
284
|
obs incident update <id> --description "Resolved"
|
|
241
285
|
obs incident delete <id> -y
|
|
286
|
+
|
|
287
|
+
# Comment on an incident
|
|
288
|
+
obs incident comment <id> --message "Investigating upstream provider issue"
|
|
289
|
+
|
|
290
|
+
# Assign / unassign
|
|
291
|
+
obs incident assign <id> --user <user-id>
|
|
292
|
+
obs incident unassign <id>
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### API Keys
|
|
296
|
+
```bash
|
|
297
|
+
obs api-key list
|
|
298
|
+
obs api-key create --name "CI Bot"
|
|
299
|
+
obs api-key revoke <id>
|
|
300
|
+
obs api-key toggle <id>
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Teams
|
|
304
|
+
```bash
|
|
305
|
+
obs team list
|
|
306
|
+
obs team members <team-id>
|
|
307
|
+
obs team invite <team-id> # regenerate invite code
|
|
308
|
+
obs team remove-member <team-id> <user-id>
|
|
309
|
+
obs team update-role <team-id> <user-id> --role member
|
|
242
310
|
```
|
|
243
311
|
|
|
244
312
|
---
|
|
@@ -302,6 +370,12 @@ obs suite schedule <id> --cron "*/30 * * * *"
|
|
|
302
370
|
obs suite secrets <id> --var USERNAME=admin --var PASSWORD=secret
|
|
303
371
|
obs suite secrets <id> --var-file .env.test
|
|
304
372
|
|
|
373
|
+
# Toggle public visibility of a suite
|
|
374
|
+
obs suite toggle-public <id>
|
|
375
|
+
|
|
376
|
+
# Trigger self-heal on a suite's failing tests
|
|
377
|
+
obs suite heal <id>
|
|
378
|
+
|
|
305
379
|
# Delete a suite
|
|
306
380
|
obs suite delete <id>
|
|
307
381
|
```
|
|
@@ -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":"apply.d.ts","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AA+HnE,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,cAAc,EAC7B,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,GAC5B,OAAO,CAkyBT"}
|