@danubedata/cli 0.2.0 → 0.3.1
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 +107 -55
- package/dist/commands/vps/actions.d.ts +8 -0
- package/dist/commands/vps/actions.js +142 -0
- package/dist/commands/vps/actions.js.map +1 -0
- package/dist/commands/vps/images.d.ts +2 -0
- package/dist/commands/vps/images.js +21 -0
- package/dist/commands/vps/images.js.map +1 -0
- package/dist/commands/vps/index.d.ts +2 -0
- package/dist/commands/vps/index.js +20 -0
- package/dist/commands/vps/index.js.map +1 -0
- package/dist/commands/vps/instances.d.ts +6 -0
- package/dist/commands/vps/instances.js +233 -0
- package/dist/commands/vps/instances.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.js +1 -1
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/output.js +7 -0
- package/dist/lib/output.js.map +1 -1
- package/dist/types/api.d.ts +86 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @danubedata/cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Manage [DanubeData](https://danubedata.ro) infrastructure from the terminal.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -13,31 +13,38 @@ Requires Node.js 18 or later.
|
|
|
13
13
|
## Quick Start
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
# Authenticate
|
|
17
|
-
danube
|
|
16
|
+
# Authenticate via browser
|
|
17
|
+
danube auth
|
|
18
18
|
|
|
19
|
-
#
|
|
20
|
-
danube
|
|
19
|
+
# List your VPS instances
|
|
20
|
+
danube vps ls
|
|
21
|
+
|
|
22
|
+
# List your storage buckets
|
|
23
|
+
danube storage buckets ls
|
|
21
24
|
|
|
22
|
-
# Deploy
|
|
25
|
+
# Deploy a static site
|
|
26
|
+
danube pages link
|
|
23
27
|
danube pages deploy
|
|
24
28
|
```
|
|
25
29
|
|
|
26
30
|
## Authentication
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
### Browser Auth (recommended)
|
|
29
33
|
|
|
30
34
|
```bash
|
|
31
|
-
danube
|
|
35
|
+
danube auth
|
|
32
36
|
```
|
|
33
37
|
|
|
34
|
-
|
|
38
|
+
Opens your browser to log in and authorize the CLI automatically — no manual token copying.
|
|
39
|
+
|
|
40
|
+
### Token Auth
|
|
35
41
|
|
|
36
42
|
```bash
|
|
37
|
-
danube login
|
|
43
|
+
danube login # Interactive prompt
|
|
44
|
+
danube login --token <token> # Pass token directly
|
|
38
45
|
```
|
|
39
46
|
|
|
40
|
-
|
|
47
|
+
### CI/CD
|
|
41
48
|
|
|
42
49
|
```bash
|
|
43
50
|
export DANUBE_TOKEN=your-token
|
|
@@ -46,71 +53,121 @@ danube pages deploy
|
|
|
46
53
|
|
|
47
54
|
## Commands
|
|
48
55
|
|
|
49
|
-
###
|
|
50
|
-
|
|
51
|
-
Authenticate with DanubeData. Prompts for an API token or accepts `--token <token>`.
|
|
52
|
-
|
|
53
|
-
### `danube logout`
|
|
54
|
-
|
|
55
|
-
Remove stored authentication credentials.
|
|
56
|
-
|
|
57
|
-
### `danube whoami`
|
|
56
|
+
### General
|
|
58
57
|
|
|
59
|
-
|
|
58
|
+
| Command | Description |
|
|
59
|
+
|---|---|
|
|
60
|
+
| `danube auth` | Authenticate via browser (like `gh auth login`) |
|
|
61
|
+
| `danube login` | Authenticate with an API token |
|
|
62
|
+
| `danube logout` | Remove stored credentials |
|
|
63
|
+
| `danube whoami` | Show authenticated user and teams |
|
|
60
64
|
|
|
61
|
-
### `danube
|
|
65
|
+
### VPS Instances (`danube vps`)
|
|
62
66
|
|
|
63
|
-
|
|
67
|
+
| Command | Description |
|
|
68
|
+
|---|---|
|
|
69
|
+
| `danube vps ls` | List all VPS instances |
|
|
70
|
+
| `danube vps create` | Create a new VPS (interactive or flags) |
|
|
71
|
+
| `danube vps get <id>` | Show VPS details and connection info |
|
|
72
|
+
| `danube vps update <id>` | Update VPS config (must be stopped) |
|
|
73
|
+
| `danube vps delete <id>` | Delete a VPS instance |
|
|
74
|
+
| `danube vps start <id>` | Start a stopped VPS |
|
|
75
|
+
| `danube vps stop <id>` | Stop a running VPS |
|
|
76
|
+
| `danube vps reboot <id>` | Reboot a running VPS |
|
|
77
|
+
| `danube vps reinstall <id>` | Reinstall OS (destroys all data) |
|
|
78
|
+
| `danube vps status <id>` | Show current status and capabilities |
|
|
79
|
+
| `danube vps metrics <id>` | Show CPU/memory/storage/network usage |
|
|
80
|
+
| `danube vps password <id>` | Show SSH password (with confirmation) |
|
|
81
|
+
| `danube vps images` | List available OS images |
|
|
82
|
+
|
|
83
|
+
#### Create a VPS
|
|
64
84
|
|
|
65
|
-
|
|
85
|
+
```bash
|
|
86
|
+
# Interactive
|
|
87
|
+
danube vps create
|
|
88
|
+
|
|
89
|
+
# With flags
|
|
90
|
+
danube vps create \
|
|
91
|
+
--name my-server \
|
|
92
|
+
--image ubuntu-24.04 \
|
|
93
|
+
--plan nano_shared \
|
|
94
|
+
--ssh-key-id <key-id>
|
|
95
|
+
```
|
|
66
96
|
|
|
67
|
-
|
|
97
|
+
#### Power management
|
|
68
98
|
|
|
69
99
|
```bash
|
|
70
|
-
danube
|
|
71
|
-
danube
|
|
72
|
-
danube
|
|
100
|
+
danube vps stop <id>
|
|
101
|
+
danube vps start <id>
|
|
102
|
+
danube vps reboot <id>
|
|
73
103
|
```
|
|
74
104
|
|
|
75
|
-
|
|
105
|
+
### Object Storage (`danube storage`)
|
|
76
106
|
|
|
77
|
-
|
|
107
|
+
| Command | Description |
|
|
108
|
+
|---|---|
|
|
109
|
+
| `danube storage buckets ls` | List all buckets |
|
|
110
|
+
| `danube storage buckets create` | Create a new bucket |
|
|
111
|
+
| `danube storage buckets get <id>` | Show bucket details |
|
|
112
|
+
| `danube storage buckets update <id>` | Update bucket settings |
|
|
113
|
+
| `danube storage buckets delete <id>` | Delete a bucket |
|
|
114
|
+
| `danube storage buckets metrics <id>` | Show bucket metrics |
|
|
115
|
+
| `danube storage keys ls` | List all access keys |
|
|
116
|
+
| `danube storage keys create` | Create a new access key |
|
|
117
|
+
| `danube storage keys get <id>` | Show access key details |
|
|
118
|
+
| `danube storage keys revoke <id>` | Revoke an access key |
|
|
119
|
+
|
|
120
|
+
#### Create a bucket
|
|
78
121
|
|
|
79
|
-
|
|
122
|
+
```bash
|
|
123
|
+
# Interactive
|
|
124
|
+
danube storage buckets create
|
|
80
125
|
|
|
81
|
-
|
|
126
|
+
# With flags
|
|
127
|
+
danube storage buckets create --name my-bucket --region fsn1 --versioning
|
|
128
|
+
```
|
|
82
129
|
|
|
83
|
-
|
|
130
|
+
#### Update bucket settings
|
|
84
131
|
|
|
85
132
|
```bash
|
|
86
|
-
danube
|
|
133
|
+
danube storage buckets update <id> --size-limit 10GB --encryption
|
|
134
|
+
danube storage buckets update <id> --public --display-name "My Assets"
|
|
87
135
|
```
|
|
88
136
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
List all domains configured for the linked site.
|
|
92
|
-
|
|
93
|
-
### `danube pages domains add <domain>`
|
|
137
|
+
#### Manage access keys
|
|
94
138
|
|
|
95
|
-
|
|
139
|
+
```bash
|
|
140
|
+
danube storage keys create --name "deploy-key"
|
|
141
|
+
danube storage keys ls
|
|
142
|
+
danube storage keys revoke <id>
|
|
143
|
+
```
|
|
96
144
|
|
|
97
|
-
### `danube pages
|
|
145
|
+
### Static Sites (`danube pages`)
|
|
98
146
|
|
|
99
|
-
|
|
147
|
+
| Command | Description |
|
|
148
|
+
|---|---|
|
|
149
|
+
| `danube pages link` | Link directory to a static site |
|
|
150
|
+
| `danube pages deploy` | Deploy the linked site |
|
|
151
|
+
| `danube pages deployments ls` | List deployments |
|
|
152
|
+
| `danube pages deployments rollback <rev>` | Roll back to a revision |
|
|
153
|
+
| `danube pages domains ls` | List custom domains |
|
|
154
|
+
| `danube pages domains add <domain>` | Add a custom domain |
|
|
155
|
+
| `danube pages domains remove <domain>` | Remove a custom domain |
|
|
156
|
+
| `danube pages domains verify <domain>` | Verify DNS for a domain |
|
|
100
157
|
|
|
101
|
-
|
|
158
|
+
#### Deploy
|
|
102
159
|
|
|
103
|
-
|
|
160
|
+
```bash
|
|
161
|
+
danube pages deploy # Deploy current directory
|
|
162
|
+
danube pages deploy --dir dist # Deploy a specific directory
|
|
163
|
+
danube pages deploy --no-wait # Don't wait for build
|
|
164
|
+
```
|
|
104
165
|
|
|
105
166
|
## Configuration
|
|
106
167
|
|
|
107
|
-
### Project Configuration
|
|
108
|
-
|
|
109
|
-
Running `danube pages link` creates a `.danube/project.json` file in your project directory. This file is required for all `pages` subcommands.
|
|
110
|
-
|
|
111
168
|
### `danube.json`
|
|
112
169
|
|
|
113
|
-
|
|
170
|
+
Optional project config for static site deployments:
|
|
114
171
|
|
|
115
172
|
```json
|
|
116
173
|
{
|
|
@@ -119,16 +176,11 @@ You can optionally create a `danube.json` file in your project root to configure
|
|
|
119
176
|
}
|
|
120
177
|
```
|
|
121
178
|
|
|
122
|
-
- **`outputDir`** - Directory to deploy (overridden by `--dir` flag)
|
|
123
|
-
- **`ignore`** - Additional file patterns to exclude from deployment
|
|
124
|
-
|
|
125
|
-
Files matching `.gitignore` patterns are automatically excluded, along with `.git`, `node_modules`, and `.danube` directories.
|
|
126
|
-
|
|
127
179
|
## Environment Variables
|
|
128
180
|
|
|
129
181
|
| Variable | Description |
|
|
130
182
|
|---|---|
|
|
131
|
-
| `DANUBE_TOKEN` | API token (alternative to `danube
|
|
183
|
+
| `DANUBE_TOKEN` | API token (alternative to `danube auth`) |
|
|
132
184
|
| `DANUBE_API_BASE` | Override the API base URL |
|
|
133
185
|
| `CI` | Suppresses update notifications |
|
|
134
186
|
| `DANUBE_NO_UPDATE_CHECK` | Suppresses update notifications |
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare const startCommand: Command;
|
|
3
|
+
export declare const stopCommand: Command;
|
|
4
|
+
export declare const rebootCommand: Command;
|
|
5
|
+
export declare const reinstallCommand: Command;
|
|
6
|
+
export declare const statusCommand: Command;
|
|
7
|
+
export declare const metricsCommand: Command;
|
|
8
|
+
export declare const passwordCommand: Command;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { confirm, select } from '@inquirer/prompts';
|
|
5
|
+
import { ApiClient } from '../../lib/api-client.js';
|
|
6
|
+
import { statusColor, formatBytes, formatDate } from '../../lib/output.js';
|
|
7
|
+
export const startCommand = new Command('start')
|
|
8
|
+
.description('Start a stopped VPS instance')
|
|
9
|
+
.argument('<id>', 'VPS instance ID')
|
|
10
|
+
.action(async (id) => {
|
|
11
|
+
const api = await ApiClient.create();
|
|
12
|
+
const spinner = ora('Starting VPS...').start();
|
|
13
|
+
const res = await api.post(`/api/v1/vps/${id}/start`);
|
|
14
|
+
spinner.succeed(res.message);
|
|
15
|
+
});
|
|
16
|
+
export const stopCommand = new Command('stop')
|
|
17
|
+
.description('Stop a running VPS instance')
|
|
18
|
+
.argument('<id>', 'VPS instance ID')
|
|
19
|
+
.action(async (id) => {
|
|
20
|
+
const api = await ApiClient.create();
|
|
21
|
+
const spinner = ora('Stopping VPS...').start();
|
|
22
|
+
const res = await api.post(`/api/v1/vps/${id}/stop`);
|
|
23
|
+
spinner.succeed(res.message);
|
|
24
|
+
});
|
|
25
|
+
export const rebootCommand = new Command('reboot')
|
|
26
|
+
.description('Reboot a running VPS instance')
|
|
27
|
+
.argument('<id>', 'VPS instance ID')
|
|
28
|
+
.action(async (id) => {
|
|
29
|
+
const api = await ApiClient.create();
|
|
30
|
+
const spinner = ora('Rebooting VPS...').start();
|
|
31
|
+
const res = await api.post(`/api/v1/vps/${id}/reboot`);
|
|
32
|
+
spinner.succeed(res.message);
|
|
33
|
+
});
|
|
34
|
+
export const reinstallCommand = new Command('reinstall')
|
|
35
|
+
.description('Reinstall OS on a VPS instance (destroys all data)')
|
|
36
|
+
.argument('<id>', 'VPS instance ID')
|
|
37
|
+
.option('--image <image>', 'OS image ID (e.g. ubuntu-24.04)')
|
|
38
|
+
.option('--cloud-init <script>', 'Custom cloud-init script')
|
|
39
|
+
.option('--force', 'Skip confirmation')
|
|
40
|
+
.action(async (id, opts) => {
|
|
41
|
+
let image = opts.image;
|
|
42
|
+
if (!image) {
|
|
43
|
+
const api = await ApiClient.create();
|
|
44
|
+
const groupsRes = await api.get('/api/v1/vps/images/grouped');
|
|
45
|
+
const imageChoices = groupsRes.groups.flatMap(g => g.images.map(img => ({
|
|
46
|
+
name: `${img.label} (${img.default_user})`,
|
|
47
|
+
value: img.id,
|
|
48
|
+
})));
|
|
49
|
+
image = await select({ message: 'Select new OS:', choices: imageChoices });
|
|
50
|
+
}
|
|
51
|
+
if (!opts.force) {
|
|
52
|
+
const confirmed = await confirm({
|
|
53
|
+
message: `This will DESTROY ALL DATA on VPS ${id} and reinstall with ${image}. Continue?`,
|
|
54
|
+
default: false,
|
|
55
|
+
});
|
|
56
|
+
if (!confirmed) {
|
|
57
|
+
console.log('Cancelled.');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const api = await ApiClient.create();
|
|
62
|
+
const body = { image };
|
|
63
|
+
if (opts.cloudInit)
|
|
64
|
+
body.custom_cloud_init = opts.cloudInit;
|
|
65
|
+
const spinner = ora('Reinstalling VPS...').start();
|
|
66
|
+
const res = await api.post(`/api/v1/vps/${id}/reinstall`, body);
|
|
67
|
+
spinner.succeed(res.message);
|
|
68
|
+
});
|
|
69
|
+
export const statusCommand = new Command('status')
|
|
70
|
+
.description('Show VPS instance status')
|
|
71
|
+
.argument('<id>', 'VPS instance ID')
|
|
72
|
+
.action(async (id) => {
|
|
73
|
+
const api = await ApiClient.create();
|
|
74
|
+
const s = await api.get(`/api/v1/vps/${id}/status`);
|
|
75
|
+
const lines = [
|
|
76
|
+
['Status', statusColor(s.status)],
|
|
77
|
+
['Label', s.status_label],
|
|
78
|
+
['Transitional', s.is_transitional ? chalk.yellow('yes') : 'no'],
|
|
79
|
+
['Can Start', s.can_be_started ? chalk.green('yes') : 'no'],
|
|
80
|
+
['Can Stop', s.can_be_stopped ? chalk.green('yes') : 'no'],
|
|
81
|
+
['Can Reboot', s.can_be_rebooted ? chalk.green('yes') : 'no'],
|
|
82
|
+
['Can Destroy', s.can_be_destroyed ? chalk.green('yes') : 'no'],
|
|
83
|
+
['Updated', formatDate(s.updated_at)],
|
|
84
|
+
];
|
|
85
|
+
const maxLabel = Math.max(...lines.map(([l]) => l.length));
|
|
86
|
+
for (const [label, value] of lines) {
|
|
87
|
+
console.log(`${chalk.dim(label.padEnd(maxLabel))} ${value}`);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
export const metricsCommand = new Command('metrics')
|
|
91
|
+
.description('Show VPS instance metrics')
|
|
92
|
+
.argument('<id>', 'VPS instance ID')
|
|
93
|
+
.action(async (id) => {
|
|
94
|
+
const api = await ApiClient.create();
|
|
95
|
+
const m = await api.get(`/api/v1/vps/${id}/metrics`);
|
|
96
|
+
const uptime = formatUptime(m.uptime_seconds);
|
|
97
|
+
const lines = [
|
|
98
|
+
['CPU Usage', `${m.cpu.usage_percent}% (${m.cpu.cores} cores)`],
|
|
99
|
+
['Memory', `${m.memory.used_gb}/${m.memory.total_gb} GB (${m.memory.usage_percent}%)`],
|
|
100
|
+
['Storage', `${m.storage.used_gb}/${m.storage.total_gb} GB (${m.storage.usage_percent}%)`],
|
|
101
|
+
['Network RX', formatBytes(m.network.rx_bytes)],
|
|
102
|
+
['Network TX', formatBytes(m.network.tx_bytes)],
|
|
103
|
+
['Uptime', uptime],
|
|
104
|
+
];
|
|
105
|
+
const maxLabel = Math.max(...lines.map(([l]) => l.length));
|
|
106
|
+
for (const [label, value] of lines) {
|
|
107
|
+
console.log(`${chalk.dim(label.padEnd(maxLabel))} ${value}`);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
export const passwordCommand = new Command('password')
|
|
111
|
+
.description('Show SSH password for a VPS instance')
|
|
112
|
+
.argument('<id>', 'VPS instance ID')
|
|
113
|
+
.action(async (id) => {
|
|
114
|
+
const confirmed = await confirm({
|
|
115
|
+
message: 'This will display the root password in your terminal. Continue?',
|
|
116
|
+
default: false,
|
|
117
|
+
});
|
|
118
|
+
if (!confirmed) {
|
|
119
|
+
console.log('Cancelled.');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const api = await ApiClient.create();
|
|
123
|
+
const res = await api.get(`/api/v1/vps/${id}/password`);
|
|
124
|
+
console.log('');
|
|
125
|
+
console.log(` Username: ${chalk.bold(res.username)}`);
|
|
126
|
+
console.log(` Password: ${chalk.bold.yellow(res.password)}`);
|
|
127
|
+
if (res.public_ip) {
|
|
128
|
+
console.log(` SSH: ${chalk.dim(`ssh ${res.username}@${res.public_ip}`)}`);
|
|
129
|
+
}
|
|
130
|
+
console.log('');
|
|
131
|
+
});
|
|
132
|
+
function formatUptime(seconds) {
|
|
133
|
+
const days = Math.floor(seconds / 86400);
|
|
134
|
+
const hours = Math.floor((seconds % 86400) / 3600);
|
|
135
|
+
const mins = Math.floor((seconds % 3600) / 60);
|
|
136
|
+
if (days > 0)
|
|
137
|
+
return `${days}d ${hours}h ${mins}m`;
|
|
138
|
+
if (hours > 0)
|
|
139
|
+
return `${hours}h ${mins}m`;
|
|
140
|
+
return `${mins}m`;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/commands/vps/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { ApiClient } from '../../lib/api-client.js';
|
|
4
|
+
import { formatTable } from '../../lib/output.js';
|
|
5
|
+
export const imagesCommand = new Command('images')
|
|
6
|
+
.description('List available OS images')
|
|
7
|
+
.action(async () => {
|
|
8
|
+
const api = await ApiClient.create();
|
|
9
|
+
const res = await api.get('/api/v1/vps/images/grouped');
|
|
10
|
+
for (const group of res.groups) {
|
|
11
|
+
console.log(chalk.bold(`\n${group.name}`));
|
|
12
|
+
const rows = group.images.map(img => [
|
|
13
|
+
img.id,
|
|
14
|
+
img.label,
|
|
15
|
+
img.version,
|
|
16
|
+
img.default_user,
|
|
17
|
+
]);
|
|
18
|
+
console.log(formatTable(['ID', 'LABEL', 'VERSION', 'USER'], rows));
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../../src/commands/vps/images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAA8B,4BAA4B,CAAC,CAAC;IAErF,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE3C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,EAAE;YACN,GAAG,CAAC,KAAK;YACT,GAAG,CAAC,OAAO;YACX,GAAG,CAAC,YAAY;SACjB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { lsCommand, createCommand, getCommand, updateCommand, deleteCommand } from './instances.js';
|
|
3
|
+
import { startCommand, stopCommand, rebootCommand, reinstallCommand, statusCommand, metricsCommand, passwordCommand } from './actions.js';
|
|
4
|
+
import { imagesCommand } from './images.js';
|
|
5
|
+
export const vpsCommand = new Command('vps')
|
|
6
|
+
.description('Manage VPS instances')
|
|
7
|
+
.addCommand(lsCommand)
|
|
8
|
+
.addCommand(createCommand)
|
|
9
|
+
.addCommand(getCommand)
|
|
10
|
+
.addCommand(updateCommand)
|
|
11
|
+
.addCommand(deleteCommand)
|
|
12
|
+
.addCommand(startCommand)
|
|
13
|
+
.addCommand(stopCommand)
|
|
14
|
+
.addCommand(rebootCommand)
|
|
15
|
+
.addCommand(reinstallCommand)
|
|
16
|
+
.addCommand(statusCommand)
|
|
17
|
+
.addCommand(metricsCommand)
|
|
18
|
+
.addCommand(passwordCommand)
|
|
19
|
+
.addCommand(imagesCommand);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/vps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1I,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,sBAAsB,CAAC;KACnC,UAAU,CAAC,SAAS,CAAC;KACrB,UAAU,CAAC,aAAa,CAAC;KACzB,UAAU,CAAC,UAAU,CAAC;KACtB,UAAU,CAAC,aAAa,CAAC;KACzB,UAAU,CAAC,aAAa,CAAC;KACzB,UAAU,CAAC,YAAY,CAAC;KACxB,UAAU,CAAC,WAAW,CAAC;KACvB,UAAU,CAAC,aAAa,CAAC;KACzB,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,aAAa,CAAC;KACzB,UAAU,CAAC,cAAc,CAAC;KAC1B,UAAU,CAAC,eAAe,CAAC;KAC3B,UAAU,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { randomBytes } from 'node:crypto';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { input, select, password as passwordPrompt, confirm } from '@inquirer/prompts';
|
|
6
|
+
import { ApiClient } from '../../lib/api-client.js';
|
|
7
|
+
import { formatTable, statusColor, formatDate } from '../../lib/output.js';
|
|
8
|
+
function generatePassword(length = 24) {
|
|
9
|
+
const chars = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789!@#$%&*';
|
|
10
|
+
const bytes = randomBytes(length);
|
|
11
|
+
return Array.from(bytes, b => chars[b % chars.length]).join('');
|
|
12
|
+
}
|
|
13
|
+
export const lsCommand = new Command('ls')
|
|
14
|
+
.description('List all VPS instances')
|
|
15
|
+
.action(async () => {
|
|
16
|
+
const api = await ApiClient.create();
|
|
17
|
+
const res = await api.get('/api/v1/vps');
|
|
18
|
+
if (res.data.length === 0) {
|
|
19
|
+
console.log('No VPS instances found.');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const rows = res.data.map(v => [
|
|
23
|
+
v.id,
|
|
24
|
+
v.name,
|
|
25
|
+
statusColor(v.status),
|
|
26
|
+
v.public_ip || '-',
|
|
27
|
+
v.resource_profile,
|
|
28
|
+
`${v.cpu_cores} ${v.cpu_allocation_type}`,
|
|
29
|
+
`${v.memory_size_gb}GB`,
|
|
30
|
+
`${v.storage_size_gb}GB`,
|
|
31
|
+
`\u20AC${v.monthly_cost_dollars}/mo`,
|
|
32
|
+
formatDate(v.created_at),
|
|
33
|
+
]);
|
|
34
|
+
console.log(formatTable(['ID', 'NAME', 'STATUS', 'IP', 'PLAN', 'CPU', 'RAM', 'DISK', 'COST/MO', 'CREATED'], rows));
|
|
35
|
+
});
|
|
36
|
+
export const createCommand = new Command('create')
|
|
37
|
+
.description('Create a new VPS instance')
|
|
38
|
+
.option('--name <name>', 'Instance name (lowercase, alphanumeric, hyphens)')
|
|
39
|
+
.option('--image <image>', 'OS image ID (e.g. ubuntu-24.04)')
|
|
40
|
+
.option('--plan <plan>', 'Resource profile (e.g. nano_shared, small)')
|
|
41
|
+
.option('--cpu-type <type>', 'CPU allocation: shared or dedicated')
|
|
42
|
+
.option('--network <stack>', 'Network stack: dual_stack, ipv4_only, ipv6_only')
|
|
43
|
+
.option('--ssh-key-id <id>', 'SSH key ID for authentication')
|
|
44
|
+
.option('--password <password>', 'Root password (min 12 chars)')
|
|
45
|
+
.option('--datacenter <dc>', 'Datacenter region', 'fsn1')
|
|
46
|
+
.action(async (opts) => {
|
|
47
|
+
let name = opts.name;
|
|
48
|
+
let image = opts.image;
|
|
49
|
+
let plan = opts.plan;
|
|
50
|
+
let cpuType = opts.cpuType;
|
|
51
|
+
let authMethod;
|
|
52
|
+
let sshKeyId = opts.sshKeyId;
|
|
53
|
+
let pass = opts.password;
|
|
54
|
+
const api = await ApiClient.create();
|
|
55
|
+
if (!name) {
|
|
56
|
+
name = await input({
|
|
57
|
+
message: 'Instance name:',
|
|
58
|
+
validate: (v) => /^[a-z0-9-]+$/.test(v.trim()) || 'Lowercase letters, numbers, and hyphens only',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (!image) {
|
|
62
|
+
const groupsRes = await api.get('/api/v1/vps/images/grouped');
|
|
63
|
+
const imageChoices = groupsRes.groups.flatMap(g => g.images.map(img => ({
|
|
64
|
+
name: `${img.label} (${img.default_user})`,
|
|
65
|
+
value: img.id,
|
|
66
|
+
})));
|
|
67
|
+
image = await select({ message: 'Operating system:', choices: imageChoices });
|
|
68
|
+
}
|
|
69
|
+
if (!plan) {
|
|
70
|
+
plan = await select({
|
|
71
|
+
message: 'Plan:',
|
|
72
|
+
choices: [
|
|
73
|
+
{ name: 'DD Litcov — 2 vCPU, 2GB RAM, 40GB — \u20AC4.49/mo (shared)', value: 'nano_shared' },
|
|
74
|
+
{ name: 'DD Maliuc — 3 vCPU, 4GB RAM, 60GB — \u20AC7.49/mo (shared)', value: 'micro_shared' },
|
|
75
|
+
{ name: 'DD Crisan — 4 vCPU, 8GB RAM, 80GB — \u20AC12.49/mo (shared)', value: 'small_shared' },
|
|
76
|
+
{ name: 'DD Caraorman — 8 vCPU, 16GB RAM, 160GB — \u20AC24.99/mo (shared)', value: 'medium_shared' },
|
|
77
|
+
{ name: 'DD Dunavat — 16 vCPU, 32GB RAM, 320GB — \u20AC49.99/mo (shared)', value: 'large_shared' },
|
|
78
|
+
{ name: 'DD Litcov — 2 vCPU, 2GB RAM, 40GB — \u20AC8.99/mo (dedicated)', value: 'nano' },
|
|
79
|
+
{ name: 'DD Maliuc — 3 vCPU, 4GB RAM, 80GB — \u20AC14.99/mo (dedicated)', value: 'micro' },
|
|
80
|
+
{ name: 'DD Crisan — 4 vCPU, 8GB RAM, 160GB — \u20AC24.99/mo (dedicated)', value: 'small' },
|
|
81
|
+
{ name: 'DD Caraorman — 8 vCPU, 16GB RAM, 320GB — \u20AC49.99/mo (dedicated)', value: 'medium' },
|
|
82
|
+
{ name: 'DD Dunavat — 16 vCPU, 32GB RAM, 640GB — \u20AC99.99/mo (dedicated)', value: 'large' },
|
|
83
|
+
],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (!cpuType) {
|
|
87
|
+
cpuType = plan.endsWith('_shared') ? 'shared' : 'dedicated';
|
|
88
|
+
}
|
|
89
|
+
if (!sshKeyId && !pass) {
|
|
90
|
+
authMethod = await select({
|
|
91
|
+
message: 'Authentication method:',
|
|
92
|
+
choices: [
|
|
93
|
+
{ name: 'SSH Key', value: 'ssh_key' },
|
|
94
|
+
{ name: 'Password', value: 'password' },
|
|
95
|
+
],
|
|
96
|
+
});
|
|
97
|
+
if (authMethod === 'password') {
|
|
98
|
+
const passwordChoice = await select({
|
|
99
|
+
message: 'Password:',
|
|
100
|
+
choices: [
|
|
101
|
+
{ name: 'Generate a secure password', value: 'generate' },
|
|
102
|
+
{ name: 'Enter manually', value: 'manual' },
|
|
103
|
+
],
|
|
104
|
+
});
|
|
105
|
+
if (passwordChoice === 'generate') {
|
|
106
|
+
pass = generatePassword();
|
|
107
|
+
console.log('');
|
|
108
|
+
console.log(` Generated password: ${chalk.bold.yellow(pass)}`);
|
|
109
|
+
console.log(chalk.yellow(' Save this password now — it will not be shown again.'));
|
|
110
|
+
console.log('');
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
pass = await passwordPrompt({
|
|
114
|
+
message: 'Root password (min 12 characters):',
|
|
115
|
+
mask: '*',
|
|
116
|
+
validate: (v) => v.length >= 12 || 'Password must be at least 12 characters',
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
sshKeyId = await input({
|
|
122
|
+
message: 'SSH key ID:',
|
|
123
|
+
validate: (v) => v.trim().length > 0 || 'SSH key ID is required',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
authMethod = sshKeyId ? 'ssh_key' : 'password';
|
|
129
|
+
}
|
|
130
|
+
const body = {
|
|
131
|
+
name: name.trim(),
|
|
132
|
+
image,
|
|
133
|
+
resource_profile: plan,
|
|
134
|
+
cpu_allocation_type: cpuType,
|
|
135
|
+
network_stack: opts.network || 'dual_stack',
|
|
136
|
+
datacenter: opts.datacenter,
|
|
137
|
+
auth_method: authMethod,
|
|
138
|
+
};
|
|
139
|
+
if (sshKeyId)
|
|
140
|
+
body.ssh_key_id = sshKeyId;
|
|
141
|
+
if (pass) {
|
|
142
|
+
body.password = pass;
|
|
143
|
+
body.password_confirmation = pass;
|
|
144
|
+
}
|
|
145
|
+
const spinner = ora('Creating VPS instance...').start();
|
|
146
|
+
const res = await api.post('/api/v1/vps', body);
|
|
147
|
+
spinner.succeed(`Created VPS ${chalk.bold(res.instance.name)} (${res.instance.id})`);
|
|
148
|
+
});
|
|
149
|
+
export const getCommand = new Command('get')
|
|
150
|
+
.description('Show VPS instance details')
|
|
151
|
+
.argument('<id>', 'VPS instance ID')
|
|
152
|
+
.action(async (id) => {
|
|
153
|
+
const api = await ApiClient.create();
|
|
154
|
+
const res = await api.get(`/api/v1/vps/${id}`);
|
|
155
|
+
const v = res.instance;
|
|
156
|
+
const sshCmd = v.public_ip ? `ssh root@${v.public_ip}` : '-';
|
|
157
|
+
const lines = [
|
|
158
|
+
['ID', v.id],
|
|
159
|
+
['Name', v.name],
|
|
160
|
+
['Status', statusColor(v.status)],
|
|
161
|
+
['Plan', v.resource_profile],
|
|
162
|
+
['CPU', `${v.cpu_cores} cores (${v.cpu_allocation_type})`],
|
|
163
|
+
['Memory', `${v.memory_size_gb} GB`],
|
|
164
|
+
['Storage', `${v.storage_size_gb} GB`],
|
|
165
|
+
['Image', v.image],
|
|
166
|
+
['Datacenter', v.datacenter],
|
|
167
|
+
['IPv4', v.public_ip || '-'],
|
|
168
|
+
['IPv6', v.ipv6_address || '-'],
|
|
169
|
+
['SSH', sshCmd],
|
|
170
|
+
['VNC', v.vnc_access_url || '-'],
|
|
171
|
+
['Cost', `\u20AC${res.monthly_cost ?? v.monthly_cost_dollars}/mo`],
|
|
172
|
+
['Created', formatDate(v.created_at)],
|
|
173
|
+
['Deployed', v.deployed_at ? formatDate(v.deployed_at) : '-'],
|
|
174
|
+
];
|
|
175
|
+
const maxLabel = Math.max(...lines.map(([l]) => l.length));
|
|
176
|
+
for (const [label, value] of lines) {
|
|
177
|
+
console.log(`${chalk.dim(label.padEnd(maxLabel))} ${value}`);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
export const updateCommand = new Command('update')
|
|
181
|
+
.description('Update VPS instance (must be stopped)')
|
|
182
|
+
.argument('<id>', 'VPS instance ID')
|
|
183
|
+
.option('--plan <plan>', 'Resource profile')
|
|
184
|
+
.option('--cpu-type <type>', 'CPU allocation: shared or dedicated')
|
|
185
|
+
.option('--cpu-cores <cores>', 'Number of CPU cores')
|
|
186
|
+
.option('--memory <gb>', 'Memory in GB')
|
|
187
|
+
.option('--storage <gb>', 'Storage in GB')
|
|
188
|
+
.option('--snapshots', 'Enable automated snapshots')
|
|
189
|
+
.option('--no-snapshots', 'Disable automated snapshots')
|
|
190
|
+
.action(async (id, opts) => {
|
|
191
|
+
const body = {};
|
|
192
|
+
if (opts.plan !== undefined)
|
|
193
|
+
body.resource_profile = opts.plan;
|
|
194
|
+
if (opts.cpuType !== undefined)
|
|
195
|
+
body.cpu_allocation_type = opts.cpuType;
|
|
196
|
+
if (opts.cpuCores !== undefined)
|
|
197
|
+
body.cpu_cores = parseInt(opts.cpuCores, 10);
|
|
198
|
+
if (opts.memory !== undefined)
|
|
199
|
+
body.memory_size_gb = parseInt(opts.memory, 10);
|
|
200
|
+
if (opts.storage !== undefined)
|
|
201
|
+
body.storage_size_gb = parseInt(opts.storage, 10);
|
|
202
|
+
if (opts.snapshots !== undefined)
|
|
203
|
+
body.automated_snapshots_enabled = opts.snapshots;
|
|
204
|
+
if (Object.keys(body).length === 0) {
|
|
205
|
+
console.error(chalk.red('At least one option is required.'));
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
const api = await ApiClient.create();
|
|
209
|
+
const spinner = ora('Updating VPS instance...').start();
|
|
210
|
+
const res = await api.put(`/api/v1/vps/${id}`, body);
|
|
211
|
+
spinner.succeed(`Updated VPS ${chalk.bold(res.instance.name)}`);
|
|
212
|
+
});
|
|
213
|
+
export const deleteCommand = new Command('delete')
|
|
214
|
+
.description('Delete a VPS instance')
|
|
215
|
+
.argument('<id>', 'VPS instance ID')
|
|
216
|
+
.option('--force', 'Skip confirmation')
|
|
217
|
+
.action(async (id, opts) => {
|
|
218
|
+
if (!opts.force) {
|
|
219
|
+
const confirmed = await confirm({
|
|
220
|
+
message: `Are you sure you want to delete VPS ${id}? This cannot be undone.`,
|
|
221
|
+
default: false,
|
|
222
|
+
});
|
|
223
|
+
if (!confirmed) {
|
|
224
|
+
console.log('Cancelled.');
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const api = await ApiClient.create();
|
|
229
|
+
const spinner = ora('Deleting VPS instance...').start();
|
|
230
|
+
await api.delete(`/api/v1/vps/${id}`);
|
|
231
|
+
spinner.succeed('VPS instance deleted');
|
|
232
|
+
});
|
|
233
|
+
//# sourceMappingURL=instances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instances.js","sourceRoot":"","sources":["../../../src/commands/vps/instances.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { deploymentsCommand } from './commands/deployments.js';
|
|
|
9
9
|
import { domainsCommand } from './commands/domains.js';
|
|
10
10
|
import { authCommand } from './commands/auth.js';
|
|
11
11
|
import { storageCommand } from './commands/storage/index.js';
|
|
12
|
+
import { vpsCommand } from './commands/vps/index.js';
|
|
12
13
|
import { NotAuthenticatedError, NotLinkedError, ApiError } from './lib/errors.js';
|
|
13
14
|
import { getCurrentVersion, checkForUpdate, printUpdateNotification } from './lib/version.js';
|
|
14
15
|
const program = new Command()
|
|
@@ -20,6 +21,7 @@ program.addCommand(authCommand);
|
|
|
20
21
|
program.addCommand(logoutCommand);
|
|
21
22
|
program.addCommand(whoamiCommand);
|
|
22
23
|
program.addCommand(storageCommand);
|
|
24
|
+
program.addCommand(vpsCommand);
|
|
23
25
|
const pagesCommand = new Command('pages')
|
|
24
26
|
.description('Manage static sites');
|
|
25
27
|
pagesCommand.addCommand(linkCommand);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE9F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,gBAAgB,CAAC;KAC7B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEhC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api-client.js
CHANGED
|
@@ -40,7 +40,7 @@ export class ApiClient {
|
|
|
40
40
|
if (res.status === 401) {
|
|
41
41
|
throw new NotAuthenticatedError();
|
|
42
42
|
}
|
|
43
|
-
const message = json?.message || `Request failed with status ${res.status}`;
|
|
43
|
+
const message = json?.message || json?.error || `Request failed with status ${res.status}`;
|
|
44
44
|
throw new ApiError(res.status, message, json?.errors);
|
|
45
45
|
}
|
|
46
46
|
return json;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,OAAO,SAAS;IACZ,KAAK,CAAS;IACd,OAAO,CAAS;IAExB,YAAY,KAAa,EAAE,OAAgB;QACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM;QACjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,qBAAqB,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc;QACnE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,OAAO,GAA2B;YACtC,QAAQ,EAAE,kBAAkB;YAC5B,eAAe,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;SACxC,CAAC;QAEF,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAE9C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,IAAI,YAAY,QAAQ,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;gBAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAEnC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,SAAc,CAAC;QACxB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,qBAAqB,EAAE,CAAC;YACpC,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,8BAA8B,GAAG,CAAC,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/output.js
CHANGED
|
@@ -11,11 +11,16 @@ export function statusColor(status) {
|
|
|
11
11
|
case 'live':
|
|
12
12
|
case 'active':
|
|
13
13
|
case 'verified':
|
|
14
|
+
case 'running':
|
|
14
15
|
return chalk.green(status);
|
|
15
16
|
case 'pending':
|
|
16
17
|
case 'uploading':
|
|
17
18
|
case 'processing':
|
|
18
19
|
case 'deploying':
|
|
20
|
+
case 'starting':
|
|
21
|
+
case 'stopping':
|
|
22
|
+
case 'rebooting':
|
|
23
|
+
case 'reinstalling':
|
|
19
24
|
return chalk.yellow(status);
|
|
20
25
|
case 'failed':
|
|
21
26
|
case 'error':
|
|
@@ -24,6 +29,8 @@ export function statusColor(status) {
|
|
|
24
29
|
case 'updating':
|
|
25
30
|
case 'destroying':
|
|
26
31
|
return chalk.yellow(status);
|
|
32
|
+
case 'stopped':
|
|
33
|
+
return chalk.dim(status);
|
|
27
34
|
case 'revoked':
|
|
28
35
|
return chalk.red(status);
|
|
29
36
|
default:
|
package/dist/lib/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,WAAW,CAAC,OAAiB,EAAE,IAAgB;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAC1D,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAC/B,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACzD,CAAC;IAEF,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
package/dist/types/api.d.ts
CHANGED
|
@@ -132,3 +132,89 @@ export interface StorageMetrics {
|
|
|
132
132
|
monthly_cost_dollars: string;
|
|
133
133
|
last_synced_at: string | null;
|
|
134
134
|
}
|
|
135
|
+
export interface VpsInstance {
|
|
136
|
+
id: string;
|
|
137
|
+
name: string;
|
|
138
|
+
status: string;
|
|
139
|
+
status_label: string;
|
|
140
|
+
resource_profile: string;
|
|
141
|
+
cpu_allocation_type: 'shared' | 'dedicated';
|
|
142
|
+
cpu_cores: number;
|
|
143
|
+
memory_size_gb: number;
|
|
144
|
+
storage_size_gb: number;
|
|
145
|
+
image: string;
|
|
146
|
+
datacenter: string;
|
|
147
|
+
public_ip: string | null;
|
|
148
|
+
ipv6_address: string | null;
|
|
149
|
+
vnc_access_url: string | null;
|
|
150
|
+
monthly_cost_cents: number;
|
|
151
|
+
monthly_cost_dollars: number;
|
|
152
|
+
deployed_at: string | null;
|
|
153
|
+
created_at: string;
|
|
154
|
+
updated_at: string;
|
|
155
|
+
team_id: string;
|
|
156
|
+
user_id: string;
|
|
157
|
+
ssh_key_id: string | null;
|
|
158
|
+
can_be_started: boolean;
|
|
159
|
+
can_be_stopped: boolean;
|
|
160
|
+
can_be_rebooted: boolean;
|
|
161
|
+
can_be_destroyed: boolean;
|
|
162
|
+
}
|
|
163
|
+
export interface VpsConnectionInfo {
|
|
164
|
+
public_ip: string | null;
|
|
165
|
+
private_ip: string | null;
|
|
166
|
+
ipv6_address: string | null;
|
|
167
|
+
vnc_access_url: string | null;
|
|
168
|
+
}
|
|
169
|
+
export interface VpsStatus {
|
|
170
|
+
status: string;
|
|
171
|
+
status_label: string;
|
|
172
|
+
status_color: string;
|
|
173
|
+
can_be_started: boolean;
|
|
174
|
+
can_be_stopped: boolean;
|
|
175
|
+
can_be_rebooted: boolean;
|
|
176
|
+
can_be_destroyed: boolean;
|
|
177
|
+
is_transitional: boolean;
|
|
178
|
+
updated_at: string;
|
|
179
|
+
}
|
|
180
|
+
export interface VpsMetrics {
|
|
181
|
+
cpu: {
|
|
182
|
+
usage_percent: number;
|
|
183
|
+
cores: number;
|
|
184
|
+
sockets: number;
|
|
185
|
+
threads: number;
|
|
186
|
+
};
|
|
187
|
+
memory: {
|
|
188
|
+
used_gb: number;
|
|
189
|
+
total_gb: number;
|
|
190
|
+
usage_percent: number;
|
|
191
|
+
};
|
|
192
|
+
storage: {
|
|
193
|
+
used_gb: number;
|
|
194
|
+
total_gb: number;
|
|
195
|
+
usage_percent: number;
|
|
196
|
+
};
|
|
197
|
+
network: {
|
|
198
|
+
rx_bytes: number;
|
|
199
|
+
tx_bytes: number;
|
|
200
|
+
rx_packets: number;
|
|
201
|
+
tx_packets: number;
|
|
202
|
+
};
|
|
203
|
+
uptime_seconds: number;
|
|
204
|
+
timestamp: string;
|
|
205
|
+
}
|
|
206
|
+
export interface VpsImage {
|
|
207
|
+
id: string;
|
|
208
|
+
image: string;
|
|
209
|
+
label: string;
|
|
210
|
+
description: string;
|
|
211
|
+
distro: string;
|
|
212
|
+
version: string;
|
|
213
|
+
family: string | null;
|
|
214
|
+
default_user: string;
|
|
215
|
+
}
|
|
216
|
+
export interface VpsImageGroup {
|
|
217
|
+
distro: string;
|
|
218
|
+
name: string;
|
|
219
|
+
images: VpsImage[];
|
|
220
|
+
}
|