nexusapp-cli 3.0.0 → 3.1.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 (64) hide show
  1. package/dist/client.d.ts +6 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +63 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/commands/auth.d.ts +3 -0
  6. package/dist/commands/auth.d.ts.map +1 -0
  7. package/dist/commands/auth.js +178 -0
  8. package/dist/commands/auth.js.map +1 -0
  9. package/dist/commands/bucket.d.ts +3 -0
  10. package/dist/commands/bucket.d.ts.map +1 -0
  11. package/dist/commands/bucket.js +354 -0
  12. package/dist/commands/bucket.js.map +1 -0
  13. package/dist/commands/database.d.ts +3 -0
  14. package/dist/commands/database.d.ts.map +1 -0
  15. package/dist/commands/database.js +350 -0
  16. package/dist/commands/database.js.map +1 -0
  17. package/dist/commands/deploy.d.ts +3 -0
  18. package/dist/commands/deploy.d.ts.map +1 -0
  19. package/dist/commands/deploy.js +1009 -0
  20. package/dist/commands/deploy.js.map +1 -0
  21. package/dist/commands/domain.d.ts +3 -0
  22. package/dist/commands/domain.d.ts.map +1 -0
  23. package/dist/commands/domain.js +174 -0
  24. package/dist/commands/domain.js.map +1 -0
  25. package/dist/commands/exec.d.ts +3 -0
  26. package/dist/commands/exec.d.ts.map +1 -0
  27. package/dist/commands/exec.js +176 -0
  28. package/dist/commands/exec.js.map +1 -0
  29. package/dist/commands/managedDb.d.ts +3 -0
  30. package/dist/commands/managedDb.d.ts.map +1 -0
  31. package/dist/commands/managedDb.js +227 -0
  32. package/dist/commands/managedDb.js.map +1 -0
  33. package/dist/commands/member.d.ts +3 -0
  34. package/dist/commands/member.d.ts.map +1 -0
  35. package/dist/commands/member.js +175 -0
  36. package/dist/commands/member.js.map +1 -0
  37. package/dist/commands/project.d.ts +3 -0
  38. package/dist/commands/project.d.ts.map +1 -0
  39. package/dist/commands/project.js +92 -0
  40. package/dist/commands/project.js.map +1 -0
  41. package/dist/commands/secret.d.ts +3 -0
  42. package/dist/commands/secret.d.ts.map +1 -0
  43. package/dist/commands/secret.js +121 -0
  44. package/dist/commands/secret.js.map +1 -0
  45. package/dist/commands/token.d.ts +3 -0
  46. package/dist/commands/token.d.ts.map +1 -0
  47. package/dist/commands/token.js +179 -0
  48. package/dist/commands/token.js.map +1 -0
  49. package/dist/commands/volume.d.ts +3 -0
  50. package/dist/commands/volume.d.ts.map +1 -0
  51. package/dist/commands/volume.js +149 -0
  52. package/dist/commands/volume.js.map +1 -0
  53. package/dist/config.d.ts +10 -0
  54. package/dist/config.d.ts.map +1 -0
  55. package/dist/config.js +53 -0
  56. package/dist/config.js.map +1 -0
  57. package/dist/index.d.ts +3 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/output.d.ts +9 -0
  61. package/dist/output.d.ts.map +1 -0
  62. package/dist/output.js +71 -0
  63. package/dist/output.js.map +1 -0
  64. package/package.json +1 -1
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerSecret = registerSecret;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const client_js_1 = require("../client.js");
9
+ const output_js_1 = require("../output.js");
10
+ function registerSecret(program) {
11
+ const secret = program.command('secret').description('Secret management commands');
12
+ // list
13
+ secret
14
+ .command('list')
15
+ .description('List secrets')
16
+ .option('--environment <env>', 'Filter by environment')
17
+ .option('--json', 'Output raw JSON')
18
+ .action(async (opts) => {
19
+ try {
20
+ const params = {};
21
+ if (opts.environment)
22
+ params.environment = opts.environment;
23
+ const res = await client_js_1.client.get('/api/secrets', { params });
24
+ const raw = (0, client_js_1.unwrap)(res.data);
25
+ const secrets = Array.isArray(raw) ? raw : raw.secrets || [];
26
+ if (opts.json) {
27
+ (0, output_js_1.printJson)(secrets);
28
+ return;
29
+ }
30
+ if (!secrets.length) {
31
+ console.log('No secrets found.');
32
+ return;
33
+ }
34
+ (0, output_js_1.printTable)(['ID', 'NAME', 'ENVIRONMENT', 'CREATED'], secrets.map((s) => [
35
+ s.id,
36
+ s.name,
37
+ s.environment || '—',
38
+ s.createdAt ? (0, output_js_1.timeAgo)(s.createdAt) : '—',
39
+ ]));
40
+ }
41
+ catch (err) {
42
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
43
+ process.exit(1);
44
+ }
45
+ });
46
+ // create
47
+ secret
48
+ .command('create')
49
+ .description('Create a new secret')
50
+ .requiredOption('--name <name>', 'Secret name')
51
+ .requiredOption('--environment <env>', 'Target environment')
52
+ .option('--value <value>', 'Secret value (prompt if omitted)')
53
+ .action(async (opts) => {
54
+ let value = opts.value;
55
+ if (!value) {
56
+ const ans = await inquirer_1.default.prompt([
57
+ { type: 'password', name: 'value', message: 'Value:', mask: '•' },
58
+ ]);
59
+ value = ans.value;
60
+ }
61
+ try {
62
+ await client_js_1.client.post('/api/secrets', {
63
+ name: opts.name,
64
+ environment: opts.environment,
65
+ value,
66
+ });
67
+ (0, output_js_1.success)(`Secret ${opts.name} created (${opts.environment})`);
68
+ }
69
+ catch (err) {
70
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
71
+ process.exit(1);
72
+ }
73
+ });
74
+ // update
75
+ secret
76
+ .command('update <id>')
77
+ .description('Update a secret value')
78
+ .option('--value <value>', 'New secret value (prompt if omitted)')
79
+ .action(async (id, opts) => {
80
+ let value = opts.value;
81
+ if (!value) {
82
+ const ans = await inquirer_1.default.prompt([
83
+ { type: 'password', name: 'value', message: 'New value:', mask: '•' },
84
+ ]);
85
+ value = ans.value;
86
+ }
87
+ try {
88
+ await client_js_1.client.put(`/api/secrets/${id}`, { value });
89
+ (0, output_js_1.success)(`Secret ${id} updated.`);
90
+ }
91
+ catch (err) {
92
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
93
+ process.exit(1);
94
+ }
95
+ });
96
+ // delete
97
+ secret
98
+ .command('delete <id>')
99
+ .description('Delete a secret')
100
+ .option('--yes', 'Skip confirmation prompt')
101
+ .action(async (id, opts) => {
102
+ if (!opts.yes) {
103
+ const { confirm } = await inquirer_1.default.prompt([
104
+ { type: 'confirm', name: 'confirm', message: `Delete secret "${id}"?`, default: false },
105
+ ]);
106
+ if (!confirm) {
107
+ console.log('Cancelled.');
108
+ return;
109
+ }
110
+ }
111
+ try {
112
+ await client_js_1.client.delete(`/api/secrets/${id}`);
113
+ (0, output_js_1.success)(`Secret ${id} deleted.`);
114
+ }
115
+ catch (err) {
116
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
117
+ process.exit(1);
118
+ }
119
+ });
120
+ }
121
+ //# sourceMappingURL=secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.js","sourceRoot":"","sources":["../../src/commands/secret.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerToken(program: Command): void;
3
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/commands/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8IpD"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerToken = registerToken;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const client_js_1 = require("../client.js");
10
+ const output_js_1 = require("../output.js");
11
+ function parseDuration(str) {
12
+ const match = str.match(/^(\d+)(d|h|m)$/);
13
+ if (!match) {
14
+ throw new Error(`Invalid duration "${str}". Use format like: 90d, 4h, 30m`);
15
+ }
16
+ const value = parseInt(match[1], 10);
17
+ const unit = match[2];
18
+ const msMap = { d: 86400000, h: 3600000, m: 60000 };
19
+ return new Date(Date.now() + value * msMap[unit]);
20
+ }
21
+ function formatScopes(scopes) {
22
+ return scopes
23
+ .split(',')
24
+ .map((s) => s.trim())
25
+ .join(', ');
26
+ }
27
+ function tokenStatus(t) {
28
+ if (t.revokedAt)
29
+ return chalk_1.default.red('revoked');
30
+ if (t.expiresAt && new Date(t.expiresAt) < new Date())
31
+ return chalk_1.default.yellow('expired');
32
+ return chalk_1.default.green('active');
33
+ }
34
+ function registerToken(program) {
35
+ const token = program.command('token').description('Access token management commands');
36
+ // list
37
+ token
38
+ .command('list')
39
+ .description('List access tokens')
40
+ .option('--json', 'Output raw JSON')
41
+ .option('--show-last-used', 'Show last used column')
42
+ .option('--no-expiry', 'Show only tokens with no expiry date')
43
+ .option('--unused-since <days>', 'Show tokens unused for N or more days')
44
+ .action(async (opts) => {
45
+ try {
46
+ const res = await client_js_1.client.get('/api/tokens');
47
+ let tokens = (0, client_js_1.unwrap)(res.data);
48
+ if (!Array.isArray(tokens))
49
+ tokens = [];
50
+ if (opts.noExpiry) {
51
+ tokens = tokens.filter((t) => !t.expiresAt);
52
+ }
53
+ if (opts.unusedSince) {
54
+ const days = parseInt(opts.unusedSince, 10);
55
+ if (isNaN(days) || days < 0) {
56
+ (0, output_js_1.errorMsg)('--unused-since requires a positive integer (number of days)');
57
+ process.exit(1);
58
+ }
59
+ const cutoff = new Date(Date.now() - days * 86400000);
60
+ tokens = tokens.filter((t) => {
61
+ if (!t.lastUsedAt)
62
+ return true;
63
+ return new Date(t.lastUsedAt) < cutoff;
64
+ });
65
+ }
66
+ if (opts.json) {
67
+ (0, output_js_1.printJson)(tokens);
68
+ return;
69
+ }
70
+ if (!tokens.length) {
71
+ console.log('No tokens found.');
72
+ return;
73
+ }
74
+ const headers = ['ID', 'NAME', 'SCOPES', 'STATUS', 'EXPIRES', 'CREATED'];
75
+ if (opts.showLastUsed)
76
+ headers.push('LAST USED');
77
+ (0, output_js_1.printTable)(headers, tokens.map((t) => {
78
+ const row = [
79
+ t.id,
80
+ t.name,
81
+ formatScopes(t.scopes || ''),
82
+ tokenStatus(t),
83
+ t.expiresAt ? (0, output_js_1.timeAgo)(t.expiresAt) : '—',
84
+ t.createdAt ? (0, output_js_1.timeAgo)(t.createdAt) : '—',
85
+ ];
86
+ if (opts.showLastUsed) {
87
+ row.push(t.lastUsedAt ? (0, output_js_1.timeAgo)(t.lastUsedAt) : 'never');
88
+ }
89
+ return row;
90
+ }));
91
+ }
92
+ catch (err) {
93
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
94
+ process.exit(1);
95
+ }
96
+ });
97
+ // create
98
+ token
99
+ .command('create')
100
+ .description('Create a new access token')
101
+ .requiredOption('--name <name>', 'Token name')
102
+ .requiredOption('--scopes <scopes>', 'Comma-separated scopes (e.g. deploy:write,secrets:read)')
103
+ .option('--expires <duration>', 'Expiry duration (e.g. 90d, 4h, 30m)')
104
+ .option('--json', 'Output raw JSON')
105
+ .action(async (opts) => {
106
+ let expiresAt;
107
+ if (opts.expires) {
108
+ try {
109
+ expiresAt = parseDuration(opts.expires).toISOString();
110
+ }
111
+ catch (e) {
112
+ (0, output_js_1.errorMsg)(e.message);
113
+ process.exit(1);
114
+ }
115
+ }
116
+ try {
117
+ const res = await client_js_1.client.post('/api/tokens', {
118
+ name: opts.name,
119
+ scopes: opts.scopes,
120
+ ...(expiresAt ? { expiresAt } : {}),
121
+ });
122
+ const data = (0, client_js_1.unwrap)(res.data);
123
+ if (opts.json) {
124
+ (0, output_js_1.printJson)(data);
125
+ return;
126
+ }
127
+ console.log('');
128
+ console.log(chalk_1.default.bold('Token created'));
129
+ console.log('');
130
+ console.log(` ${chalk_1.default.dim('ID:')} ${data.id}`);
131
+ console.log(` ${chalk_1.default.dim('Name:')} ${data.name}`);
132
+ console.log(` ${chalk_1.default.dim('Scopes:')} ${formatScopes(data.scopes)}`);
133
+ if (data.expiresAt) {
134
+ console.log(` ${chalk_1.default.dim('Expires:')} ${new Date(data.expiresAt).toLocaleDateString()}`);
135
+ }
136
+ console.log('');
137
+ console.log(` ${chalk_1.default.dim('Token value (shown once — copy it now):')}`);
138
+ console.log('');
139
+ console.log(` ${chalk_1.default.cyan(data.token)}`);
140
+ console.log('');
141
+ console.log(chalk_1.default.yellow(' This value will not be shown again.'));
142
+ console.log('');
143
+ }
144
+ catch (err) {
145
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
146
+ process.exit(1);
147
+ }
148
+ });
149
+ // revoke
150
+ token
151
+ .command('revoke <id>')
152
+ .description('Revoke an access token')
153
+ .option('--yes', 'Skip confirmation prompt')
154
+ .action(async (id, opts) => {
155
+ if (!opts.yes) {
156
+ const { confirm } = await inquirer_1.default.prompt([
157
+ {
158
+ type: 'confirm',
159
+ name: 'confirm',
160
+ message: `Revoke token "${id}"? This cannot be undone.`,
161
+ default: false,
162
+ },
163
+ ]);
164
+ if (!confirm) {
165
+ console.log('Cancelled.');
166
+ return;
167
+ }
168
+ }
169
+ try {
170
+ await client_js_1.client.post(`/api/tokens/${id}/revoke`, {});
171
+ (0, output_js_1.success)(`Token ${id} revoked.`);
172
+ }
173
+ catch (err) {
174
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
175
+ process.exit(1);
176
+ }
177
+ });
178
+ }
179
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/commands/token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerVolume(program: Command): void;
3
+ //# sourceMappingURL=volume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volume.d.ts","sourceRoot":"","sources":["../../src/commands/volume.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmGrD"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerVolume = registerVolume;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const client_js_1 = require("../client.js");
9
+ const output_js_1 = require("../output.js");
10
+ function formatBytes(bytes) {
11
+ const n = typeof bytes === 'bigint' ? Number(bytes) : bytes;
12
+ if (n < 1024)
13
+ return `${n} B`;
14
+ if (n < 1024 * 1024)
15
+ return `${(n / 1024).toFixed(1)} KB`;
16
+ if (n < 1024 * 1024 * 1024)
17
+ return `${(n / (1024 * 1024)).toFixed(1)} MB`;
18
+ return `${(n / (1024 * 1024 * 1024)).toFixed(2)} GB`;
19
+ }
20
+ function registerVolume(program) {
21
+ const vol = program
22
+ .command('volume')
23
+ .description('Persistent storage volumes (filesystem mounts attached to deployments)');
24
+ vol
25
+ .command('list')
26
+ .description('List volumes')
27
+ .option('--json', 'Output raw JSON')
28
+ .action(async (opts) => {
29
+ try {
30
+ const res = await client_js_1.client.get('/api/volumes');
31
+ const volumes = (0, client_js_1.unwrap)(res.data) || [];
32
+ if (opts.json) {
33
+ (0, output_js_1.printJson)(volumes);
34
+ return;
35
+ }
36
+ if (!volumes.length) {
37
+ console.log('No volumes found.');
38
+ return;
39
+ }
40
+ (0, output_js_1.printTable)(['ID', 'NAME', 'SIZE', 'STATUS', 'ATTACHED TO', 'CREATED'], volumes.map((v) => [
41
+ v.id,
42
+ v.displayName ? `${v.name} (${v.displayName})` : v.name,
43
+ formatBytes(v.sizeBytes),
44
+ v.status,
45
+ v.attachment ? `${v.attachment.deploymentName}:${v.attachment.mountPath}` : '—',
46
+ v.createdAt ? (0, output_js_1.timeAgo)(v.createdAt) : '—',
47
+ ]));
48
+ }
49
+ catch (err) {
50
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
51
+ process.exit(1);
52
+ }
53
+ });
54
+ vol
55
+ .command('create <name>')
56
+ .description('Create a new volume (org-scoped)')
57
+ .option('--display-name <name>', 'Friendly display name')
58
+ .option('--json', 'Output raw JSON')
59
+ .action(async (name, opts) => {
60
+ try {
61
+ const res = await client_js_1.client.post('/api/volumes', { name, displayName: opts.displayName });
62
+ const v = (0, client_js_1.unwrap)(res.data);
63
+ if (opts.json) {
64
+ (0, output_js_1.printJson)(v);
65
+ return;
66
+ }
67
+ (0, output_js_1.success)(`Volume created: ${v.id} (${v.name})`);
68
+ }
69
+ catch (err) {
70
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
71
+ process.exit(1);
72
+ }
73
+ });
74
+ vol
75
+ .command('delete <id>')
76
+ .description('Delete a volume (must be detached first)')
77
+ .option('--yes', 'Skip confirmation prompt')
78
+ .action(async (id, opts) => {
79
+ if (!opts.yes) {
80
+ const { confirm } = await inquirer_1.default.prompt([
81
+ { type: 'confirm', name: 'confirm', message: `Delete volume "${id}"? Data is destroyed.`, default: false },
82
+ ]);
83
+ if (!confirm) {
84
+ console.log('Cancelled.');
85
+ return;
86
+ }
87
+ }
88
+ try {
89
+ await client_js_1.client.delete(`/api/volumes/${id}`);
90
+ (0, output_js_1.success)(`Volume ${id} deleted.`);
91
+ }
92
+ catch (err) {
93
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
94
+ process.exit(1);
95
+ }
96
+ });
97
+ vol
98
+ .command('attach <id> <deployment-id>')
99
+ .description('Attach a volume to a deployment (requires redeploy to take effect)')
100
+ .option('--mount <path>', 'Mount path inside the container', '/data')
101
+ .action(async (id, deploymentId, opts) => {
102
+ try {
103
+ const res = await client_js_1.client.post(`/api/volumes/${id}/attach`, {
104
+ deploymentId,
105
+ mountPath: opts.mount,
106
+ });
107
+ const dv = (0, client_js_1.unwrap)(res.data);
108
+ (0, output_js_1.success)(`Attached volume ${id} to deployment ${deploymentId} at ${dv.mountPath}.`);
109
+ console.log(" Run 'nexus deploy redeploy <id>' to mount it.");
110
+ }
111
+ catch (err) {
112
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
113
+ process.exit(1);
114
+ }
115
+ });
116
+ vol
117
+ .command('detach <id>')
118
+ .description('Detach a volume from its deployment')
119
+ .action(async (id) => {
120
+ try {
121
+ await client_js_1.client.post(`/api/volumes/${id}/detach`);
122
+ (0, output_js_1.success)(`Volume ${id} detached.`);
123
+ }
124
+ catch (err) {
125
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
126
+ process.exit(1);
127
+ }
128
+ });
129
+ vol
130
+ .command('refresh-usage <id>')
131
+ .description('Refresh on-disk usage for a volume')
132
+ .option('--json', 'Output raw JSON')
133
+ .action(async (id, opts) => {
134
+ try {
135
+ const res = await client_js_1.client.post(`/api/volumes/${id}/refresh-usage`);
136
+ const v = (0, client_js_1.unwrap)(res.data);
137
+ if (opts.json) {
138
+ (0, output_js_1.printJson)(v);
139
+ return;
140
+ }
141
+ (0, output_js_1.success)(`${v.name}: ${formatBytes(v.sizeBytes)}`);
142
+ }
143
+ catch (err) {
144
+ (0, output_js_1.errorMsg)((0, client_js_1.apiError)(err));
145
+ process.exit(1);
146
+ }
147
+ });
148
+ }
149
+ //# sourceMappingURL=volume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"volume.js","sourceRoot":"","sources":["../../src/commands/volume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface Config {
2
+ apiUrl: string;
3
+ token: string;
4
+ tokenId: string;
5
+ }
6
+ export declare function getConfig(): Partial<Config>;
7
+ export declare function saveConfig(config: Config): void;
8
+ export declare function clearConfig(): void;
9
+ export declare function requireToken(): string;
10
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,wBAAgB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAkB3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAK/C;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAOrC"}
package/dist/config.js ADDED
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getConfig = getConfig;
7
+ exports.saveConfig = saveConfig;
8
+ exports.clearConfig = clearConfig;
9
+ exports.requireToken = requireToken;
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const os_1 = __importDefault(require("os"));
13
+ const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.nexusai');
14
+ const CONFIG_PATH = path_1.default.join(CONFIG_DIR, 'config.json');
15
+ const DEFAULT_API_URL = 'https://nexusai.run';
16
+ function getConfig() {
17
+ const envToken = process.env.NEXUSAI_TOKEN;
18
+ const envApiUrl = process.env.NEXUSAI_API_URL;
19
+ let fileConfig = {};
20
+ if (fs_1.default.existsSync(CONFIG_PATH)) {
21
+ try {
22
+ fileConfig = JSON.parse(fs_1.default.readFileSync(CONFIG_PATH, 'utf8'));
23
+ }
24
+ catch {
25
+ // ignore malformed config
26
+ }
27
+ }
28
+ return {
29
+ apiUrl: envApiUrl || fileConfig.apiUrl || DEFAULT_API_URL,
30
+ token: envToken || fileConfig.token || '',
31
+ tokenId: fileConfig.tokenId || '',
32
+ };
33
+ }
34
+ function saveConfig(config) {
35
+ if (!fs_1.default.existsSync(CONFIG_DIR)) {
36
+ fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
37
+ }
38
+ fs_1.default.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 });
39
+ }
40
+ function clearConfig() {
41
+ if (fs_1.default.existsSync(CONFIG_PATH)) {
42
+ fs_1.default.unlinkSync(CONFIG_PATH);
43
+ }
44
+ }
45
+ function requireToken() {
46
+ const config = getConfig();
47
+ if (!config.token) {
48
+ console.error("Not logged in. Run 'nexus auth login' first.");
49
+ process.exit(1);
50
+ }
51
+ return config.token;
52
+ }
53
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;AAeA,8BAkBC;AAED,gCAKC;AAED,kCAIC;AAED,oCAOC;AAvDD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAQpB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,SAAgB,SAAS;IACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAE9C,IAAI,UAAU,GAAoB,EAAE,CAAC;IACrC,IAAI,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,SAAS,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe;QACzD,KAAK,EAAE,QAAQ,IAAI,UAAU,CAAC,KAAK,IAAI,EAAE;QACzC,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,EAAE;KAClC,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc;IACvC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,YAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,YAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,SAAgB,WAAW;IACzB,IAAI,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,gDAAkD;AAClD,oDAAsD;AACtD,oDAAsD;AACtD,sDAAwD;AACxD,oDAAsD;AACtD,kDAAoD;AACpD,oDAAsD;AACtD,wDAA0D;AAC1D,oDAAsD;AACtD,oDAAsD;AACtD,0DAA4D;AAC5D,gDAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,iCAAiC,CAAC;KAC9C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,4BAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC;AACvB,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,8BAAgB,EAAC,OAAO,CAAC,CAAC;AAC1B,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,gCAAiB,EAAC,OAAO,CAAC,CAAC;AAC3B,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;AAEtB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Ora } from 'ora';
2
+ export declare function statusBadge(status: string): string;
3
+ export declare function printTable(headers: string[], rows: (string | undefined | null)[][]): void;
4
+ export declare function printJson(obj: unknown): void;
5
+ export declare function spinner(text: string): Ora;
6
+ export declare function timeAgo(dateStr: string): string;
7
+ export declare function success(msg: string): void;
8
+ export declare function errorMsg(msg: string): void;
9
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAEA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAa/B,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAiBzF;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAE5C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAEzC;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS/C;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE1C"}