@babelize/cli 1.0.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/LICENSE +6 -0
- package/README.md +137 -0
- package/dist/client.d.ts +6 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +137 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/account.d.ts +3 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +133 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/admin.d.ts +3 -0
- package/dist/commands/admin.d.ts.map +1 -0
- package/dist/commands/admin.js +233 -0
- package/dist/commands/admin.js.map +1 -0
- package/dist/commands/analytics.d.ts +3 -0
- package/dist/commands/analytics.d.ts.map +1 -0
- package/dist/commands/analytics.js +122 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/api-keys.d.ts +3 -0
- package/dist/commands/api-keys.d.ts.map +1 -0
- package/dist/commands/api-keys.js +240 -0
- package/dist/commands/api-keys.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +384 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/babels.d.ts +3 -0
- package/dist/commands/babels.d.ts.map +1 -0
- package/dist/commands/babels.js +119 -0
- package/dist/commands/babels.js.map +1 -0
- package/dist/commands/billing.d.ts +3 -0
- package/dist/commands/billing.d.ts.map +1 -0
- package/dist/commands/billing.js +125 -0
- package/dist/commands/billing.js.map +1 -0
- package/dist/commands/checkout.d.ts +3 -0
- package/dist/commands/checkout.d.ts.map +1 -0
- package/dist/commands/checkout.js +64 -0
- package/dist/commands/checkout.js.map +1 -0
- package/dist/commands/comments.d.ts +3 -0
- package/dist/commands/comments.d.ts.map +1 -0
- package/dist/commands/comments.js +219 -0
- package/dist/commands/comments.js.map +1 -0
- package/dist/commands/glossary.d.ts +3 -0
- package/dist/commands/glossary.d.ts.map +1 -0
- package/dist/commands/glossary.js +189 -0
- package/dist/commands/glossary.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +210 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/invitations.d.ts +3 -0
- package/dist/commands/invitations.d.ts.map +1 -0
- package/dist/commands/invitations.js +177 -0
- package/dist/commands/invitations.js.map +1 -0
- package/dist/commands/languages.d.ts +3 -0
- package/dist/commands/languages.d.ts.map +1 -0
- package/dist/commands/languages.js +128 -0
- package/dist/commands/languages.js.map +1 -0
- package/dist/commands/members.d.ts +3 -0
- package/dist/commands/members.d.ts.map +1 -0
- package/dist/commands/members.js +156 -0
- package/dist/commands/members.js.map +1 -0
- package/dist/commands/notifications.d.ts +3 -0
- package/dist/commands/notifications.d.ts.map +1 -0
- package/dist/commands/notifications.js +114 -0
- package/dist/commands/notifications.js.map +1 -0
- package/dist/commands/pr.d.ts +3 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +111 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/privacy.d.ts +3 -0
- package/dist/commands/privacy.d.ts.map +1 -0
- package/dist/commands/privacy.js +62 -0
- package/dist/commands/privacy.js.map +1 -0
- package/dist/commands/projects.d.ts +3 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +444 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/roles.d.ts +3 -0
- package/dist/commands/roles.d.ts.map +1 -0
- package/dist/commands/roles.js +78 -0
- package/dist/commands/roles.js.map +1 -0
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +345 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +126 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subscriptions.d.ts +3 -0
- package/dist/commands/subscriptions.d.ts.map +1 -0
- package/dist/commands/subscriptions.js +141 -0
- package/dist/commands/subscriptions.js.map +1 -0
- package/dist/commands/tm.d.ts +3 -0
- package/dist/commands/tm.d.ts.map +1 -0
- package/dist/commands/tm.js +114 -0
- package/dist/commands/tm.js.map +1 -0
- package/dist/commands/users.d.ts +3 -0
- package/dist/commands/users.d.ts.map +1 -0
- package/dist/commands/users.js +122 -0
- package/dist/commands/users.js.map +1 -0
- package/dist/completion.d.ts +4 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +135 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +47 -0
- package/dist/config.js.map +1 -0
- package/dist/exit-codes.d.ts +11 -0
- package/dist/exit-codes.d.ts.map +1 -0
- package/dist/exit-codes.js +11 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/formatters.d.ts +3 -0
- package/dist/formatters.d.ts.map +1 -0
- package/dist/formatters.js +5 -0
- package/dist/formatters.js.map +1 -0
- package/dist/global-options.d.ts +9 -0
- package/dist/global-options.d.ts.map +1 -0
- package/dist/global-options.js +15 -0
- package/dist/global-options.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +13 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +187 -0
- package/dist/oauth.js.map +1 -0
- package/dist/program.d.ts +7 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +165 -0
- package/dist/program.js.map +1 -0
- package/dist/tui/brand.d.ts +3 -0
- package/dist/tui/brand.d.ts.map +1 -0
- package/dist/tui/brand.js +14 -0
- package/dist/tui/brand.js.map +1 -0
- package/dist/tui/display.d.ts +19 -0
- package/dist/tui/display.d.ts.map +1 -0
- package/dist/tui/display.js +57 -0
- package/dist/tui/display.js.map +1 -0
- package/dist/tui/help.d.ts +27 -0
- package/dist/tui/help.d.ts.map +1 -0
- package/dist/tui/help.js +84 -0
- package/dist/tui/help.js.map +1 -0
- package/dist/tui/home.d.ts +15 -0
- package/dist/tui/home.d.ts.map +1 -0
- package/dist/tui/home.js +130 -0
- package/dist/tui/home.js.map +1 -0
- package/dist/tui/index.d.ts +11 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +11 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/prompt.d.ts +15 -0
- package/dist/tui/prompt.d.ts.map +1 -0
- package/dist/tui/prompt.js +45 -0
- package/dist/tui/prompt.js.map +1 -0
- package/dist/tui/repl.d.ts +23 -0
- package/dist/tui/repl.d.ts.map +1 -0
- package/dist/tui/repl.js +265 -0
- package/dist/tui/repl.js.map +1 -0
- package/dist/tui/table.d.ts +16 -0
- package/dist/tui/table.d.ts.map +1 -0
- package/dist/tui/table.js +68 -0
- package/dist/tui/table.js.map +1 -0
- package/dist/tui/task-list.d.ts +20 -0
- package/dist/tui/task-list.d.ts.map +1 -0
- package/dist/tui/task-list.js +31 -0
- package/dist/tui/task-list.js.map +1 -0
- package/dist/tui/theme.d.ts +26 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +54 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/update-notifier.d.ts +2 -0
- package/dist/update-notifier.d.ts.map +1 -0
- package/dist/update-notifier.js +28 -0
- package/dist/update-notifier.js.map +1 -0
- package/package.json +61 -0
package/LICENSE
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# @babelize/cli
|
|
2
|
+
|
|
3
|
+
**Babelize CLI** — AI-powered i18n platform for managing translations from your terminal.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @babelize/cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Log in to your Babelize account
|
|
15
|
+
babelize auth login
|
|
16
|
+
|
|
17
|
+
# Initialize a new project
|
|
18
|
+
babelize init
|
|
19
|
+
|
|
20
|
+
# Start a translation run
|
|
21
|
+
babelize run start
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Commands
|
|
25
|
+
|
|
26
|
+
| Command | Description |
|
|
27
|
+
|---------|-------------|
|
|
28
|
+
| `init` | Initialize a new Babelize project |
|
|
29
|
+
| `auth login` / `signup` / `logout` / `whoami` | Authentication management |
|
|
30
|
+
| `auth reset-password` | Send a password reset email |
|
|
31
|
+
| `auth provider-tokens` | Manage OAuth provider tokens (GitHub, etc.) |
|
|
32
|
+
| `status` | Check API health and your account status |
|
|
33
|
+
| `projects` | CRUD, sync, insights, metadata, download, brand-voice, archive |
|
|
34
|
+
| `run start` / `preview` / `status` / `analyze` | Translation pipeline engine |
|
|
35
|
+
| `babels` | View translation job history |
|
|
36
|
+
| `pr` | GitHub PR integration |
|
|
37
|
+
| `billing` | Plans, usage, invoices |
|
|
38
|
+
| `subscriptions` | List, cancel, reactivate subscriptions |
|
|
39
|
+
| `checkout` | Purchase a plan |
|
|
40
|
+
| `languages` | System and project-level language management |
|
|
41
|
+
| `members` | Team member management |
|
|
42
|
+
| `tm` | Translation memory (view, update, clear) |
|
|
43
|
+
| `glossary` | Translation glossary (list, add, update, delete, import, export) |
|
|
44
|
+
| `api-keys byok` | BYOK provider keys (OpenAI, Anthropic, Groq, etc.) |
|
|
45
|
+
| `api-keys babelize` | Babelize API keys (bblz_sk_ prefix for MCP/external access) |
|
|
46
|
+
| `comments` | Translation comments and discussions |
|
|
47
|
+
| `notifications` | Notification inbox |
|
|
48
|
+
| `analytics` | Usage history, activity logs, audit logs |
|
|
49
|
+
| `account` | MFA, sessions, account deletion |
|
|
50
|
+
| `privacy` | GDPR data export and erasure |
|
|
51
|
+
| `admin` | Platform administration (owner only) |
|
|
52
|
+
| `invitations` | Team invitations |
|
|
53
|
+
| `roles` | Role management |
|
|
54
|
+
| `users` | User listing |
|
|
55
|
+
|
|
56
|
+
Run `babelize <command> --help` for subcommand details.
|
|
57
|
+
|
|
58
|
+
## Shell Completion
|
|
59
|
+
|
|
60
|
+
Generate bash or zsh completion scripts:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
babelize completion bash > /usr/local/etc/bash_completion.d/babelize
|
|
64
|
+
babelize completion zsh > /usr/local/share/zsh/site-functions/_babelize
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The script dynamically reflects all registered commands at generation time.
|
|
68
|
+
|
|
69
|
+
## Configuration
|
|
70
|
+
|
|
71
|
+
Credentials and preferences are stored at:
|
|
72
|
+
- **macOS:** `~/Library/Preferences/babelize-nodejs/config.json`
|
|
73
|
+
- **Linux:** `~/.config/babelize-nodejs/config.json`
|
|
74
|
+
- **Windows:** `%APPDATA%/babelize-nodejs/config.json`
|
|
75
|
+
|
|
76
|
+
The CLI auto-detects the API URL:
|
|
77
|
+
- **Production:** `https://api.babelize.co/api`
|
|
78
|
+
- **Local dev:** `http://localhost:3001/api`
|
|
79
|
+
- **Override:** Set `BABELIZE_API_URL` env var or use `--api-url`
|
|
80
|
+
|
|
81
|
+
## Environment Variables
|
|
82
|
+
|
|
83
|
+
| Variable | Description |
|
|
84
|
+
|----------|-------------|
|
|
85
|
+
| `BABELIZE_API_URL` | Override API URL |
|
|
86
|
+
| `BABELIZE_TOKEN` | Auth token (alternative to `babelize auth login` or `--token`) |
|
|
87
|
+
| `NO_COLOR` | Disable colored output (any non-empty value) |
|
|
88
|
+
|
|
89
|
+
## Exit Codes
|
|
90
|
+
|
|
91
|
+
| Code | Meaning | When it happens |
|
|
92
|
+
|------|---------|-----------------|
|
|
93
|
+
| `0` | Success | Command completed, or user cancelled |
|
|
94
|
+
| `1` | Internal error | Unexpected failure (catch-all) |
|
|
95
|
+
| `2` | Usage error | Invalid arguments, missing required flags |
|
|
96
|
+
| `3` | Auth error | Not logged in, session expired, login failed |
|
|
97
|
+
| `4` | Config error | Missing or invalid configuration file |
|
|
98
|
+
| `5` | Network error | Rate limited, DNS failure, timeout |
|
|
99
|
+
| `6` | API error | Server returned 4xx/5xx |
|
|
100
|
+
|
|
101
|
+
Scripts can use these codes for conditional logic:
|
|
102
|
+
```bash
|
|
103
|
+
babelize run start --no-poll || exit_code=$?
|
|
104
|
+
if [ $exit_code -eq 3 ]; then
|
|
105
|
+
babelize auth login
|
|
106
|
+
fi
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## JSON Mode
|
|
110
|
+
|
|
111
|
+
Append `--json` to any command for machine-readable JSON output. All commands
|
|
112
|
+
return JSON when this flag is set.
|
|
113
|
+
|
|
114
|
+
## Update Notifications
|
|
115
|
+
|
|
116
|
+
The CLI checks npm registry for new versions once per session (non-blocking).
|
|
117
|
+
To update:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm update -g @babelize/cli
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Troubleshooting
|
|
124
|
+
|
|
125
|
+
| Problem | Solution |
|
|
126
|
+
|---------|----------|
|
|
127
|
+
| `Not authenticated` | Run `babelize auth login` |
|
|
128
|
+
| `EPERM` on install | Use `sudo npm install -g @babelize/cli` |
|
|
129
|
+
| Completion not working | Ensure the script is sourced: `source /usr/local/etc/bash_completion.d/babelize` |
|
|
130
|
+
| Rate limited | Wait 60 seconds and retry |
|
|
131
|
+
| `BABELIZE_API_URL` not honored | Ensure the env var is set before running the command |
|
|
132
|
+
|
|
133
|
+
## Links
|
|
134
|
+
|
|
135
|
+
- [Website](https://babelize.co)
|
|
136
|
+
- [Docs](https://docs.babelize.co)
|
|
137
|
+
- [GitHub](https://github.com/babelize/babelize-dashboard)
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
export { setGlobalOptions, isJsonMode } from './global-options.js';
|
|
3
|
+
export declare const CLI_VERSION: string;
|
|
4
|
+
export declare function getClient(): AxiosInstance;
|
|
5
|
+
export declare function handleApiError(error: unknown): never;
|
|
6
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAkC,MAAM,OAAO,CAAC;AAO7E,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEnE,eAAO,MAAM,WAAW,QAAc,CAAC;AAoGvC,wBAAgB,SAAS,IAAI,aAAa,CAEzC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CA6BpD"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { config } from './config.js';
|
|
4
|
+
import { globalOptions } from './global-options.js';
|
|
5
|
+
import { ExitCode } from './exit-codes.js';
|
|
6
|
+
import pkg from '../package.json' with { type: 'json' };
|
|
7
|
+
export { setGlobalOptions, isJsonMode } from './global-options.js';
|
|
8
|
+
export const CLI_VERSION = pkg.version;
|
|
9
|
+
function getBaseUrl() {
|
|
10
|
+
return globalOptions.apiUrl ?? config.getApiUrl();
|
|
11
|
+
}
|
|
12
|
+
function getToken() {
|
|
13
|
+
if (globalOptions.token)
|
|
14
|
+
return globalOptions.token;
|
|
15
|
+
if (process.env.BABELIZE_TOKEN)
|
|
16
|
+
return process.env.BABELIZE_TOKEN;
|
|
17
|
+
const creds = config.getCredentials();
|
|
18
|
+
return creds?.accessToken ?? null;
|
|
19
|
+
}
|
|
20
|
+
function createAxiosInstance() {
|
|
21
|
+
const instance = axios.create({
|
|
22
|
+
baseURL: getBaseUrl(),
|
|
23
|
+
timeout: 30_000,
|
|
24
|
+
headers: {
|
|
25
|
+
'Content-Type': 'application/json',
|
|
26
|
+
'User-Agent': `babelize-cli/${CLI_VERSION}`,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
// Request interceptor — attach token
|
|
30
|
+
instance.interceptors.request.use((req) => {
|
|
31
|
+
const token = getToken();
|
|
32
|
+
if (token) {
|
|
33
|
+
req.headers['Authorization'] = `Bearer ${token}`;
|
|
34
|
+
}
|
|
35
|
+
if (globalOptions.verbose) {
|
|
36
|
+
console.error(chalk.dim(`→ ${req.method?.toUpperCase()} ${req.baseURL}${req.url}`));
|
|
37
|
+
}
|
|
38
|
+
return req;
|
|
39
|
+
});
|
|
40
|
+
// Response interceptor — unwrap envelope + handle 401 with refresh
|
|
41
|
+
instance.interceptors.response.use((res) => {
|
|
42
|
+
if (globalOptions.verbose) {
|
|
43
|
+
console.error(chalk.dim(`← ${res.status} ${res.config.url}`));
|
|
44
|
+
}
|
|
45
|
+
// Unwrap paginated { data: [...], pagination: {...} } or { data: [...] } envelopes
|
|
46
|
+
if (res.data && typeof res.data === 'object' && 'data' in res.data) {
|
|
47
|
+
const inner = res.data.data;
|
|
48
|
+
// If inner is an array, or is an object with pagination alongside, unwrap
|
|
49
|
+
if (Array.isArray(inner) || (inner && 'pagination' in res.data)) {
|
|
50
|
+
res.data = inner;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return res;
|
|
54
|
+
}, async (error) => {
|
|
55
|
+
const originalRequest = error.config;
|
|
56
|
+
const url = originalRequest.url || '';
|
|
57
|
+
const isAuthRoute = url.includes('/auth/login') || url.includes('/auth/signup') || url.includes('/auth/refresh');
|
|
58
|
+
if (error.response?.status === 401 && !originalRequest._retry && !isAuthRoute) {
|
|
59
|
+
originalRequest._retry = true;
|
|
60
|
+
const creds = config.getCredentials();
|
|
61
|
+
if (creds?.refreshToken) {
|
|
62
|
+
try {
|
|
63
|
+
const refreshRes = await axios.post(`${getBaseUrl()}/auth/refresh`, {}, {
|
|
64
|
+
timeout: 30_000,
|
|
65
|
+
headers: {
|
|
66
|
+
Cookie: `babelize_refresh_token=${creds.refreshToken}`,
|
|
67
|
+
'Content-Type': 'application/json',
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
const newToken = refreshRes.data?.access_token ?? refreshRes.data?.session?.access_token;
|
|
71
|
+
if (newToken) {
|
|
72
|
+
config.setCredentials({ ...creds, accessToken: newToken });
|
|
73
|
+
originalRequest.headers = {
|
|
74
|
+
...originalRequest.headers,
|
|
75
|
+
Authorization: `Bearer ${newToken}`,
|
|
76
|
+
};
|
|
77
|
+
return instance(originalRequest);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
config.clearCredentials();
|
|
82
|
+
console.error(chalk.red('\n⚠ Session expired.'));
|
|
83
|
+
console.error(chalk.dim(' Run: babelize auth login'));
|
|
84
|
+
console.error(chalk.dim(' Then retry your previous command.'));
|
|
85
|
+
process.exit(ExitCode.AUTH);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.error(chalk.red('\n⚠ Not authenticated.'));
|
|
90
|
+
console.error(chalk.dim(' Run: babelize auth login'));
|
|
91
|
+
process.exit(ExitCode.AUTH);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return Promise.reject(error);
|
|
95
|
+
});
|
|
96
|
+
return instance;
|
|
97
|
+
}
|
|
98
|
+
export function getClient() {
|
|
99
|
+
return createAxiosInstance();
|
|
100
|
+
}
|
|
101
|
+
export function handleApiError(error) {
|
|
102
|
+
if (axios.isAxiosError(error)) {
|
|
103
|
+
const status = error.response?.status;
|
|
104
|
+
const data = error.response?.data;
|
|
105
|
+
const message = data?.error ?? data?.message ?? error.message;
|
|
106
|
+
if (status === 401) {
|
|
107
|
+
console.error(chalk.red('✗ Not authenticated.'), 'Run:', chalk.cyan('babelize login'));
|
|
108
|
+
process.exit(ExitCode.AUTH);
|
|
109
|
+
}
|
|
110
|
+
else if (status === 403) {
|
|
111
|
+
console.error(chalk.red('✗ Forbidden:'), message);
|
|
112
|
+
}
|
|
113
|
+
else if (status === 404) {
|
|
114
|
+
console.error(chalk.red('✗ Not found:'), message);
|
|
115
|
+
}
|
|
116
|
+
else if (status === 429) {
|
|
117
|
+
console.error(chalk.red('✗ Rate limited.'), 'Please wait and try again.');
|
|
118
|
+
process.exit(ExitCode.NETWORK);
|
|
119
|
+
}
|
|
120
|
+
else if (status && status >= 500) {
|
|
121
|
+
console.error(chalk.red(`✗ Server error (${status}):`), message);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.error(chalk.red('✗ API error:'), message);
|
|
125
|
+
}
|
|
126
|
+
process.exit(ExitCode.API_ERROR);
|
|
127
|
+
}
|
|
128
|
+
else if (error instanceof Error) {
|
|
129
|
+
console.error(chalk.red('✗ Error:'), error.message);
|
|
130
|
+
process.exit(ExitCode.INTERNAL);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.error(chalk.red('✗ Unknown error occurred.'));
|
|
134
|
+
process.exit(ExitCode.INTERNAL);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwG9D"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
import { getClient, handleApiError } from '../client.js';
|
|
3
|
+
import { isJsonMode, printJson } from '../formatters.js';
|
|
4
|
+
import { table, keyValue } from '../tui/table.js';
|
|
5
|
+
import { section } from '../tui/display.js';
|
|
6
|
+
import { renderCommandHelp } from '../tui/help.js';
|
|
7
|
+
import { ExitCode } from '../exit-codes.js';
|
|
8
|
+
export function registerAccountCommands(program) {
|
|
9
|
+
const account = program
|
|
10
|
+
.command('account')
|
|
11
|
+
.description('Account settings, MFA, and session management');
|
|
12
|
+
account
|
|
13
|
+
.command('mfa-status')
|
|
14
|
+
.description('Show MFA (multi-factor authentication) status')
|
|
15
|
+
.action(async () => {
|
|
16
|
+
const s = clack.spinner();
|
|
17
|
+
s.start('Checking MFA status…');
|
|
18
|
+
try {
|
|
19
|
+
const client = getClient();
|
|
20
|
+
const res = await client.get('/account/mfa-status');
|
|
21
|
+
s.stop();
|
|
22
|
+
if (isJsonMode()) {
|
|
23
|
+
printJson(res.data);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
keyValue(res.data ?? {}, 'MFA Status');
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
s.stop();
|
|
30
|
+
handleApiError(err);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
account
|
|
34
|
+
.command('mfa-enable')
|
|
35
|
+
.description('Enable MFA on your account')
|
|
36
|
+
.action(async () => {
|
|
37
|
+
const s = clack.spinner();
|
|
38
|
+
s.start('Enabling MFA…');
|
|
39
|
+
try {
|
|
40
|
+
const client = getClient();
|
|
41
|
+
const res = await client.post('/account/mfa/enable');
|
|
42
|
+
s.stop();
|
|
43
|
+
if (isJsonMode()) {
|
|
44
|
+
printJson(res.data);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
keyValue(res.data ?? {}, 'MFA Setup');
|
|
48
|
+
if (res.data?.qr_code) {
|
|
49
|
+
console.log('\nScan the QR code above with your authenticator app.');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
s.stop();
|
|
54
|
+
handleApiError(err);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
account
|
|
58
|
+
.command('sessions')
|
|
59
|
+
.description('List active sessions for your account')
|
|
60
|
+
.action(async () => {
|
|
61
|
+
const s = clack.spinner();
|
|
62
|
+
s.start('Fetching sessions…');
|
|
63
|
+
try {
|
|
64
|
+
const client = getClient();
|
|
65
|
+
const res = await client.get('/account/sessions');
|
|
66
|
+
s.stop();
|
|
67
|
+
const items = res.data?.sessions ?? res.data ?? [];
|
|
68
|
+
const countRes = await client.get('/account/sessions/count').catch(() => null);
|
|
69
|
+
const count = countRes?.data?.count ?? items.length;
|
|
70
|
+
if (isJsonMode()) {
|
|
71
|
+
printJson(items);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
section(`Active Sessions (${count})`);
|
|
75
|
+
table(items, [
|
|
76
|
+
{ key: 'id', format: 'id', header: 'Session ID', width: 38 },
|
|
77
|
+
{ key: 'user_agent', header: 'Device/Browser', width: 40 },
|
|
78
|
+
{ key: 'ip', header: 'IP', width: 18 },
|
|
79
|
+
{ key: 'created_at', format: 'date', header: 'Started', width: 24 },
|
|
80
|
+
]);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
s.stop();
|
|
84
|
+
handleApiError(err);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
account
|
|
88
|
+
.command('revoke-session <sessionId>')
|
|
89
|
+
.description('Revoke (force-logout) a specific session')
|
|
90
|
+
.action(async (sessionId) => {
|
|
91
|
+
const s = clack.spinner();
|
|
92
|
+
s.start('Revoking session…');
|
|
93
|
+
try {
|
|
94
|
+
const client = getClient();
|
|
95
|
+
await client.post(`/account/sessions/${sessionId}/revoke`);
|
|
96
|
+
s.stop('Session revoked.');
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
s.stop();
|
|
100
|
+
handleApiError(err);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
account
|
|
104
|
+
.command('delete')
|
|
105
|
+
.description('Request account deletion (soft delete, recoverable for 30 days)')
|
|
106
|
+
.action(async () => {
|
|
107
|
+
const confirmed = await clack.confirm({
|
|
108
|
+
message: 'Delete your account? You will have 30 days to restore it.',
|
|
109
|
+
initialValue: false,
|
|
110
|
+
});
|
|
111
|
+
if (clack.isCancel(confirmed) || !confirmed)
|
|
112
|
+
process.exit(ExitCode.SUCCESS);
|
|
113
|
+
const s = clack.spinner();
|
|
114
|
+
s.start('Deleting account…');
|
|
115
|
+
try {
|
|
116
|
+
const client = getClient();
|
|
117
|
+
await client.post('/account/delete');
|
|
118
|
+
s.stop('Account deleted. You can restore it within 30 days by logging back in.');
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
s.stop();
|
|
122
|
+
handleApiError(err);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
account.helpInformation = () => renderCommandHelp('account', 'Account settings, MFA, and session management', [
|
|
126
|
+
{ name: 'mfa-status', desc: 'Show MFA (multi-factor authentication) status' },
|
|
127
|
+
{ name: 'mfa-enable', desc: 'Enable MFA on your account' },
|
|
128
|
+
{ name: 'sessions', desc: 'List active sessions for your account' },
|
|
129
|
+
{ name: 'revoke-session <sessionId>', desc: 'Revoke (force-logout) a specific session' },
|
|
130
|
+
{ name: 'delete', desc: 'Request account deletion (soft delete, recoverable for 30 days)' },
|
|
131
|
+
]);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,+CAA+C,CAAC,CAAC;IAEhE,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACpD,CAAC,CAAC,IAAI,EAAE,CAAC;YACT,IAAI,UAAU,EAAE,EAAE,CAAC;gBAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAClD,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACrD,CAAC,CAAC,IAAI,EAAE,CAAC;YACT,IAAI,UAAU,EAAE,EAAE,CAAC;gBAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAClD,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;YACtC,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAClD,CAAC,CAAC,IAAI,EAAE,CAAC;YACT,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAC/E,MAAM,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;YACpD,IAAI,UAAU,EAAE,EAAE,CAAC;gBAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC/C,OAAO,CAAC,oBAAoB,KAAK,GAAG,CAAC,CAAC;YACtC,KAAK,CAAC,KAAK,EAAE;gBACX,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC5D,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC1D,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gBACtC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;aACpE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,4BAA4B,CAAC;SACrC,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;QAClC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,SAAS,SAAS,CAAC,CAAC;YAC3D,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACpC,OAAO,EAAE,2DAA2D;YACpE,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAC/C,SAAS,EACT,+CAA+C,EAC/C;QACE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,+CAA+C,EAAE;QAC7E,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,4BAA4B,EAAE;QAC1D,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,uCAAuC,EAAE;QACnE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,0CAA0C,EAAE;QACxF,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iEAAiE,EAAE;KAC5F,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4L5D"}
|