@calltelemetry/cli 0.3.8 → 0.3.9
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 +13 -1
- package/dist/commands/secrets.d.ts.map +1 -1
- package/dist/commands/secrets.js +12 -0
- package/dist/commands/secrets.js.map +1 -1
- package/dist/commands/users.d.ts +3 -0
- package/dist/commands/users.d.ts.map +1 -0
- package/dist/commands/users.js +24 -0
- package/dist/commands/users.js.map +1 -0
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/secrets.d.ts +14 -0
- package/dist/lib/secrets.d.ts.map +1 -1
- package/dist/lib/secrets.js +32 -0
- package/dist/lib/secrets.js.map +1 -1
- package/dist/lib/users.d.ts +33 -0
- package/dist/lib/users.d.ts.map +1 -0
- package/dist/lib/users.js +67 -0
- package/dist/lib/users.js.map +1 -0
- package/dist/ui/components/AppShell.d.ts +3 -1
- package/dist/ui/components/AppShell.d.ts.map +1 -1
- package/dist/ui/components/AppShell.js +5 -2
- package/dist/ui/components/AppShell.js.map +1 -1
- package/dist/ui/components/MetricsFooter.d.ts +7 -0
- package/dist/ui/components/MetricsFooter.d.ts.map +1 -0
- package/dist/ui/components/MetricsFooter.js +36 -0
- package/dist/ui/components/MetricsFooter.js.map +1 -0
- package/dist/ui/components/index.d.ts +1 -0
- package/dist/ui/components/index.d.ts.map +1 -1
- package/dist/ui/components/index.js +1 -0
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/context/MetricsContext.d.ts +7 -0
- package/dist/ui/context/MetricsContext.d.ts.map +1 -0
- package/dist/ui/context/MetricsContext.js +13 -0
- package/dist/ui/context/MetricsContext.js.map +1 -0
- package/dist/ui/views/DiagDatabaseView.d.ts.map +1 -1
- package/dist/ui/views/DiagDatabaseView.js +36 -28
- package/dist/ui/views/DiagDatabaseView.js.map +1 -1
- package/dist/ui/views/DiagServiceView.d.ts.map +1 -1
- package/dist/ui/views/DiagServiceView.js +29 -18
- package/dist/ui/views/DiagServiceView.js.map +1 -1
- package/dist/ui/views/MainMenu.d.ts.map +1 -1
- package/dist/ui/views/MainMenu.js +19 -7
- package/dist/ui/views/MainMenu.js.map +1 -1
- package/dist/ui/views/SecretsResetPasswordView.d.ts +11 -0
- package/dist/ui/views/SecretsResetPasswordView.d.ts.map +1 -0
- package/dist/ui/views/SecretsResetPasswordView.js +205 -0
- package/dist/ui/views/SecretsResetPasswordView.js.map +1 -0
- package/dist/ui/views/UserResetPasswordView.d.ts +10 -0
- package/dist/ui/views/UserResetPasswordView.d.ts.map +1 -0
- package/dist/ui/views/UserResetPasswordView.js +220 -0
- package/dist/ui/views/UserResetPasswordView.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -83,10 +83,22 @@ ct migrate watch --interval 5 # Poll migration progress
|
|
|
83
83
|
ct secrets # Show secrets status (default)
|
|
84
84
|
ct secrets setup # Interactive configuration wizard
|
|
85
85
|
ct secrets reset # Revert to defaults
|
|
86
|
+
ct secrets reset-password # Reset service password (PostgreSQL/Minio)
|
|
87
|
+
ct secrets reset-password --service postgres --env-only
|
|
86
88
|
```
|
|
87
89
|
|
|
88
90
|
Manages credentials for PostgreSQL, NATS, and Minio. Values load with three-tier priority: defaults, `.env` file, then environment variables. The `.env` file is written with `0600` permissions and a Docker Compose overlay is generated automatically.
|
|
89
91
|
|
|
92
|
+
### Users
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
ct users reset-password # Reset a user account password (interactive)
|
|
96
|
+
ct users reset-password --org 1 # Pre-select organization
|
|
97
|
+
ct users reset-password --org 1 --user 1 # Pre-select org and user
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Queries the running application via RPC to list organizations and users, then resets the selected user's password. Useful for admin account recovery when locked out of the web UI.
|
|
101
|
+
|
|
90
102
|
### Config
|
|
91
103
|
|
|
92
104
|
```bash
|
|
@@ -152,7 +164,7 @@ ct offline list # List images in current compose file
|
|
|
152
164
|
|
|
153
165
|
When run without arguments on a TTY, `ct` launches an interactive menu built with [Ink](https://github.com/vadimdemedes/ink). Navigate with arrow keys, select with Enter, quit with `q`.
|
|
154
166
|
|
|
155
|
-
Categories: Status, Update, Database, Migrate, Secrets, Config, Docker, Diagnostics, JTAPI, Offline.
|
|
167
|
+
Categories: Status, Update, Services, Users, Database, Migrate, Secrets, Config, Docker, Diagnostics, JTAPI, Offline.
|
|
156
168
|
|
|
157
169
|
## Development
|
|
158
170
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QA4DtD"}
|
package/dist/commands/secrets.js
CHANGED
|
@@ -3,6 +3,7 @@ import { render } from 'ink';
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { SecretsStatusView } from '../ui/views/SecretsStatusView.js';
|
|
5
5
|
import { SecretsSetupView } from '../ui/views/SecretsSetupView.js';
|
|
6
|
+
import { SecretsResetPasswordView } from '../ui/views/SecretsResetPasswordView.js';
|
|
6
7
|
import { getEnvFilePath } from '../lib/secrets.js';
|
|
7
8
|
import { getPaths } from '../lib/paths.js';
|
|
8
9
|
import { removeSafe } from '../lib/fs.js';
|
|
@@ -46,6 +47,17 @@ export function registerSecretsCommand(program) {
|
|
|
46
47
|
out.ok('Secrets reset to defaults');
|
|
47
48
|
console.log("Restart services to apply: ct update");
|
|
48
49
|
});
|
|
50
|
+
secrets.command('reset-password')
|
|
51
|
+
.description('Reset a service password (PostgreSQL or Minio)')
|
|
52
|
+
.option('--env-only', 'Only update .env file (do not change service password)')
|
|
53
|
+
.option('--service <name>', 'Service to reset: postgres or minio')
|
|
54
|
+
.action(async (opts) => {
|
|
55
|
+
const { waitUntilExit } = render(React.createElement(SecretsResetPasswordView, {
|
|
56
|
+
envOnly: opts.envOnly,
|
|
57
|
+
service: opts.service,
|
|
58
|
+
}));
|
|
59
|
+
await waitUntilExit();
|
|
60
|
+
});
|
|
49
61
|
// Default: show status
|
|
50
62
|
secrets.action(async () => {
|
|
51
63
|
const { waitUntilExit } = render(React.createElement(SecretsStatusView));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,2CAA2C,CAAC,CAAC;IAE5D,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SACrB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SACrB,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,MAAM,EAAE,kBAAkB,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,IAAI,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAC3C,IAAI,aAAa;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,kBAAkB,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,CAAC,MAAM,OAAO,CAAC,gCAAgC,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,SAAS;YAAE,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,aAAa;YAAE,MAAM,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACxD,GAAG,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEL,uBAAuB;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAuBpD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { render } from 'ink';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { UserResetPasswordView } from '../ui/views/UserResetPasswordView.js';
|
|
4
|
+
export function registerUsersCommand(program) {
|
|
5
|
+
const users = program
|
|
6
|
+
.command('users')
|
|
7
|
+
.description('Manage application user accounts');
|
|
8
|
+
users.command('reset-password')
|
|
9
|
+
.description('Reset a user account password via RPC')
|
|
10
|
+
.option('--org <id>', 'Organization ID (skip org selection)')
|
|
11
|
+
.option('--user <id>', 'User ID (skip user selection)')
|
|
12
|
+
.action(async (opts) => {
|
|
13
|
+
const { waitUntilExit } = render(React.createElement(UserResetPasswordView, {
|
|
14
|
+
preOrgId: opts.org ? Number(opts.org) : undefined,
|
|
15
|
+
preUserId: opts.user ? Number(opts.user) : undefined,
|
|
16
|
+
}));
|
|
17
|
+
await waitUntilExit();
|
|
18
|
+
});
|
|
19
|
+
// Default: show help
|
|
20
|
+
users.action(() => {
|
|
21
|
+
users.outputHelp();
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,kCAAkC,CAAC,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;SAC5B,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,YAAY,EAAE,sCAAsC,CAAC;SAC5D,MAAM,CAAC,aAAa,EAAE,+BAA+B,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,IAAqC,EAAE,EAAE;QACtD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE;YACzC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;YACjD,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SACrD,CAAC,CACH,CAAC;QACF,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,qBAAqB;IACrB,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;QAChB,KAAK,CAAC,UAAU,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const VERSION = '0.3.
|
|
2
|
+
const VERSION = '0.3.9';
|
|
3
3
|
import { Command } from 'commander';
|
|
4
4
|
import { registerStatusCommand } from './commands/status.js';
|
|
5
5
|
import { registerUpdateCommand } from './commands/update.js';
|
|
@@ -11,6 +11,7 @@ import { registerOfflineCommand } from './commands/offline.js';
|
|
|
11
11
|
import { registerDiagCommand } from './commands/diag.js';
|
|
12
12
|
import { registerJtapiCommand } from './commands/jtapi.js';
|
|
13
13
|
import { registerSecretsCommand } from './commands/secrets.js';
|
|
14
|
+
import { registerUsersCommand } from './commands/users.js';
|
|
14
15
|
import { registerServicesCommand } from './commands/services.js';
|
|
15
16
|
import { registerSelfUpdateCommand } from './commands/self-update.js';
|
|
16
17
|
import { LOGO } from './lib/brand.js';
|
|
@@ -49,6 +50,7 @@ registerOfflineCommand(program);
|
|
|
49
50
|
registerDiagCommand(program);
|
|
50
51
|
registerJtapiCommand(program);
|
|
51
52
|
registerSecretsCommand(program);
|
|
53
|
+
registerUsersCommand(program);
|
|
52
54
|
registerServicesCommand(program);
|
|
53
55
|
registerSelfUpdateCommand(program);
|
|
54
56
|
// Interactive menu when `ct` is run with no arguments on a TTY
|
|
@@ -72,7 +74,8 @@ if (!hasCommand && process.stdout.isTTY) {
|
|
|
72
74
|
const React = await import('react');
|
|
73
75
|
const { MainMenu } = await import('./ui/views/MainMenu.js');
|
|
74
76
|
const { ErrorBoundary } = await import('./ui/components/ErrorBoundary.js');
|
|
75
|
-
const {
|
|
77
|
+
const { MetricsProvider } = await import('./ui/context/MetricsContext.js');
|
|
78
|
+
const { unmount, waitUntilExit } = render(React.createElement(ErrorBoundary, null, React.createElement(MetricsProvider, null, React.createElement(MainMenu, {
|
|
76
79
|
version: VERSION,
|
|
77
80
|
firstRun,
|
|
78
81
|
onCliCommand: (command) => {
|
|
@@ -83,7 +86,7 @@ if (!hasCommand && process.stdout.isTTY) {
|
|
|
83
86
|
onExit: () => {
|
|
84
87
|
unmount();
|
|
85
88
|
},
|
|
86
|
-
})));
|
|
89
|
+
}))));
|
|
87
90
|
await waitUntilExit();
|
|
88
91
|
});
|
|
89
92
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/secrets.d.ts
CHANGED
|
@@ -35,4 +35,18 @@ export declare function writeEnvFile(values: Record<string, string>): Promise<vo
|
|
|
35
35
|
* Generate docker-compose.secrets.yml overlay file
|
|
36
36
|
*/
|
|
37
37
|
export declare function writeSecretsOverlay(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Generate a cryptographically random password (URL-safe alphanumeric).
|
|
40
|
+
*/
|
|
41
|
+
export declare function generatePassword(length?: number): string;
|
|
42
|
+
/**
|
|
43
|
+
* Change the PostgreSQL password in the running database via ALTER USER.
|
|
44
|
+
* Connects using current credentials from getSecrets().
|
|
45
|
+
*/
|
|
46
|
+
export declare function alterDbPassword(newPassword: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Update Minio password in .env/overlay and restart the Minio container.
|
|
49
|
+
* Minio reads credentials from environment variables at startup.
|
|
50
|
+
*/
|
|
51
|
+
export declare function restartMinioWithPassword(newPassword: string): Promise<void>;
|
|
38
52
|
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,cAAc,EAAE,SAAS,EAOrC,CAAC;AAEF,eAAO,MAAM,aAAa,0CAA2C,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwBpE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4BnD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAMtC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmBzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,SAAK,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQxE;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjF"}
|
package/dist/lib/secrets.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { randomBytes } from 'node:crypto';
|
|
2
3
|
import { join } from 'node:path';
|
|
3
4
|
import { getPaths } from './paths.js';
|
|
4
5
|
import { writeFileSafe } from './fs.js';
|
|
6
|
+
import { composeExec, compose } from './compose.js';
|
|
5
7
|
export const SECRET_CATALOG = [
|
|
6
8
|
{ key: 'POSTGRES_PASSWORD', label: 'PostgreSQL Password', group: 'PostgreSQL', defaultValue: 'postgres', sensitive: true, required: true },
|
|
7
9
|
{ key: 'POSTGRES_USER', label: 'PostgreSQL User', group: 'PostgreSQL', defaultValue: 'calltelemetry', sensitive: false, required: true },
|
|
@@ -129,4 +131,34 @@ services:
|
|
|
129
131
|
`;
|
|
130
132
|
await writeFileSafe(secretsOverlayFile, content);
|
|
131
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Generate a cryptographically random password (URL-safe alphanumeric).
|
|
136
|
+
*/
|
|
137
|
+
export function generatePassword(length = 24) {
|
|
138
|
+
return randomBytes(length).toString('base64url').slice(0, length);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Change the PostgreSQL password in the running database via ALTER USER.
|
|
142
|
+
* Connects using current credentials from getSecrets().
|
|
143
|
+
*/
|
|
144
|
+
export async function alterDbPassword(newPassword) {
|
|
145
|
+
const secrets = getSecrets();
|
|
146
|
+
const user = secrets.POSTGRES_USER;
|
|
147
|
+
const escaped = newPassword.replace(/'/g, "''");
|
|
148
|
+
await composeExec('db', [
|
|
149
|
+
'psql', '-U', user, '-d', secrets.POSTGRES_DB,
|
|
150
|
+
'-c', `ALTER USER ${user} PASSWORD '${escaped}';`,
|
|
151
|
+
], { env: { PGPASSWORD: secrets.POSTGRES_PASSWORD }, pipe: true });
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Update Minio password in .env/overlay and restart the Minio container.
|
|
155
|
+
* Minio reads credentials from environment variables at startup.
|
|
156
|
+
*/
|
|
157
|
+
export async function restartMinioWithPassword(newPassword) {
|
|
158
|
+
const secrets = getSecrets();
|
|
159
|
+
secrets.MINIO_ROOT_PASSWORD = newPassword;
|
|
160
|
+
await writeEnvFile(secrets);
|
|
161
|
+
await writeSecretsOverlay();
|
|
162
|
+
await compose(['restart', 'minio']);
|
|
163
|
+
}
|
|
132
164
|
//# sourceMappingURL=secrets.js.map
|
package/dist/lib/secrets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/lib/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface OrgInfo {
|
|
2
|
+
id: number;
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
export interface UserInfo {
|
|
6
|
+
id: number;
|
|
7
|
+
email: string;
|
|
8
|
+
role: string;
|
|
9
|
+
roles: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Escape a string for safe embedding in an Elixir double-quoted string literal.
|
|
13
|
+
* Prevents interpolation injection (#{...}) and other escaping issues.
|
|
14
|
+
*/
|
|
15
|
+
export declare function escapeElixirString(s: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* List all organizations via RPC.
|
|
18
|
+
*/
|
|
19
|
+
export declare function listOrgs(): Promise<OrgInfo[]>;
|
|
20
|
+
/**
|
|
21
|
+
* List users in an organization via RPC.
|
|
22
|
+
*/
|
|
23
|
+
export declare function listOrgUsers(orgId: number): Promise<UserInfo[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Reset a user's password via RPC.
|
|
26
|
+
* The Elixir function handles Pow PBKDF2-SHA512 hashing internally.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resetUserPassword(userId: number, password: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Generate a cryptographically random password.
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateUserPassword(length?: number): string;
|
|
33
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/lib/users.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAYnD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAarE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,SAAK,GAAG,MAAM,CAExD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { rpc } from './rpc.js';
|
|
3
|
+
/**
|
|
4
|
+
* Escape a string for safe embedding in an Elixir double-quoted string literal.
|
|
5
|
+
* Prevents interpolation injection (#{...}) and other escaping issues.
|
|
6
|
+
*/
|
|
7
|
+
export function escapeElixirString(s) {
|
|
8
|
+
return s
|
|
9
|
+
.replace(/\0/g, '') // strip null bytes
|
|
10
|
+
.replace(/\\/g, '\\\\') // \ → \\
|
|
11
|
+
.replace(/"/g, '\\"') // " → \"
|
|
12
|
+
.replace(/#\{/g, '\\#{') // #{ → \#{ (Elixir interpolation)
|
|
13
|
+
.replace(/\n/g, '\\n') // newline → \n
|
|
14
|
+
.replace(/\r/g, '\\r'); // carriage return → \r
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* List all organizations via RPC.
|
|
18
|
+
*/
|
|
19
|
+
export async function listOrgs() {
|
|
20
|
+
const code = `
|
|
21
|
+
Cdrcisco.Identity.get_all_orgs()
|
|
22
|
+
|> Enum.map(fn o -> %{id: o.id, name: o.name} end)
|
|
23
|
+
|> Jason.encode!()
|
|
24
|
+
|> IO.puts()
|
|
25
|
+
`.trim();
|
|
26
|
+
const stdout = await rpc(code);
|
|
27
|
+
const trimmed = stdout.trim();
|
|
28
|
+
if (!trimmed || trimmed === '[]')
|
|
29
|
+
return [];
|
|
30
|
+
return JSON.parse(trimmed);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* List users in an organization via RPC.
|
|
34
|
+
*/
|
|
35
|
+
export async function listOrgUsers(orgId) {
|
|
36
|
+
const code = `
|
|
37
|
+
org = Cdrcisco.Identity.get_org(${orgId})
|
|
38
|
+
org.users
|
|
39
|
+
|> Enum.map(fn u -> %{id: u.id, email: u.email, role: u.role, roles: u.roles || []} end)
|
|
40
|
+
|> Jason.encode!()
|
|
41
|
+
|> IO.puts()
|
|
42
|
+
`.trim();
|
|
43
|
+
const stdout = await rpc(code);
|
|
44
|
+
const trimmed = stdout.trim();
|
|
45
|
+
if (!trimmed || trimmed === '[]')
|
|
46
|
+
return [];
|
|
47
|
+
return JSON.parse(trimmed);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Reset a user's password via RPC.
|
|
51
|
+
* The Elixir function handles Pow PBKDF2-SHA512 hashing internally.
|
|
52
|
+
*/
|
|
53
|
+
export async function resetUserPassword(userId, password) {
|
|
54
|
+
const escaped = escapeElixirString(password);
|
|
55
|
+
const code = `Cdrcisco.Identity.Users.reset_password(${userId}, "${escaped}") |> IO.inspect()`;
|
|
56
|
+
const stdout = await rpc(code);
|
|
57
|
+
if (!stdout.includes('{:ok,')) {
|
|
58
|
+
throw new Error(stdout.trim() || 'Password reset failed');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate a cryptographically random password.
|
|
63
|
+
*/
|
|
64
|
+
export function generateUserPassword(length = 24) {
|
|
65
|
+
return randomBytes(length).toString('base64url').slice(0, length);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/lib/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAc/B;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAS;IAC1C,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAQ,mBAAmB;SAC7C,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAG,SAAS;SAClC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAM,SAAS;SACnC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAG,oCAAoC;SAC9D,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAK,eAAe;SACzC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAI,uBAAuB;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,IAAI,GAAG;;;;;GAKZ,CAAC,IAAI,EAAE,CAAC;IAET,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAa;IAC9C,MAAM,IAAI,GAAG;sCACuB,KAAK;;;;;GAKxC,CAAC,IAAI,EAAE,CAAC;IAET,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAgB;IACtE,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,0CAA0C,MAAM,MAAM,OAAO,oBAAoB,CAAC;IAE/F,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,uBAAuB,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAM,GAAG,EAAE;IAC9C,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -9,7 +9,9 @@ interface AppShellProps {
|
|
|
9
9
|
breadcrumb?: string;
|
|
10
10
|
/** Current log level — shows a colored badge in the header when non-normal. */
|
|
11
11
|
logLevel?: LogLevel;
|
|
12
|
+
/** Suppress the metrics footer (e.g. when the view already shows full meter bars). */
|
|
13
|
+
hideMetrics?: boolean;
|
|
12
14
|
}
|
|
13
|
-
export declare function AppShell({ title, command, children, onBack, isComplete, breadcrumb, logLevel, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function AppShell({ title, command, children, onBack, isComplete, breadcrumb, logLevel, hideMetrics, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
|
|
14
16
|
export {};
|
|
15
17
|
//# sourceMappingURL=AppShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sFAAsF;IACtF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAA2B,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,GACZ,EAAE,aAAa,2CAuDf"}
|
|
@@ -2,8 +2,11 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
3
|
import { Box, Text, useApp, useInput } from 'ink';
|
|
4
4
|
import { LogLevelBadge } from './LogLevelBadge.js';
|
|
5
|
-
|
|
5
|
+
import { MetricsFooter } from './MetricsFooter.js';
|
|
6
|
+
import { useMetrics } from '../context/MetricsContext.js';
|
|
7
|
+
export function AppShell({ title = 'CallTelemetry CLI', command, children, onBack, isComplete, breadcrumb, logLevel, hideMetrics, }) {
|
|
6
8
|
const { exit } = useApp();
|
|
9
|
+
const metrics = useMetrics();
|
|
7
10
|
// Auto-exit when complete with no back handler (standalone mode)
|
|
8
11
|
useEffect(() => {
|
|
9
12
|
if (isComplete && !onBack) {
|
|
@@ -16,6 +19,6 @@ export function AppShell({ title = 'CallTelemetry CLI', command, children, onBac
|
|
|
16
19
|
onBack();
|
|
17
20
|
}
|
|
18
21
|
}, { isActive: Boolean(isComplete && onBack) });
|
|
19
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { borderStyle: "single", paddingX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: title }), breadcrumb && _jsxs(Text, { dimColor: true, children: [" ", breadcrumb] }), logLevel && logLevel !== 'normal' && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(LogLevelBadge, { level: logLevel })] }))] }), command && _jsx(Text, { dimColor: true, children: command })] }), _jsx(Box, { flexDirection: "column", paddingTop: 1, children: children }), isComplete && onBack && (_jsx(Box, { paddingTop: 1, children: _jsx(Text, { dimColor: true, children: "q Back" }) }))] }));
|
|
22
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { borderStyle: "single", paddingX: 1, justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: title }), breadcrumb && _jsxs(Text, { dimColor: true, children: [" ", breadcrumb] }), logLevel && logLevel !== 'normal' && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(LogLevelBadge, { level: logLevel })] }))] }), command && _jsx(Text, { dimColor: true, children: command })] }), _jsx(Box, { flexDirection: "column", paddingTop: 1, children: children }), isComplete && onBack && (_jsx(Box, { paddingTop: 1, children: _jsx(Text, { dimColor: true, children: "q Back" }) })), !hideMetrics && metrics && (_jsx(Box, { borderStyle: "single", borderColor: "gray", paddingX: 1, marginTop: 1, children: _jsx(MetricsFooter, { metrics: metrics }) }))] }));
|
|
20
23
|
}
|
|
21
24
|
//# sourceMappingURL=AppShell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/ui/components/AppShell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAgB1D,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,GAAG,mBAAmB,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,UAAU,EACV,UAAU,EACV,QAAQ,EACR,WAAW,GACG;IACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,iEAAiE;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAE/B,gEAAgE;IAChE,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACjD,MAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE,CAC5C,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IACF,WAAW,EAAC,QAAQ,EACpB,QAAQ,EAAE,CAAC,EACX,cAAc,EAAC,eAAe,aAE9B,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,YAAE,KAAK,GAAQ,EACrC,UAAU,IAAI,MAAC,IAAI,IAAC,QAAQ,yBAAI,UAAU,IAAQ,EAClD,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,CACpC,8BACE,KAAC,IAAI,oBAAS,EACd,KAAC,aAAa,IAAC,KAAK,EAAE,QAAQ,GAAI,IACjC,CACJ,IACG,EACL,OAAO,IAAI,KAAC,IAAI,IAAC,QAAQ,kBAAE,OAAO,GAAQ,IACvC,EACN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,YACtC,QAAQ,GACL,EACL,UAAU,IAAI,MAAM,IAAI,CACvB,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,QAAQ,6BAAc,GACxB,CACP,EACA,CAAC,WAAW,IAAI,OAAO,IAAI,CAC1B,KAAC,GAAG,IAAC,WAAW,EAAC,QAAQ,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,YACpE,KAAC,aAAa,IAAC,OAAO,EAAE,OAAO,GAAI,GAC/B,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SystemMetrics } from '../../lib/system.js';
|
|
2
|
+
interface MetricsFooterProps {
|
|
3
|
+
metrics: SystemMetrics;
|
|
4
|
+
}
|
|
5
|
+
export declare function MetricsFooter({ metrics }: MetricsFooterProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=MetricsFooter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricsFooter.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,aAAa,CAAC;CACxB;AAcD,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,2CA8D5D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useStdout } from 'ink';
|
|
3
|
+
function barColor(percent) {
|
|
4
|
+
if (percent >= 90)
|
|
5
|
+
return 'red';
|
|
6
|
+
if (percent >= 70)
|
|
7
|
+
return 'yellow';
|
|
8
|
+
return 'green';
|
|
9
|
+
}
|
|
10
|
+
function miniBar(percent, width) {
|
|
11
|
+
const clamped = Math.max(0, Math.min(100, percent));
|
|
12
|
+
const filledCount = Math.round((clamped / 100) * width);
|
|
13
|
+
return { filled: '█'.repeat(filledCount), empty: '░'.repeat(width - filledCount) };
|
|
14
|
+
}
|
|
15
|
+
export function MetricsFooter({ metrics }) {
|
|
16
|
+
const { stdout } = useStdout();
|
|
17
|
+
const width = stdout?.columns ?? 80;
|
|
18
|
+
const barWidth = 10;
|
|
19
|
+
const ramBar = miniBar(metrics.ram.percent, barWidth);
|
|
20
|
+
const diskBar = miniBar(metrics.disk.usedPercent, barWidth);
|
|
21
|
+
const cpuBar = miniBar(metrics.cpu.percent, barWidth);
|
|
22
|
+
const ramColor = barColor(metrics.ram.percent);
|
|
23
|
+
const diskColor = barColor(metrics.disk.usedPercent);
|
|
24
|
+
const cpuColor = barColor(metrics.cpu.percent);
|
|
25
|
+
// Very narrow: percentages only
|
|
26
|
+
if (width < 50) {
|
|
27
|
+
return (_jsxs(Box, { children: [_jsx(Text, { bold: true, children: "RAM " }), _jsxs(Text, { color: ramColor, bold: true, children: [metrics.ram.percent, "%"] }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "Disk " }), _jsxs(Text, { color: diskColor, bold: true, children: [metrics.disk.usedPercent, "%"] }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "CPU " }), _jsxs(Text, { color: cpuColor, bold: true, children: [metrics.cpu.percent, "%"] })] }));
|
|
28
|
+
}
|
|
29
|
+
// Narrow: bars + percentages, no detail labels
|
|
30
|
+
if (width < 70) {
|
|
31
|
+
return (_jsxs(Box, { children: [_jsx(Text, { bold: true, children: "RAM " }), _jsx(Text, { color: ramColor, children: ramBar.filled }), _jsx(Text, { dimColor: true, children: ramBar.empty }), _jsxs(Text, { color: ramColor, bold: true, children: [" ", metrics.ram.percent, "%"] }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "Disk " }), _jsx(Text, { color: diskColor, children: diskBar.filled }), _jsx(Text, { dimColor: true, children: diskBar.empty }), _jsxs(Text, { color: diskColor, bold: true, children: [" ", metrics.disk.usedPercent, "%"] }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "CPU " }), _jsx(Text, { color: cpuColor, children: cpuBar.filled }), _jsx(Text, { dimColor: true, children: cpuBar.empty }), _jsxs(Text, { color: cpuColor, bold: true, children: [" ", metrics.cpu.percent, "%"] })] }));
|
|
32
|
+
}
|
|
33
|
+
// Full: bars + percentages + detail labels
|
|
34
|
+
return (_jsxs(Box, { children: [_jsx(Text, { bold: true, children: "RAM " }), _jsx(Text, { color: ramColor, children: ramBar.filled }), _jsx(Text, { dimColor: true, children: ramBar.empty }), _jsxs(Text, { color: ramColor, bold: true, children: [" ", `${metrics.ram.percent}%`.padEnd(4)] }), _jsxs(Text, { dimColor: true, children: [metrics.ram.label, " "] }), _jsx(Text, { bold: true, children: "Disk " }), _jsx(Text, { color: diskColor, children: diskBar.filled }), _jsx(Text, { dimColor: true, children: diskBar.empty }), _jsxs(Text, { color: diskColor, bold: true, children: [" ", `${metrics.disk.usedPercent}%`.padEnd(4)] }), _jsxs(Text, { dimColor: true, children: [metrics.disk.label, " "] }), _jsx(Text, { bold: true, children: "CPU " }), _jsx(Text, { color: cpuColor, children: cpuBar.filled }), _jsx(Text, { dimColor: true, children: cpuBar.empty }), _jsxs(Text, { color: cpuColor, bold: true, children: [" ", `${metrics.cpu.percent}%`.padEnd(4)] }), _jsx(Text, { dimColor: true, children: metrics.cpu.label })] }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=MetricsFooter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricsFooter.js","sourceRoot":"","sources":["../../../src/ui/components/MetricsFooter.tsx"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export { SelectMenu } from './SelectMenu.js';
|
|
|
14
14
|
export type { MenuItem } from '../types.js';
|
|
15
15
|
export { TextInput } from './TextInput.js';
|
|
16
16
|
export { MeterBar } from './MeterBar.js';
|
|
17
|
+
export { MetricsFooter } from './MetricsFooter.js';
|
|
17
18
|
export { LogLevelBadge } from './LogLevelBadge.js';
|
|
18
19
|
export { ErrorBoundary } from './ErrorBoundary.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -13,6 +13,7 @@ export { Divider } from './Divider.js';
|
|
|
13
13
|
export { SelectMenu } from './SelectMenu.js';
|
|
14
14
|
export { TextInput } from './TextInput.js';
|
|
15
15
|
export { MeterBar } from './MeterBar.js';
|
|
16
|
+
export { MetricsFooter } from './MetricsFooter.js';
|
|
16
17
|
export { LogLevelBadge } from './LogLevelBadge.js';
|
|
17
18
|
export { ErrorBoundary } from './ErrorBoundary.js';
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SystemMetrics } from '../../lib/system.js';
|
|
3
|
+
export declare function MetricsProvider({ children }: {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function useMetrics(): SystemMetrics | undefined;
|
|
7
|
+
//# sourceMappingURL=MetricsContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricsContext.d.ts","sourceRoot":"","sources":["../../../src/ui/context/MetricsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQzD,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAO1E;AAED,wBAAgB,UAAU,IAAI,aAAa,GAAG,SAAS,CAEtD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
|
+
import { usePolling } from '../hooks/usePolling.js';
|
|
4
|
+
import { getSystemMetrics } from '../../lib/system.js';
|
|
5
|
+
const MetricsContext = createContext({ metrics: undefined });
|
|
6
|
+
export function MetricsProvider({ children }) {
|
|
7
|
+
const { data: metrics } = usePolling(getSystemMetrics, 10_000, true);
|
|
8
|
+
return (_jsx(MetricsContext.Provider, { value: { metrics }, children: children }));
|
|
9
|
+
}
|
|
10
|
+
export function useMetrics() {
|
|
11
|
+
return useContext(MetricsContext).metrics;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=MetricsContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricsContext.js","sourceRoot":"","sources":["../../../src/ui/context/MetricsContext.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAOvD,MAAM,cAAc,GAAG,aAAa,CAAsB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAElF,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAiC;IACzE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,UAAU,CAAgB,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACpF,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,YACxC,QAAQ,GACe,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiagDatabaseView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/DiagDatabaseView.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DiagDatabaseView.d.ts","sourceRoot":"","sources":["../../../src/ui/views/DiagDatabaseView.tsx"],"names":[],"mappings":"AAmBA,UAAU,qBAAqB;IAC7B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,qBAAqB,2CAwGjE"}
|