quicklify 0.3.3 → 0.4.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.
- package/README.md +69 -46
- package/dist/commands/destroy.d.ts +2 -0
- package/dist/commands/destroy.d.ts.map +1 -0
- package/dist/commands/destroy.js +95 -0
- package/dist/commands/destroy.js.map +1 -0
- package/dist/commands/init.d.ts +2 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +151 -95
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +22 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +88 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/base.d.ts +1 -0
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/digitalocean.d.ts +1 -0
- package/dist/providers/digitalocean.d.ts.map +1 -1
- package/dist/providers/digitalocean.js +13 -0
- package/dist/providers/digitalocean.js.map +1 -1
- package/dist/providers/hetzner.d.ts +1 -0
- package/dist/providers/hetzner.d.ts.map +1 -1
- package/dist/providers/hetzner.js +13 -0
- package/dist/providers/hetzner.js.map +1 -1
- package/dist/types/index.d.ts +16 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts +9 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +50 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/healthCheck.d.ts +2 -0
- package/dist/utils/healthCheck.d.ts.map +1 -0
- package/dist/utils/healthCheck.js +29 -0
- package/dist/utils/healthCheck.js.map +1 -0
- package/dist/utils/providerFactory.d.ts +4 -0
- package/dist/utils/providerFactory.d.ts.map +1 -0
- package/dist/utils/providerFactory.js +24 -0
- package/dist/utils/providerFactory.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,6 +45,9 @@ npx quicklify init
|
|
|
45
45
|
- ✨ **Dynamic Server Types** - Only shows compatible types for selected location
|
|
46
46
|
- 🔥 **Auto Firewall** - Ports 8000, 22, 80, 443 configured automatically
|
|
47
47
|
- 🚀 **Zero SSH Required** - Opens directly in browser after deployment
|
|
48
|
+
- 📋 **Server Management** - List, status check, and destroy commands
|
|
49
|
+
- 🏥 **Health Check Polling** - Detects when Coolify is ready (no more blind waiting)
|
|
50
|
+
- 🤖 **Non-Interactive Mode** - CI/CD friendly with `--provider --token --region --size --name` flags
|
|
48
51
|
|
|
49
52
|
## 📦 Installation
|
|
50
53
|
|
|
@@ -156,53 +159,26 @@ For production use, we recommend setting up a domain instead of using the IP add
|
|
|
156
159
|
|
|
157
160
|
## 📋 Recent Updates
|
|
158
161
|
|
|
162
|
+
### v0.4.0 (2026-02-20)
|
|
163
|
+
- **New commands:** `quicklify list`, `quicklify status [query]`, `quicklify destroy [query]`
|
|
164
|
+
- **Non-interactive mode:** `quicklify init --provider --token --region --size --name` for CI/CD
|
|
165
|
+
- **Health check polling:** Detects when Coolify is ready instead of blind waiting
|
|
166
|
+
- **Server persistence:** Deploys saved to `~/.quicklify/servers.json` for list/status/destroy
|
|
167
|
+
- **`destroyServer()`** added to provider interface (Hetzner + DigitalOcean)
|
|
168
|
+
- 233 tests with 97%+ statement coverage
|
|
169
|
+
|
|
159
170
|
### v0.3.1 (2026-02-19)
|
|
160
171
|
- Hetzner pricing now shows net prices (excl. VAT), matching website display
|
|
161
172
|
- Hetzner server types use `/datacenters` API for real availability per location
|
|
162
173
|
- Replaced deprecated Hetzner server types (cpx→cx23/cx33)
|
|
163
174
|
- "Server name already used" error now prompts for a new name
|
|
164
175
|
- Location disabled retry now re-prompts for server type
|
|
165
|
-
- Back navigation works correctly in error retry flows
|
|
166
176
|
|
|
167
177
|
### v0.3.0 (2026-02-19)
|
|
168
178
|
- DigitalOcean provider support (full API integration)
|
|
169
179
|
- Interactive provider selection (Hetzner / DigitalOcean)
|
|
170
180
|
- Step-based back navigation in all prompts
|
|
171
181
|
- Network wait loop + install logging for DigitalOcean cloud-init reliability
|
|
172
|
-
- 143 tests with 97%+ statement coverage
|
|
173
|
-
|
|
174
|
-
### v0.2.8 (2026-02-16)
|
|
175
|
-
- Replaced all `any` types with proper TypeScript interfaces
|
|
176
|
-
- Added ESLint 9 + Prettier for code quality enforcement
|
|
177
|
-
- Added CHANGELOG.md and CONTRIBUTING.md
|
|
178
|
-
|
|
179
|
-
### v0.2.7 (2026-02-16)
|
|
180
|
-
- Fixed inaccurate README/SECURITY claims
|
|
181
|
-
- Added npm keywords for better discoverability
|
|
182
|
-
|
|
183
|
-
### v0.2.6 (2026-02-16)
|
|
184
|
-
- CI: Upgraded Codecov action to v5
|
|
185
|
-
|
|
186
|
-
### v0.2.5 (2026-02-16)
|
|
187
|
-
- CI: Added Codecov integration for automatic coverage badge
|
|
188
|
-
|
|
189
|
-
### v0.2.4 (2026-02-15)
|
|
190
|
-
- Refactor: Removed recommended label, excluded failed server types from retry list
|
|
191
|
-
|
|
192
|
-
### v0.2.3 (2026-02-15)
|
|
193
|
-
- Fix: Unsupported error retry, dynamic deployment summary, dynamic recommended selection
|
|
194
|
-
|
|
195
|
-
### v0.2.2 (2026-02-15)
|
|
196
|
-
- Feat: Filter deprecated server types and add retry on unavailable
|
|
197
|
-
|
|
198
|
-
### v0.2.1 (2026-02-14)
|
|
199
|
-
- Fixed URL protocol (http for initial Coolify setup)
|
|
200
|
-
|
|
201
|
-
### v0.2.0 (2026-02-14)
|
|
202
|
-
- Added dynamic server type filtering based on selected location
|
|
203
|
-
- Auto firewall configuration (ports 8000, 22, 80, 443)
|
|
204
|
-
- Improved price formatting
|
|
205
|
-
- Removed debug logs
|
|
206
182
|
|
|
207
183
|
## 🗺️ Roadmap
|
|
208
184
|
|
|
@@ -236,14 +212,21 @@ For production use, we recommend setting up a domain instead of using the IP add
|
|
|
236
212
|
- [x] Step-based back navigation
|
|
237
213
|
- [x] Cloud-init reliability improvements (network wait, logging)
|
|
238
214
|
|
|
215
|
+
### v0.4.0 (Completed)
|
|
216
|
+
|
|
217
|
+
- [x] Server management commands (list, status, destroy)
|
|
218
|
+
- [x] Non-interactive mode for CI/CD
|
|
219
|
+
- [x] Coolify health check polling (replaces blind wait)
|
|
220
|
+
- [x] Server record persistence (`~/.quicklify/servers.json`)
|
|
221
|
+
- [x] `destroyServer()` on provider interface
|
|
222
|
+
- [x] Double confirmation safety for destroy
|
|
223
|
+
|
|
239
224
|
### Future
|
|
240
225
|
- [ ] Vultr support
|
|
241
226
|
- [ ] Linode support
|
|
242
227
|
- [ ] Domain configuration helper
|
|
243
228
|
- [ ] SSL certificate automation
|
|
244
|
-
- [ ] Health checks & monitoring
|
|
245
229
|
- [ ] Backup configuration
|
|
246
|
-
- [ ] Multi-server management
|
|
247
230
|
- [ ] Web dashboard
|
|
248
231
|
- [ ] GitHub Actions integration
|
|
249
232
|
|
|
@@ -264,9 +247,23 @@ For production use, we recommend setting up a domain instead of using the IP add
|
|
|
264
247
|
### Commands
|
|
265
248
|
|
|
266
249
|
```bash
|
|
267
|
-
# Deploy new Coolify instance
|
|
250
|
+
# Deploy new Coolify instance (interactive)
|
|
268
251
|
quicklify init
|
|
269
252
|
|
|
253
|
+
# Deploy non-interactively (CI/CD friendly)
|
|
254
|
+
quicklify init --provider hetzner --token YOUR_TOKEN --region nbg1 --size cax11 --name my-server
|
|
255
|
+
|
|
256
|
+
# List all registered servers
|
|
257
|
+
quicklify list
|
|
258
|
+
|
|
259
|
+
# Check server and Coolify status
|
|
260
|
+
quicklify status 123.45.67.89
|
|
261
|
+
quicklify status my-server
|
|
262
|
+
|
|
263
|
+
# Destroy a server (with double confirmation)
|
|
264
|
+
quicklify destroy 123.45.67.89
|
|
265
|
+
quicklify destroy my-server
|
|
266
|
+
|
|
270
267
|
# Show version
|
|
271
268
|
quicklify --version
|
|
272
269
|
|
|
@@ -274,6 +271,21 @@ quicklify --version
|
|
|
274
271
|
quicklify --help
|
|
275
272
|
```
|
|
276
273
|
|
|
274
|
+
### Non-Interactive Mode
|
|
275
|
+
|
|
276
|
+
Pass all options as flags to skip interactive prompts (useful for CI/CD pipelines):
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
quicklify init \
|
|
280
|
+
--provider hetzner \
|
|
281
|
+
--token $HETZNER_TOKEN \
|
|
282
|
+
--region nbg1 \
|
|
283
|
+
--size cax11 \
|
|
284
|
+
--name production-coolify
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
If some flags are missing, only the missing values will be prompted interactively.
|
|
288
|
+
|
|
277
289
|
### Interactive Prompts
|
|
278
290
|
|
|
279
291
|
1. **Provider Selection** - Choose Hetzner Cloud or DigitalOcean
|
|
@@ -310,17 +322,28 @@ npm run format
|
|
|
310
322
|
|
|
311
323
|
```
|
|
312
324
|
tests/
|
|
313
|
-
├── __mocks__/
|
|
314
|
-
├── unit/
|
|
325
|
+
├── __mocks__/ # Mock modules (axios, inquirer, ora, chalk)
|
|
326
|
+
├── unit/ # Unit tests
|
|
315
327
|
│ ├── cloudInit.test.ts
|
|
328
|
+
│ ├── config.test.ts # Config CRUD operations
|
|
329
|
+
│ ├── config-edge.test.ts # Config edge cases (corruption, empty files)
|
|
330
|
+
│ ├── destroy.test.ts # Destroy command unit tests
|
|
331
|
+
│ ├── healthCheck.test.ts # Health check polling tests
|
|
332
|
+
│ ├── healthCheck-edge.test.ts # Health check edge cases (302, 401, 500)
|
|
333
|
+
│ ├── list.test.ts # List command unit tests
|
|
316
334
|
│ ├── logger.test.ts
|
|
317
335
|
│ ├── prompts.test.ts
|
|
336
|
+
│ ├── providerFactory.test.ts # Provider factory tests
|
|
337
|
+
│ ├── status.test.ts # Status command unit tests
|
|
318
338
|
│ └── validators.test.ts
|
|
319
|
-
├── integration/
|
|
320
|
-
│ ├── hetzner.test.ts
|
|
321
|
-
│ └── digitalocean.test.ts
|
|
322
|
-
└── e2e/
|
|
323
|
-
|
|
339
|
+
├── integration/ # Integration tests (provider API calls)
|
|
340
|
+
│ ├── hetzner.test.ts # Including destroyServer tests
|
|
341
|
+
│ └── digitalocean.test.ts # Including destroyServer tests
|
|
342
|
+
└── e2e/ # End-to-end tests (full command flows)
|
|
343
|
+
├── init.test.ts
|
|
344
|
+
├── init-noninteractive.test.ts # Non-interactive mode E2E
|
|
345
|
+
├── status.test.ts # Status command E2E
|
|
346
|
+
└── destroy.test.ts # Destroy command E2E
|
|
324
347
|
```
|
|
325
348
|
|
|
326
349
|
### CI/CD
|
|
@@ -332,7 +355,7 @@ Tests run automatically on every push/PR via GitHub Actions across:
|
|
|
332
355
|
|
|
333
356
|
### Coverage
|
|
334
357
|
|
|
335
|
-
Current coverage: **97%+ statements/lines**, **
|
|
358
|
+
Current coverage: **97%+ statements/lines**, **89%+ branches**, **96%+ functions**. 233 tests across 18 test suites.
|
|
336
359
|
|
|
337
360
|
## 🔧 Troubleshooting
|
|
338
361
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../src/commands/destroy.ts"],"names":[],"mappings":"AA6BA,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ElE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import inquirer from "inquirer";
|
|
2
|
+
import { getServers, findServer, removeServer } from "../utils/config.js";
|
|
3
|
+
import { createProviderWithToken } from "../utils/providerFactory.js";
|
|
4
|
+
import { logger, createSpinner } from "../utils/logger.js";
|
|
5
|
+
async function selectServer() {
|
|
6
|
+
const servers = getServers();
|
|
7
|
+
if (servers.length === 0) {
|
|
8
|
+
logger.info("No servers found.");
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const { serverId } = await inquirer.prompt([
|
|
12
|
+
{
|
|
13
|
+
type: "list",
|
|
14
|
+
name: "serverId",
|
|
15
|
+
message: "Select a server to destroy:",
|
|
16
|
+
choices: servers.map((s) => ({
|
|
17
|
+
name: `${s.name} (${s.ip}) - ${s.provider}`,
|
|
18
|
+
value: s.id,
|
|
19
|
+
})),
|
|
20
|
+
},
|
|
21
|
+
]);
|
|
22
|
+
return servers.find((s) => s.id === serverId);
|
|
23
|
+
}
|
|
24
|
+
export async function destroyCommand(query) {
|
|
25
|
+
let server;
|
|
26
|
+
if (query) {
|
|
27
|
+
server = findServer(query);
|
|
28
|
+
if (!server) {
|
|
29
|
+
logger.error(`Server not found: ${query}`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
server = await selectServer();
|
|
35
|
+
if (!server)
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// First confirmation
|
|
39
|
+
const { confirm } = await inquirer.prompt([
|
|
40
|
+
{
|
|
41
|
+
type: "confirm",
|
|
42
|
+
name: "confirm",
|
|
43
|
+
message: `Are you sure you want to destroy "${server.name}" (${server.ip})?`,
|
|
44
|
+
default: false,
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
if (!confirm) {
|
|
48
|
+
logger.info("Destroy cancelled.");
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Second confirmation: type server name
|
|
52
|
+
const { confirmName } = await inquirer.prompt([
|
|
53
|
+
{
|
|
54
|
+
type: "input",
|
|
55
|
+
name: "confirmName",
|
|
56
|
+
message: `Type the server name "${server.name}" to confirm:`,
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
if (confirmName.trim() !== server.name) {
|
|
60
|
+
logger.error("Server name does not match. Destroy cancelled.");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Ask for API token
|
|
64
|
+
const { apiToken } = await inquirer.prompt([
|
|
65
|
+
{
|
|
66
|
+
type: "password",
|
|
67
|
+
name: "apiToken",
|
|
68
|
+
message: `Enter your ${server.provider} API token:`,
|
|
69
|
+
validate: (input) => (input.trim().length > 0 ? true : "API token is required"),
|
|
70
|
+
},
|
|
71
|
+
]);
|
|
72
|
+
const spinner = createSpinner("Destroying server...");
|
|
73
|
+
spinner.start();
|
|
74
|
+
try {
|
|
75
|
+
const provider = createProviderWithToken(server.provider, apiToken.trim());
|
|
76
|
+
await provider.destroyServer(server.id);
|
|
77
|
+
removeServer(server.id);
|
|
78
|
+
spinner.succeed(`Server "${server.name}" destroyed`);
|
|
79
|
+
logger.success("Server has been removed from your cloud provider and local config.");
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
83
|
+
const isNotFound = message.toLowerCase().includes("not found") || message.toLowerCase().includes("not_found");
|
|
84
|
+
if (isNotFound) {
|
|
85
|
+
removeServer(server.id);
|
|
86
|
+
spinner.warn(`Server not found on ${server.provider} (may have been deleted manually)`);
|
|
87
|
+
logger.info("Removed from local config.");
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
spinner.fail("Failed to destroy server");
|
|
91
|
+
logger.error(message);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=destroy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"destroy.js","sourceRoot":"","sources":["../../src/commands/destroy.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAgBrD,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwJ1E"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,100 +1,146 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createProvider, createProviderWithToken } from "../utils/providerFactory.js";
|
|
2
|
+
import { saveServer } from "../utils/config.js";
|
|
3
|
+
import { waitForCoolify } from "../utils/healthCheck.js";
|
|
3
4
|
import { BACK_SIGNAL, getProviderConfig, getDeploymentConfig, getLocationConfig, getServerTypeConfig, getServerNameConfig, confirmDeployment, } from "../utils/prompts.js";
|
|
4
5
|
import { getCoolifyCloudInit } from "../utils/cloudInit.js";
|
|
5
6
|
import { logger, createSpinner } from "../utils/logger.js";
|
|
6
|
-
function
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
export async function initCommand(options = {}) {
|
|
8
|
+
const isNonInteractive = options.provider !== undefined && options.token !== undefined;
|
|
9
|
+
logger.title("Quicklify - Deploy Coolify in minutes");
|
|
10
|
+
let providerChoice;
|
|
11
|
+
let apiToken;
|
|
12
|
+
let region;
|
|
13
|
+
let serverSize;
|
|
14
|
+
let serverName;
|
|
15
|
+
// Step 1: Select cloud provider
|
|
16
|
+
if (options.provider) {
|
|
17
|
+
if (!["hetzner", "digitalocean"].includes(options.provider)) {
|
|
18
|
+
logger.error(`Invalid provider: ${options.provider}. Use "hetzner" or "digitalocean".`);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
providerChoice = options.provider;
|
|
14
23
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
case "hetzner":
|
|
19
|
-
return new HetznerProvider(token);
|
|
20
|
-
case "digitalocean":
|
|
21
|
-
return new DigitalOceanProvider(token);
|
|
22
|
-
/* istanbul ignore next */
|
|
23
|
-
default:
|
|
24
|
-
throw new Error(`Unknown provider: ${providerName}`);
|
|
24
|
+
else {
|
|
25
|
+
const result = await getProviderConfig();
|
|
26
|
+
providerChoice = result.provider;
|
|
25
27
|
}
|
|
26
|
-
}
|
|
27
|
-
export async function initCommand() {
|
|
28
|
-
logger.title("Quicklify - Deploy Coolify in 4 minutes");
|
|
29
|
-
// Step 1: Select cloud provider
|
|
30
|
-
const { provider: providerChoice } = await getProviderConfig();
|
|
31
28
|
const provider = createProvider(providerChoice);
|
|
32
29
|
logger.info(`Using ${provider.displayName}`);
|
|
33
30
|
// Step 2: Get API token
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
if (options.token) {
|
|
32
|
+
apiToken = options.token;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
const config = await getDeploymentConfig(provider);
|
|
36
|
+
apiToken = config.apiToken;
|
|
37
|
+
}
|
|
37
38
|
// Step 3: Validate API token
|
|
39
|
+
const providerWithToken = createProviderWithToken(providerChoice, apiToken);
|
|
38
40
|
const tokenSpinner = createSpinner("Validating API token...");
|
|
39
41
|
tokenSpinner.start();
|
|
40
|
-
const isValid = await providerWithToken.validateToken(
|
|
42
|
+
const isValid = await providerWithToken.validateToken(apiToken);
|
|
41
43
|
if (!isValid) {
|
|
42
44
|
tokenSpinner.fail("Invalid API token");
|
|
43
45
|
logger.error("Please check your API token and try again");
|
|
46
|
+
if (isNonInteractive) {
|
|
47
|
+
process.exit(1);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
44
50
|
return;
|
|
45
51
|
}
|
|
46
52
|
tokenSpinner.succeed("API token validated");
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
config.serverSize = serverSize;
|
|
66
|
-
step = 6;
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
case 6: {
|
|
70
|
-
const serverName = await getServerNameConfig();
|
|
71
|
-
if (serverName === BACK_SIGNAL) {
|
|
53
|
+
// Step 4: Region
|
|
54
|
+
if (options.region) {
|
|
55
|
+
region = options.region;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Interactive region selection with back navigation
|
|
59
|
+
let step = 4;
|
|
60
|
+
region = "";
|
|
61
|
+
serverSize = "";
|
|
62
|
+
serverName = "";
|
|
63
|
+
while (step >= 4 && step <= 7) {
|
|
64
|
+
switch (step) {
|
|
65
|
+
case 4: {
|
|
66
|
+
const r = await getLocationConfig(providerWithToken);
|
|
67
|
+
if (r === BACK_SIGNAL)
|
|
68
|
+
break;
|
|
69
|
+
region = r;
|
|
72
70
|
step = 5;
|
|
73
71
|
break;
|
|
74
72
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
case 5: {
|
|
74
|
+
const s = await getServerTypeConfig(providerWithToken, region);
|
|
75
|
+
if (s === BACK_SIGNAL) {
|
|
76
|
+
step = 4;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
serverSize = s;
|
|
82
80
|
step = 6;
|
|
83
81
|
break;
|
|
84
82
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
case 6: {
|
|
84
|
+
const n = await getServerNameConfig();
|
|
85
|
+
if (n === BACK_SIGNAL) {
|
|
86
|
+
step = 5;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
serverName = n;
|
|
90
|
+
step = 7;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case 7: {
|
|
94
|
+
const config = {
|
|
95
|
+
provider: providerChoice,
|
|
96
|
+
apiToken,
|
|
97
|
+
region,
|
|
98
|
+
serverSize,
|
|
99
|
+
serverName,
|
|
100
|
+
};
|
|
101
|
+
const confirmed = await confirmDeployment(config, providerWithToken);
|
|
102
|
+
if (confirmed === BACK_SIGNAL) {
|
|
103
|
+
step = 6;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
if (!confirmed) {
|
|
107
|
+
logger.warning("Deployment cancelled");
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
step = 8;
|
|
111
|
+
break;
|
|
88
112
|
}
|
|
89
|
-
step = 8;
|
|
90
|
-
break;
|
|
91
113
|
}
|
|
92
114
|
}
|
|
115
|
+
// Deploy
|
|
116
|
+
return deployServer(providerChoice, providerWithToken, region, serverSize, serverName);
|
|
93
117
|
}
|
|
118
|
+
// Non-interactive or partially interactive: size, name
|
|
119
|
+
if (options.size) {
|
|
120
|
+
serverSize = options.size;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
let s = BACK_SIGNAL;
|
|
124
|
+
while (s === BACK_SIGNAL) {
|
|
125
|
+
s = await getServerTypeConfig(providerWithToken, region);
|
|
126
|
+
}
|
|
127
|
+
serverSize = s;
|
|
128
|
+
}
|
|
129
|
+
if (options.name) {
|
|
130
|
+
serverName = options.name;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
let n = BACK_SIGNAL;
|
|
134
|
+
while (n === BACK_SIGNAL) {
|
|
135
|
+
n = await getServerNameConfig();
|
|
136
|
+
}
|
|
137
|
+
serverName = n;
|
|
138
|
+
}
|
|
139
|
+
return deployServer(providerChoice, providerWithToken, region, serverSize, serverName);
|
|
140
|
+
}
|
|
141
|
+
async function deployServer(providerChoice, providerWithToken, region, serverSize, serverName) {
|
|
94
142
|
try {
|
|
95
|
-
|
|
96
|
-
const cloudInit = getCoolifyCloudInit(config.serverName);
|
|
97
|
-
// Create server with retry on unavailable server type
|
|
143
|
+
const cloudInit = getCoolifyCloudInit(serverName);
|
|
98
144
|
let server;
|
|
99
145
|
let retries = 0;
|
|
100
146
|
const maxRetries = 2;
|
|
@@ -105,9 +151,9 @@ export async function initCommand() {
|
|
|
105
151
|
serverSpinner.start();
|
|
106
152
|
try {
|
|
107
153
|
server = await providerWithToken.createServer({
|
|
108
|
-
name:
|
|
109
|
-
region
|
|
110
|
-
size:
|
|
154
|
+
name: serverName,
|
|
155
|
+
region,
|
|
156
|
+
size: serverSize,
|
|
111
157
|
cloudInit,
|
|
112
158
|
});
|
|
113
159
|
serverSpinner.succeed(`Server created (ID: ${server.id})`);
|
|
@@ -116,18 +162,18 @@ export async function initCommand() {
|
|
|
116
162
|
serverSpinner.fail("Server creation failed");
|
|
117
163
|
const errorMsg = createError instanceof Error ? createError.message : "";
|
|
118
164
|
if (errorMsg.includes("already") && errorMsg.includes("used")) {
|
|
119
|
-
logger.warning(`Server name "${
|
|
165
|
+
logger.warning(`Server name "${serverName}" is already in use`);
|
|
120
166
|
logger.info("Please choose a different name:");
|
|
121
167
|
let newName = BACK_SIGNAL;
|
|
122
168
|
while (newName === BACK_SIGNAL) {
|
|
123
169
|
newName = await getServerNameConfig();
|
|
124
170
|
}
|
|
125
|
-
|
|
171
|
+
serverName = newName;
|
|
126
172
|
retries++;
|
|
127
173
|
}
|
|
128
174
|
else if (errorMsg.includes("location disabled")) {
|
|
129
|
-
failedLocations.push(
|
|
130
|
-
logger.warning(`Location "${
|
|
175
|
+
failedLocations.push(region);
|
|
176
|
+
logger.warning(`Location "${region}" is currently disabled for new servers`);
|
|
131
177
|
logger.info("Please select a different region and server type:");
|
|
132
178
|
let pickedSize = false;
|
|
133
179
|
while (!pickedSize) {
|
|
@@ -135,11 +181,11 @@ export async function initCommand() {
|
|
|
135
181
|
while (newRegion === BACK_SIGNAL) {
|
|
136
182
|
newRegion = await getLocationConfig(providerWithToken, failedLocations);
|
|
137
183
|
}
|
|
138
|
-
|
|
139
|
-
const newSize = await getServerTypeConfig(providerWithToken,
|
|
184
|
+
region = newRegion;
|
|
185
|
+
const newSize = await getServerTypeConfig(providerWithToken, region);
|
|
140
186
|
if (newSize === BACK_SIGNAL)
|
|
141
|
-
continue;
|
|
142
|
-
|
|
187
|
+
continue;
|
|
188
|
+
serverSize = newSize;
|
|
143
189
|
pickedSize = true;
|
|
144
190
|
}
|
|
145
191
|
retries++;
|
|
@@ -149,14 +195,14 @@ export async function initCommand() {
|
|
|
149
195
|
errorMsg.includes("sold out") ||
|
|
150
196
|
errorMsg.includes("unsupported")) {
|
|
151
197
|
if (retries < maxRetries) {
|
|
152
|
-
failedTypes.push(
|
|
153
|
-
logger.warning(`Server type "${
|
|
198
|
+
failedTypes.push(serverSize);
|
|
199
|
+
logger.warning(`Server type "${serverSize}" is not available in this location`);
|
|
154
200
|
logger.info("Please select a different server type:");
|
|
155
201
|
let newSize = BACK_SIGNAL;
|
|
156
202
|
while (newSize === BACK_SIGNAL) {
|
|
157
|
-
newSize = await getServerTypeConfig(providerWithToken,
|
|
203
|
+
newSize = await getServerTypeConfig(providerWithToken, region, failedTypes);
|
|
158
204
|
}
|
|
159
|
-
|
|
205
|
+
serverSize = newSize;
|
|
160
206
|
retries++;
|
|
161
207
|
}
|
|
162
208
|
else {
|
|
@@ -195,24 +241,34 @@ export async function initCommand() {
|
|
|
195
241
|
const details = await providerWithToken.getServerDetails(server.id);
|
|
196
242
|
server.ip = details.ip;
|
|
197
243
|
}
|
|
198
|
-
//
|
|
244
|
+
// Health check polling instead of blind wait
|
|
199
245
|
const isDigitalOcean = providerChoice === "digitalocean";
|
|
200
|
-
const
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
246
|
+
const minWait = isDigitalOcean ? 120000 : 60000;
|
|
247
|
+
const ready = await waitForCoolify(server.ip, minWait);
|
|
248
|
+
// Save server record to config
|
|
249
|
+
saveServer({
|
|
250
|
+
id: server.id,
|
|
251
|
+
name: serverName,
|
|
252
|
+
provider: providerChoice,
|
|
253
|
+
ip: server.ip,
|
|
254
|
+
region,
|
|
255
|
+
size: serverSize,
|
|
256
|
+
createdAt: new Date().toISOString(),
|
|
257
|
+
});
|
|
207
258
|
// Success message
|
|
208
|
-
const extraWait = isDigitalOcean ? "3-5" : "1-2";
|
|
209
259
|
logger.title("Deployment Successful!");
|
|
210
260
|
console.log();
|
|
211
261
|
logger.success(`Server IP: ${server.ip}`);
|
|
212
262
|
logger.success(`Access Coolify: http://${server.ip}:8000`);
|
|
213
263
|
console.log();
|
|
214
|
-
|
|
215
|
-
|
|
264
|
+
if (ready) {
|
|
265
|
+
logger.info("Coolify is ready! Open the URL above to get started.");
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
logger.warning("Coolify did not respond yet. Please check in a few minutes.");
|
|
269
|
+
logger.info(`You can check status later with: quicklify status ${server.ip}`);
|
|
270
|
+
}
|
|
271
|
+
logger.info("Server saved to local config. Use 'quicklify list' to see all servers.");
|
|
216
272
|
console.log();
|
|
217
273
|
}
|
|
218
274
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBjD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getServers } from "../utils/config.js";
|
|
2
|
+
import { logger } from "../utils/logger.js";
|
|
3
|
+
export async function listCommand() {
|
|
4
|
+
const servers = getServers();
|
|
5
|
+
if (servers.length === 0) {
|
|
6
|
+
logger.info("No servers found. Deploy one with: quicklify init");
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
logger.title("Registered Servers");
|
|
10
|
+
// Table header
|
|
11
|
+
const header = `${"ID".padEnd(12)} ${"Name".padEnd(20)} ${"Provider".padEnd(14)} ${"IP".padEnd(16)} ${"Region".padEnd(10)} ${"Created".padEnd(12)}`;
|
|
12
|
+
console.log(header);
|
|
13
|
+
console.log("─".repeat(header.length));
|
|
14
|
+
// Table rows
|
|
15
|
+
for (const server of servers) {
|
|
16
|
+
const created = server.createdAt ? server.createdAt.split("T")[0] : "N/A";
|
|
17
|
+
console.log(`${server.id.padEnd(12)} ${server.name.padEnd(20)} ${server.provider.padEnd(14)} ${server.ip.padEnd(16)} ${server.region.padEnd(10)} ${created.padEnd(12)}`);
|
|
18
|
+
}
|
|
19
|
+
console.log();
|
|
20
|
+
logger.info(`Total: ${servers.length} server(s)`);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEnC,eAAe;IACf,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACpJ,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvC,aAAa;IACb,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1E,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAC5J,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AA8BA,wBAAsB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkEjE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import inquirer from "inquirer";
|
|
3
|
+
import { getServers, findServer } from "../utils/config.js";
|
|
4
|
+
import { createProviderWithToken } from "../utils/providerFactory.js";
|
|
5
|
+
import { logger, createSpinner } from "../utils/logger.js";
|
|
6
|
+
async function selectServer() {
|
|
7
|
+
const servers = getServers();
|
|
8
|
+
if (servers.length === 0) {
|
|
9
|
+
logger.info("No servers found. Deploy one with: quicklify init");
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
const { serverId } = await inquirer.prompt([
|
|
13
|
+
{
|
|
14
|
+
type: "list",
|
|
15
|
+
name: "serverId",
|
|
16
|
+
message: "Select a server:",
|
|
17
|
+
choices: servers.map((s) => ({
|
|
18
|
+
name: `${s.name} (${s.ip}) - ${s.provider}`,
|
|
19
|
+
value: s.id,
|
|
20
|
+
})),
|
|
21
|
+
},
|
|
22
|
+
]);
|
|
23
|
+
return servers.find((s) => s.id === serverId);
|
|
24
|
+
}
|
|
25
|
+
export async function statusCommand(query) {
|
|
26
|
+
let server;
|
|
27
|
+
if (query) {
|
|
28
|
+
server = findServer(query);
|
|
29
|
+
if (!server) {
|
|
30
|
+
logger.error(`Server not found: ${query}`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
server = await selectServer();
|
|
36
|
+
if (!server)
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Ask for API token
|
|
40
|
+
const { apiToken } = await inquirer.prompt([
|
|
41
|
+
{
|
|
42
|
+
type: "password",
|
|
43
|
+
name: "apiToken",
|
|
44
|
+
message: `Enter your ${server.provider} API token:`,
|
|
45
|
+
validate: (input) => (input.trim().length > 0 ? true : "API token is required"),
|
|
46
|
+
},
|
|
47
|
+
]);
|
|
48
|
+
const spinner = createSpinner("Checking server status...");
|
|
49
|
+
spinner.start();
|
|
50
|
+
try {
|
|
51
|
+
const provider = createProviderWithToken(server.provider, apiToken.trim());
|
|
52
|
+
// Check server status via provider API
|
|
53
|
+
const serverStatus = await provider.getServerStatus(server.id);
|
|
54
|
+
// Check Coolify health
|
|
55
|
+
let coolifyStatus = "unknown";
|
|
56
|
+
try {
|
|
57
|
+
await axios.get(`http://${server.ip}:8000`, {
|
|
58
|
+
timeout: 5000,
|
|
59
|
+
validateStatus: () => true,
|
|
60
|
+
});
|
|
61
|
+
coolifyStatus = "running";
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
coolifyStatus = "not reachable";
|
|
65
|
+
}
|
|
66
|
+
spinner.succeed("Status retrieved");
|
|
67
|
+
console.log();
|
|
68
|
+
logger.info(`Name: ${server.name}`);
|
|
69
|
+
logger.info(`Provider: ${server.provider}`);
|
|
70
|
+
logger.info(`IP: ${server.ip}`);
|
|
71
|
+
logger.info(`Region: ${server.region}`);
|
|
72
|
+
logger.info(`Size: ${server.size}`);
|
|
73
|
+
logger.info(`Server Status: ${serverStatus}`);
|
|
74
|
+
logger.info(`Coolify Status: ${coolifyStatus}`);
|
|
75
|
+
console.log();
|
|
76
|
+
if (coolifyStatus === "running") {
|
|
77
|
+
logger.success(`Access Coolify: http://${server.ip}:8000`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
logger.warning("Coolify is not reachable. It may still be installing.");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
spinner.fail("Failed to check status");
|
|
85
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,9 @@ import { readFileSync } from "fs";
|
|
|
4
4
|
import { fileURLToPath } from "url";
|
|
5
5
|
import { dirname, join } from "path";
|
|
6
6
|
import { initCommand } from "./commands/init.js";
|
|
7
|
+
import { listCommand } from "./commands/list.js";
|
|
8
|
+
import { statusCommand } from "./commands/status.js";
|
|
9
|
+
import { destroyCommand } from "./commands/destroy.js";
|
|
7
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
8
11
|
const __dirname = dirname(__filename);
|
|
9
12
|
const pkg = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8"));
|
|
@@ -15,6 +18,20 @@ program
|
|
|
15
18
|
program
|
|
16
19
|
.command("init")
|
|
17
20
|
.description("Deploy a new Coolify instance on a cloud provider")
|
|
21
|
+
.option("--provider <provider>", "Cloud provider (hetzner, digitalocean)")
|
|
22
|
+
.option("--token <token>", "API token")
|
|
23
|
+
.option("--region <region>", "Server region")
|
|
24
|
+
.option("--size <size>", "Server size")
|
|
25
|
+
.option("--name <name>", "Server name")
|
|
18
26
|
.action(initCommand);
|
|
27
|
+
program.command("list").description("List all registered servers").action(listCommand);
|
|
28
|
+
program
|
|
29
|
+
.command("status [query]")
|
|
30
|
+
.description("Check server and Coolify status")
|
|
31
|
+
.action(statusCommand);
|
|
32
|
+
program
|
|
33
|
+
.command("destroy [query]")
|
|
34
|
+
.description("Destroy a registered server")
|
|
35
|
+
.action(destroyCommand);
|
|
19
36
|
program.parse();
|
|
20
37
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAElF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,uBAAuB,EAAE,wCAAwC,CAAC;KACzE,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;KACtC,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC;KAC5C,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC;KACtC,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC;KACtC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvF,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/providers/base.d.ts
CHANGED
|
@@ -10,5 +10,6 @@ export interface CloudProvider {
|
|
|
10
10
|
createServer(config: ServerConfig): Promise<ServerResult>;
|
|
11
11
|
getServerStatus(serverId: string): Promise<string>;
|
|
12
12
|
getServerDetails(serverId: string): Promise<ServerResult>;
|
|
13
|
+
destroyServer(serverId: string): Promise<void>;
|
|
13
14
|
}
|
|
14
15
|
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,UAAU,IAAI,MAAM,EAAE,CAAC;IACvB,cAAc,IAAI,UAAU,EAAE,CAAC;IAC/B,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACjE,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,UAAU,IAAI,MAAM,EAAE,CAAC;IACvB,cAAc,IAAI,UAAU,EAAE,CAAC;IAC/B,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACjE,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1D,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD"}
|
|
@@ -10,6 +10,7 @@ export declare class DigitalOceanProvider implements CloudProvider {
|
|
|
10
10
|
createServer(config: ServerConfig): Promise<ServerResult>;
|
|
11
11
|
getServerDetails(serverId: string): Promise<ServerResult>;
|
|
12
12
|
getServerStatus(serverId: string): Promise<string>;
|
|
13
|
+
destroyServer(serverId: string): Promise<void>;
|
|
13
14
|
getRegions(): Region[];
|
|
14
15
|
getServerSizes(): ServerSize[];
|
|
15
16
|
getAvailableLocations(): Promise<Region[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digitalocean.d.ts","sourceRoot":"","sources":["../../src/providers/digitalocean.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAuBxF,qBAAa,oBAAqB,YAAW,aAAa;IACxD,IAAI,SAAkB;IACtB,WAAW,SAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAqC;gBAExC,QAAQ,EAAE,MAAM;IAItB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCzD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAezD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"digitalocean.d.ts","sourceRoot":"","sources":["../../src/providers/digitalocean.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAuBxF,qBAAa,oBAAqB,YAAW,aAAa;IACxD,IAAI,SAAkB;IACtB,WAAW,SAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAqC;gBAExC,QAAQ,EAAE,MAAM;IAItB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAyCzD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAezD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAelD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpD,UAAU,IAAI,MAAM,EAAE;IAWtB,cAAc,IAAI,UAAU,EAAE;IASxB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiB1C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CA6BvE"}
|
|
@@ -74,6 +74,19 @@ export class DigitalOceanProvider {
|
|
|
74
74
|
throw new Error(`Failed to get server status: ${error instanceof Error ? error.message : String(error)}`);
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
+
async destroyServer(serverId) {
|
|
78
|
+
try {
|
|
79
|
+
await axios.delete(`${this.baseUrl}/droplets/${serverId}`, {
|
|
80
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (axios.isAxiosError(error)) {
|
|
85
|
+
throw new Error(`Failed to destroy server: ${error.response?.data?.message || error.message}`);
|
|
86
|
+
}
|
|
87
|
+
throw new Error(`Failed to destroy server: ${error instanceof Error ? error.message : String(error)}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
77
90
|
getRegions() {
|
|
78
91
|
return [
|
|
79
92
|
{ id: "nyc1", name: "New York 1", location: "USA" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digitalocean.js","sourceRoot":"","sources":["../../src/providers/digitalocean.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"digitalocean.js","sourceRoot":"","sources":["../../src/providers/digitalocean.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export declare class HetznerProvider implements CloudProvider {
|
|
|
10
10
|
createServer(config: ServerConfig): Promise<ServerResult>;
|
|
11
11
|
getServerDetails(serverId: string): Promise<ServerResult>;
|
|
12
12
|
getServerStatus(serverId: string): Promise<string>;
|
|
13
|
+
destroyServer(serverId: string): Promise<void>;
|
|
13
14
|
getRegions(): Region[];
|
|
14
15
|
getServerSizes(): ServerSize[];
|
|
15
16
|
getAvailableLocations(): Promise<Region[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hetzner.d.ts","sourceRoot":"","sources":["../../src/providers/hetzner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAsCxF,qBAAa,eAAgB,YAAW,aAAa;IACnD,IAAI,SAAa;IACjB,WAAW,SAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAkC;gBAErC,QAAQ,EAAE,MAAM;IAItB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCzD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAWzD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"hetzner.d.ts","sourceRoot":"","sources":["../../src/providers/hetzner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAsCxF,qBAAa,eAAgB,YAAW,aAAa;IACnD,IAAI,SAAa;IACjB,WAAW,SAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAkC;gBAErC,QAAQ,EAAE,MAAM;IAItB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCzD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAWzD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAalD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpD,UAAU,IAAI,MAAM,EAAE;IAStB,cAAc,IAAI,UAAU,EAAE;IASxB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAe1C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CA+CvE"}
|
|
@@ -66,6 +66,19 @@ export class HetznerProvider {
|
|
|
66
66
|
throw new Error(`Failed to get server status: ${error instanceof Error ? error.message : String(error)}`);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
+
async destroyServer(serverId) {
|
|
70
|
+
try {
|
|
71
|
+
await axios.delete(`${this.baseUrl}/servers/${serverId}`, {
|
|
72
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (axios.isAxiosError(error)) {
|
|
77
|
+
throw new Error(`Failed to destroy server: ${error.response?.data?.error?.message || error.message}`);
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`Failed to destroy server: ${error instanceof Error ? error.message : String(error)}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
69
82
|
getRegions() {
|
|
70
83
|
return [
|
|
71
84
|
{ id: "nbg1", name: "Nuremberg", location: "Germany" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hetzner.js","sourceRoot":"","sources":["../../src/providers/hetzner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hetzner.js","sourceRoot":"","sources":["../../src/providers/hetzner.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -29,4 +29,20 @@ export interface DeploymentConfig {
|
|
|
29
29
|
serverSize: string;
|
|
30
30
|
serverName: string;
|
|
31
31
|
}
|
|
32
|
+
export interface ServerRecord {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
provider: string;
|
|
36
|
+
ip: string;
|
|
37
|
+
region: string;
|
|
38
|
+
size: string;
|
|
39
|
+
createdAt: string;
|
|
40
|
+
}
|
|
41
|
+
export interface InitOptions {
|
|
42
|
+
provider?: string;
|
|
43
|
+
token?: string;
|
|
44
|
+
region?: string;
|
|
45
|
+
size?: string;
|
|
46
|
+
name?: string;
|
|
47
|
+
}
|
|
32
48
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ServerRecord } from "../types/index.js";
|
|
2
|
+
declare const CONFIG_DIR: string;
|
|
3
|
+
declare const SERVERS_FILE: string;
|
|
4
|
+
export declare function getServers(): ServerRecord[];
|
|
5
|
+
export declare function saveServer(record: ServerRecord): void;
|
|
6
|
+
export declare function removeServer(id: string): boolean;
|
|
7
|
+
export declare function findServer(query: string): ServerRecord | undefined;
|
|
8
|
+
export { CONFIG_DIR, SERVERS_FILE };
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,QAAA,MAAM,UAAU,QAAgC,CAAC;AACjD,QAAA,MAAM,YAAY,QAAmC,CAAC;AAQtD,wBAAgB,UAAU,IAAI,YAAY,EAAE,CAc3C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAKrD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAShD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAIlE;AAGD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
const CONFIG_DIR = join(homedir(), ".quicklify");
|
|
5
|
+
const SERVERS_FILE = join(CONFIG_DIR, "servers.json");
|
|
6
|
+
function ensureConfigDir() {
|
|
7
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
8
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function getServers() {
|
|
12
|
+
try {
|
|
13
|
+
if (!existsSync(SERVERS_FILE)) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
const data = readFileSync(SERVERS_FILE, "utf-8");
|
|
17
|
+
const parsed = JSON.parse(data);
|
|
18
|
+
if (!Array.isArray(parsed)) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
return parsed;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function saveServer(record) {
|
|
28
|
+
ensureConfigDir();
|
|
29
|
+
const servers = getServers();
|
|
30
|
+
servers.push(record);
|
|
31
|
+
writeFileSync(SERVERS_FILE, JSON.stringify(servers, null, 2), { mode: 0o600 });
|
|
32
|
+
}
|
|
33
|
+
export function removeServer(id) {
|
|
34
|
+
const servers = getServers();
|
|
35
|
+
const filtered = servers.filter((s) => s.id !== id);
|
|
36
|
+
if (filtered.length === servers.length) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
ensureConfigDir();
|
|
40
|
+
writeFileSync(SERVERS_FILE, JSON.stringify(filtered, null, 2), { mode: 0o600 });
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
export function findServer(query) {
|
|
44
|
+
const servers = getServers();
|
|
45
|
+
// Search by IP first (unique), then by name
|
|
46
|
+
return servers.find((s) => s.ip === query) || servers.find((s) => s.name === query);
|
|
47
|
+
}
|
|
48
|
+
// Exported for testing
|
|
49
|
+
export { CONFIG_DIR, SERVERS_FILE };
|
|
50
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAEtD,SAAS,eAAe;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,eAAe,EAAE,CAAC;IAClB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,eAAe,EAAE,CAAC;IAClB,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,4CAA4C;IAC5C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AACtF,CAAC;AAED,uBAAuB;AACvB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healthCheck.d.ts","sourceRoot":"","sources":["../../src/utils/healthCheck.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,cAAc,GAAE,MAAa,EAC7B,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,OAAO,CAAC,CA4BlB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { createSpinner } from "./logger.js";
|
|
3
|
+
export async function waitForCoolify(ip, minWaitMs, pollIntervalMs = 5000, maxAttempts = 60) {
|
|
4
|
+
const spinner = createSpinner("Installing Coolify...");
|
|
5
|
+
spinner.start();
|
|
6
|
+
// Minimum wait for cloud-init to start
|
|
7
|
+
await new Promise((resolve) => setTimeout(resolve, minWaitMs));
|
|
8
|
+
spinner.text = "Waiting for Coolify to be ready...";
|
|
9
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
10
|
+
try {
|
|
11
|
+
await axios.get(`http://${ip}:8000`, {
|
|
12
|
+
timeout: 5000,
|
|
13
|
+
validateStatus: () => true,
|
|
14
|
+
});
|
|
15
|
+
spinner.succeed("Coolify is ready!");
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Connection refused = Coolify not running yet
|
|
20
|
+
spinner.text = `Waiting for Coolify... (attempt ${attempt}/${maxAttempts})`;
|
|
21
|
+
if (attempt < maxAttempts) {
|
|
22
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
spinner.warn("Coolify did not respond in time");
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=healthCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"healthCheck.js","sourceRoot":"","sources":["../../src/utils/healthCheck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAU,EACV,SAAiB,EACjB,iBAAyB,IAAI,EAC7B,cAAsB,EAAE;IAExB,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACvD,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,uCAAuC;IACvC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/D,OAAO,CAAC,IAAI,GAAG,oCAAoC,CAAC;IAEpD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE;gBACnC,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;aAC3B,CAAC,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;YAC/C,OAAO,CAAC,IAAI,GAAG,mCAAmC,OAAO,IAAI,WAAW,GAAG,CAAC;YAC5E,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;gBAC1B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CloudProvider } from "../providers/base.js";
|
|
2
|
+
export declare function createProvider(providerName: string): CloudProvider;
|
|
3
|
+
export declare function createProviderWithToken(providerName: string, token: string): CloudProvider;
|
|
4
|
+
//# sourceMappingURL=providerFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerFactory.d.ts","sourceRoot":"","sources":["../../src/utils/providerFactory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CASlE;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAU1F"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { HetznerProvider } from "../providers/hetzner.js";
|
|
2
|
+
import { DigitalOceanProvider } from "../providers/digitalocean.js";
|
|
3
|
+
export function createProvider(providerName) {
|
|
4
|
+
switch (providerName) {
|
|
5
|
+
case "hetzner":
|
|
6
|
+
return new HetznerProvider("");
|
|
7
|
+
case "digitalocean":
|
|
8
|
+
return new DigitalOceanProvider("");
|
|
9
|
+
default:
|
|
10
|
+
throw new Error(`Unknown provider: ${providerName}`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function createProviderWithToken(providerName, token) {
|
|
14
|
+
switch (providerName) {
|
|
15
|
+
case "hetzner":
|
|
16
|
+
return new HetznerProvider(token);
|
|
17
|
+
case "digitalocean":
|
|
18
|
+
return new DigitalOceanProvider(token);
|
|
19
|
+
/* istanbul ignore next */
|
|
20
|
+
default:
|
|
21
|
+
throw new Error(`Unknown provider: ${providerName}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=providerFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerFactory.js","sourceRoot":"","sources":["../../src/utils/providerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGpE,MAAM,UAAU,cAAc,CAAC,YAAoB;IACjD,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;QACjC,KAAK,cAAc;YACjB,OAAO,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACtC;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,YAAoB,EAAE,KAAa;IACzE,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QACpC,KAAK,cAAc;YACjB,OAAO,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACzC,0BAA0B;QAC1B;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|