@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @danubedata/cli
2
2
 
3
- Deploy static sites to [DanubeData](https://danubedata.ro) from the terminal.
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 with your API token
17
- danube login
16
+ # Authenticate via browser
17
+ danube auth
18
18
 
19
- # Link your project to a static site
20
- danube pages link
19
+ # List your VPS instances
20
+ danube vps ls
21
+
22
+ # List your storage buckets
23
+ danube storage buckets ls
21
24
 
22
- # Deploy the current directory
25
+ # Deploy a static site
26
+ danube pages link
23
27
  danube pages deploy
24
28
  ```
25
29
 
26
30
  ## Authentication
27
31
 
28
- Generate an API token from your [DanubeData dashboard](https://danubedata.ro) and authenticate:
32
+ ### Browser Auth (recommended)
29
33
 
30
34
  ```bash
31
- danube login
35
+ danube auth
32
36
  ```
33
37
 
34
- You can also pass the token directly:
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 --token <your-token>
43
+ danube login # Interactive prompt
44
+ danube login --token <token> # Pass token directly
38
45
  ```
39
46
 
40
- Or set the `DANUBE_TOKEN` environment variable for CI/CD:
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
- ### `danube login`
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
- Show the currently authenticated user and their teams.
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 pages link`
65
+ ### VPS Instances (`danube vps`)
62
66
 
63
- Link the current directory to a DanubeData static site. Prompts you to select a team and site (or create a new one). Writes configuration to `.danube/project.json`.
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
- ### `danube pages deploy`
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
- Deploy your site to DanubeData.
97
+ #### Power management
68
98
 
69
99
  ```bash
70
- danube pages deploy # Deploy current directory
71
- danube pages deploy --dir dist # Deploy a specific directory
72
- danube pages deploy --no-wait # Don't wait for build to complete
100
+ danube vps stop <id>
101
+ danube vps start <id>
102
+ danube vps reboot <id>
73
103
  ```
74
104
 
75
- The command packages your files into a ZIP archive, uploads them, and polls the build status until deployment is live.
105
+ ### Object Storage (`danube storage`)
76
106
 
77
- ### `danube pages deployments ls`
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
- List all deployments for the linked site. Shows revision, status, trigger method, and timestamps.
122
+ ```bash
123
+ # Interactive
124
+ danube storage buckets create
80
125
 
81
- ### `danube pages deployments rollback <revision>`
126
+ # With flags
127
+ danube storage buckets create --name my-bucket --region fsn1 --versioning
128
+ ```
82
129
 
83
- Activate a previous deployment by revision number.
130
+ #### Update bucket settings
84
131
 
85
132
  ```bash
86
- danube pages deployments rollback 3
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
- ### `danube pages domains ls`
90
-
91
- List all domains configured for the linked site.
92
-
93
- ### `danube pages domains add <domain>`
137
+ #### Manage access keys
94
138
 
95
- Add a custom domain. Returns DNS verification instructions if required.
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 domains remove <domain>`
145
+ ### Static Sites (`danube pages`)
98
146
 
99
- Remove a custom domain.
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
- ### `danube pages domains verify <domain>`
158
+ #### Deploy
102
159
 
103
- Trigger DNS verification for a custom domain.
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
- You can optionally create a `danube.json` file in your project root to configure deployments:
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 login`) |
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,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const imagesCommand: Command;
@@ -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,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const vpsCommand: Command;
@@ -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,6 @@
1
+ import { Command } from 'commander';
2
+ export declare const lsCommand: Command;
3
+ export declare const createCommand: Command;
4
+ export declare const getCommand: Command;
5
+ export declare const updateCommand: Command;
6
+ export declare const deleteCommand: Command;
@@ -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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -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:
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
@@ -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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danubedata/cli",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "DanubeData CLI — manage infrastructure from the terminal",
5
5
  "type": "module",
6
6
  "bin": {