@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.
Files changed (179) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +137 -0
  3. package/dist/client.d.ts +6 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +137 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/commands/account.d.ts +3 -0
  8. package/dist/commands/account.d.ts.map +1 -0
  9. package/dist/commands/account.js +133 -0
  10. package/dist/commands/account.js.map +1 -0
  11. package/dist/commands/admin.d.ts +3 -0
  12. package/dist/commands/admin.d.ts.map +1 -0
  13. package/dist/commands/admin.js +233 -0
  14. package/dist/commands/admin.js.map +1 -0
  15. package/dist/commands/analytics.d.ts +3 -0
  16. package/dist/commands/analytics.d.ts.map +1 -0
  17. package/dist/commands/analytics.js +122 -0
  18. package/dist/commands/analytics.js.map +1 -0
  19. package/dist/commands/api-keys.d.ts +3 -0
  20. package/dist/commands/api-keys.d.ts.map +1 -0
  21. package/dist/commands/api-keys.js +240 -0
  22. package/dist/commands/api-keys.js.map +1 -0
  23. package/dist/commands/auth.d.ts +3 -0
  24. package/dist/commands/auth.d.ts.map +1 -0
  25. package/dist/commands/auth.js +384 -0
  26. package/dist/commands/auth.js.map +1 -0
  27. package/dist/commands/babels.d.ts +3 -0
  28. package/dist/commands/babels.d.ts.map +1 -0
  29. package/dist/commands/babels.js +119 -0
  30. package/dist/commands/babels.js.map +1 -0
  31. package/dist/commands/billing.d.ts +3 -0
  32. package/dist/commands/billing.d.ts.map +1 -0
  33. package/dist/commands/billing.js +125 -0
  34. package/dist/commands/billing.js.map +1 -0
  35. package/dist/commands/checkout.d.ts +3 -0
  36. package/dist/commands/checkout.d.ts.map +1 -0
  37. package/dist/commands/checkout.js +64 -0
  38. package/dist/commands/checkout.js.map +1 -0
  39. package/dist/commands/comments.d.ts +3 -0
  40. package/dist/commands/comments.d.ts.map +1 -0
  41. package/dist/commands/comments.js +219 -0
  42. package/dist/commands/comments.js.map +1 -0
  43. package/dist/commands/glossary.d.ts +3 -0
  44. package/dist/commands/glossary.d.ts.map +1 -0
  45. package/dist/commands/glossary.js +189 -0
  46. package/dist/commands/glossary.js.map +1 -0
  47. package/dist/commands/init.d.ts +3 -0
  48. package/dist/commands/init.d.ts.map +1 -0
  49. package/dist/commands/init.js +210 -0
  50. package/dist/commands/init.js.map +1 -0
  51. package/dist/commands/invitations.d.ts +3 -0
  52. package/dist/commands/invitations.d.ts.map +1 -0
  53. package/dist/commands/invitations.js +177 -0
  54. package/dist/commands/invitations.js.map +1 -0
  55. package/dist/commands/languages.d.ts +3 -0
  56. package/dist/commands/languages.d.ts.map +1 -0
  57. package/dist/commands/languages.js +128 -0
  58. package/dist/commands/languages.js.map +1 -0
  59. package/dist/commands/members.d.ts +3 -0
  60. package/dist/commands/members.d.ts.map +1 -0
  61. package/dist/commands/members.js +156 -0
  62. package/dist/commands/members.js.map +1 -0
  63. package/dist/commands/notifications.d.ts +3 -0
  64. package/dist/commands/notifications.d.ts.map +1 -0
  65. package/dist/commands/notifications.js +114 -0
  66. package/dist/commands/notifications.js.map +1 -0
  67. package/dist/commands/pr.d.ts +3 -0
  68. package/dist/commands/pr.d.ts.map +1 -0
  69. package/dist/commands/pr.js +111 -0
  70. package/dist/commands/pr.js.map +1 -0
  71. package/dist/commands/privacy.d.ts +3 -0
  72. package/dist/commands/privacy.d.ts.map +1 -0
  73. package/dist/commands/privacy.js +62 -0
  74. package/dist/commands/privacy.js.map +1 -0
  75. package/dist/commands/projects.d.ts +3 -0
  76. package/dist/commands/projects.d.ts.map +1 -0
  77. package/dist/commands/projects.js +444 -0
  78. package/dist/commands/projects.js.map +1 -0
  79. package/dist/commands/roles.d.ts +3 -0
  80. package/dist/commands/roles.d.ts.map +1 -0
  81. package/dist/commands/roles.js +78 -0
  82. package/dist/commands/roles.js.map +1 -0
  83. package/dist/commands/run.d.ts +3 -0
  84. package/dist/commands/run.d.ts.map +1 -0
  85. package/dist/commands/run.js +345 -0
  86. package/dist/commands/run.js.map +1 -0
  87. package/dist/commands/status.d.ts +3 -0
  88. package/dist/commands/status.d.ts.map +1 -0
  89. package/dist/commands/status.js +126 -0
  90. package/dist/commands/status.js.map +1 -0
  91. package/dist/commands/subscriptions.d.ts +3 -0
  92. package/dist/commands/subscriptions.d.ts.map +1 -0
  93. package/dist/commands/subscriptions.js +141 -0
  94. package/dist/commands/subscriptions.js.map +1 -0
  95. package/dist/commands/tm.d.ts +3 -0
  96. package/dist/commands/tm.d.ts.map +1 -0
  97. package/dist/commands/tm.js +114 -0
  98. package/dist/commands/tm.js.map +1 -0
  99. package/dist/commands/users.d.ts +3 -0
  100. package/dist/commands/users.d.ts.map +1 -0
  101. package/dist/commands/users.js +122 -0
  102. package/dist/commands/users.js.map +1 -0
  103. package/dist/completion.d.ts +4 -0
  104. package/dist/completion.d.ts.map +1 -0
  105. package/dist/completion.js +135 -0
  106. package/dist/completion.js.map +1 -0
  107. package/dist/config.d.ts +25 -0
  108. package/dist/config.d.ts.map +1 -0
  109. package/dist/config.js +47 -0
  110. package/dist/config.js.map +1 -0
  111. package/dist/exit-codes.d.ts +11 -0
  112. package/dist/exit-codes.d.ts.map +1 -0
  113. package/dist/exit-codes.js +11 -0
  114. package/dist/exit-codes.js.map +1 -0
  115. package/dist/formatters.d.ts +3 -0
  116. package/dist/formatters.d.ts.map +1 -0
  117. package/dist/formatters.js +5 -0
  118. package/dist/formatters.js.map +1 -0
  119. package/dist/global-options.d.ts +9 -0
  120. package/dist/global-options.d.ts.map +1 -0
  121. package/dist/global-options.js +15 -0
  122. package/dist/global-options.js.map +1 -0
  123. package/dist/index.d.ts +3 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +5 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/oauth.d.ts +13 -0
  128. package/dist/oauth.d.ts.map +1 -0
  129. package/dist/oauth.js +187 -0
  130. package/dist/oauth.js.map +1 -0
  131. package/dist/program.d.ts +7 -0
  132. package/dist/program.d.ts.map +1 -0
  133. package/dist/program.js +165 -0
  134. package/dist/program.js.map +1 -0
  135. package/dist/tui/brand.d.ts +3 -0
  136. package/dist/tui/brand.d.ts.map +1 -0
  137. package/dist/tui/brand.js +14 -0
  138. package/dist/tui/brand.js.map +1 -0
  139. package/dist/tui/display.d.ts +19 -0
  140. package/dist/tui/display.d.ts.map +1 -0
  141. package/dist/tui/display.js +57 -0
  142. package/dist/tui/display.js.map +1 -0
  143. package/dist/tui/help.d.ts +27 -0
  144. package/dist/tui/help.d.ts.map +1 -0
  145. package/dist/tui/help.js +84 -0
  146. package/dist/tui/help.js.map +1 -0
  147. package/dist/tui/home.d.ts +15 -0
  148. package/dist/tui/home.d.ts.map +1 -0
  149. package/dist/tui/home.js +130 -0
  150. package/dist/tui/home.js.map +1 -0
  151. package/dist/tui/index.d.ts +11 -0
  152. package/dist/tui/index.d.ts.map +1 -0
  153. package/dist/tui/index.js +11 -0
  154. package/dist/tui/index.js.map +1 -0
  155. package/dist/tui/prompt.d.ts +15 -0
  156. package/dist/tui/prompt.d.ts.map +1 -0
  157. package/dist/tui/prompt.js +45 -0
  158. package/dist/tui/prompt.js.map +1 -0
  159. package/dist/tui/repl.d.ts +23 -0
  160. package/dist/tui/repl.d.ts.map +1 -0
  161. package/dist/tui/repl.js +265 -0
  162. package/dist/tui/repl.js.map +1 -0
  163. package/dist/tui/table.d.ts +16 -0
  164. package/dist/tui/table.d.ts.map +1 -0
  165. package/dist/tui/table.js +68 -0
  166. package/dist/tui/table.js.map +1 -0
  167. package/dist/tui/task-list.d.ts +20 -0
  168. package/dist/tui/task-list.d.ts.map +1 -0
  169. package/dist/tui/task-list.js +31 -0
  170. package/dist/tui/task-list.js.map +1 -0
  171. package/dist/tui/theme.d.ts +26 -0
  172. package/dist/tui/theme.d.ts.map +1 -0
  173. package/dist/tui/theme.js +54 -0
  174. package/dist/tui/theme.js.map +1 -0
  175. package/dist/update-notifier.d.ts +2 -0
  176. package/dist/update-notifier.d.ts.map +1 -0
  177. package/dist/update-notifier.js +28 -0
  178. package/dist/update-notifier.js.map +1 -0
  179. package/package.json +61 -0
package/LICENSE ADDED
@@ -0,0 +1,6 @@
1
+ Copyright (c) 2026 Babelize
2
+
3
+ All Rights Reserved.
4
+
5
+ This software and its source code are proprietary and confidential.
6
+ Unauthorized copying, modification, distribution, or use is prohibited.
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)
@@ -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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAccountCommands(program: Command): void;
3
+ //# sourceMappingURL=account.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAdminCommands(program: Command): void;
3
+ //# sourceMappingURL=admin.d.ts.map
@@ -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"}