quicklify 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.github/workflows/publish.yml +25 -0
  2. package/LICENSE +21 -21
  3. package/README.md +1 -0
  4. package/package.json +1 -1
  5. package/.claude/settings.local.json +0 -26
  6. package/dist/commands/init.d.ts +0 -2
  7. package/dist/commands/init.d.ts.map +0 -1
  8. package/dist/commands/init.js +0 -82
  9. package/dist/commands/init.js.map +0 -1
  10. package/dist/index.d.ts +0 -3
  11. package/dist/index.d.ts.map +0 -1
  12. package/dist/index.js +0 -14
  13. package/dist/index.js.map +0 -1
  14. package/dist/providers/base.d.ts +0 -11
  15. package/dist/providers/base.d.ts.map +0 -1
  16. package/dist/providers/base.js +0 -2
  17. package/dist/providers/base.js.map +0 -1
  18. package/dist/providers/digitalocean.d.ts +0 -14
  19. package/dist/providers/digitalocean.d.ts.map +0 -1
  20. package/dist/providers/digitalocean.js +0 -29
  21. package/dist/providers/digitalocean.js.map +0 -1
  22. package/dist/providers/hetzner.d.ts +0 -15
  23. package/dist/providers/hetzner.d.ts.map +0 -1
  24. package/dist/providers/hetzner.js +0 -73
  25. package/dist/providers/hetzner.js.map +0 -1
  26. package/dist/types/index.d.ts +0 -33
  27. package/dist/types/index.d.ts.map +0 -1
  28. package/dist/types/index.js +0 -2
  29. package/dist/types/index.js.map +0 -1
  30. package/dist/utils/cloudInit.d.ts +0 -2
  31. package/dist/utils/cloudInit.d.ts.map +0 -1
  32. package/dist/utils/cloudInit.js +0 -30
  33. package/dist/utils/cloudInit.js.map +0 -1
  34. package/dist/utils/logger.d.ts +0 -11
  35. package/dist/utils/logger.d.ts.map +0 -1
  36. package/dist/utils/logger.js +0 -31
  37. package/dist/utils/logger.js.map +0 -1
  38. package/dist/utils/prompts.d.ts +0 -5
  39. package/dist/utils/prompts.d.ts.map +0 -1
  40. package/dist/utils/prompts.js +0 -77
  41. package/dist/utils/prompts.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ publish:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+
14
+ - uses: actions/setup-node@v4
15
+ with:
16
+ node-version: '20'
17
+ registry-url: 'https://registry.npmjs.org'
18
+
19
+ - run: npm ci
20
+
21
+ - run: npm test
22
+
23
+ - run: npm publish
24
+ env:
25
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 omrfc
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 omrfc
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -5,6 +5,7 @@
5
5
  ![npm](https://img.shields.io/npm/v/quicklify)
6
6
  ![Downloads](https://img.shields.io/npm/dw/quicklify)
7
7
  ![License](https://img.shields.io/badge/license-MIT-blue)
8
+ ![GitHub stars](https://img.shields.io/github/stars/omrfc/quicklify?style=flat-square)
8
9
 
9
10
  > Deploy Coolify to any cloud VPS in 4 minutes
10
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quicklify",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Automate Coolify deployment on cloud providers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,26 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(npm install:*)",
5
- "Bash(npx tsc:*)",
6
- "Bash(git init:*)",
7
- "Bash(git add:*)",
8
- "Bash(npm run build:*)",
9
- "Bash(npm run dev:*)",
10
- "Bash(npx jest:*)",
11
- "Bash(gh repo view:*)",
12
- "Bash(git branch:*)",
13
- "Bash(git remote add:*)",
14
- "Bash(git fetch:*)",
15
- "Bash(git pull:*)",
16
- "Bash(git stash:*)",
17
- "Bash(git reset:*)",
18
- "Bash(git checkout:*)",
19
- "Bash(git rm:*)",
20
- "Bash(git commit -m \"$\\(cat <<''EOF''\nInitial commit: Quicklify v0.1.0\n\n- CLI tool for automated Coolify deployment\n- Hetzner Cloud provider support\n- 79 tests with 100% coverage\n- Multi-platform CI/CD \\(Ubuntu, macOS, Windows\\)\n- TypeScript + Commander.js + Inquirer.js\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>\nEOF\n\\)\")",
21
- "Bash(git push:*)",
22
- "Bash(git remote set-url:*)",
23
- "Bash(git commit:*)"
24
- ]
25
- }
26
- }
@@ -1,2 +0,0 @@
1
- export declare function initCommand(): Promise<void>;
2
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,kBA+FhC"}
@@ -1,82 +0,0 @@
1
- import { HetznerProvider } from "../providers/hetzner.js";
2
- import { getDeploymentConfig, confirmDeployment } from "../utils/prompts.js";
3
- import { getCoolifyCloudInit } from "../utils/cloudInit.js";
4
- import { logger, createSpinner } from "../utils/logger.js";
5
- export async function initCommand() {
6
- logger.title("Quicklify - Deploy Coolify in 60 seconds");
7
- // For MVP, we only support Hetzner
8
- // Later: Add provider selection prompt
9
- logger.info("Using Hetzner Cloud (more providers coming soon!)");
10
- const provider = new HetznerProvider(""); // Token will be set from config
11
- // Get deployment configuration
12
- const config = await getDeploymentConfig(provider);
13
- // Update provider with actual token
14
- const providerWithToken = new HetznerProvider(config.apiToken);
15
- // Confirm deployment
16
- const confirmed = await confirmDeployment(config, providerWithToken);
17
- if (!confirmed) {
18
- logger.warning("Deployment cancelled");
19
- return;
20
- }
21
- try {
22
- // Validate API token
23
- const tokenSpinner = createSpinner("Validating API token...");
24
- tokenSpinner.start();
25
- const isValid = await providerWithToken.validateToken(config.apiToken);
26
- if (!isValid) {
27
- tokenSpinner.fail("Invalid API token");
28
- logger.error("Please check your API token and try again");
29
- return;
30
- }
31
- tokenSpinner.succeed("API token validated");
32
- // Generate cloud-init script
33
- const cloudInit = getCoolifyCloudInit(config.serverName);
34
- // Create server
35
- const serverSpinner = createSpinner("Creating VPS server...");
36
- serverSpinner.start();
37
- const server = await providerWithToken.createServer({
38
- name: config.serverName,
39
- region: config.region,
40
- size: config.serverSize,
41
- cloudInit,
42
- });
43
- serverSpinner.succeed(`Server created (ID: ${server.id})`);
44
- // Wait for server to be running
45
- const statusSpinner = createSpinner("Waiting for server to boot...");
46
- statusSpinner.start();
47
- let status = await providerWithToken.getServerStatus(server.id);
48
- let attempts = 0;
49
- const maxAttempts = 30;
50
- while (status !== "running" && attempts < maxAttempts) {
51
- await new Promise((resolve) => setTimeout(resolve, 1000));
52
- status = await providerWithToken.getServerStatus(server.id);
53
- attempts++;
54
- }
55
- if (status !== "running") {
56
- statusSpinner.fail("Server failed to start");
57
- logger.error("Please check your cloud provider dashboard");
58
- return;
59
- }
60
- statusSpinner.succeed("Server is running");
61
- // Installing Coolify
62
- const installSpinner = createSpinner("Installing Coolify (this takes 3-5 minutes)...");
63
- installSpinner.start();
64
- // Wait for Coolify installation (cloud-init runs in background)
65
- await new Promise((resolve) => setTimeout(resolve, 180000));
66
- installSpinner.succeed("Coolify installation completed");
67
- // Success message
68
- logger.title("Deployment Successful!");
69
- console.log();
70
- logger.success(`Server IP: ${server.ip}`);
71
- logger.success(`Access Coolify: https://${server.ip}:8000`);
72
- console.log();
73
- logger.info("Default credentials will be shown on first login");
74
- logger.info("Please wait 1-2 more minutes for Coolify to fully initialize");
75
- console.log();
76
- }
77
- catch (error) {
78
- logger.error(`Deployment failed: ${error.message}`);
79
- process.exit(1);
80
- }
81
- }
82
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from "commander";
3
- import { initCommand } from "./commands/init.js";
4
- const program = new Command();
5
- program
6
- .name("quicklify")
7
- .description("Automate Coolify deployment on cloud providers")
8
- .version("0.1.0");
9
- program
10
- .command("init")
11
- .description("Deploy a new Coolify instance on a cloud provider")
12
- .action(initCommand);
13
- program.parse();
14
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -1,11 +0,0 @@
1
- import type { Region, ServerSize, ServerConfig, ServerResult } from "../types/index.js";
2
- export interface CloudProvider {
3
- name: string;
4
- displayName: string;
5
- validateToken(token: string): Promise<boolean>;
6
- getRegions(): Region[];
7
- getServerSizes(): ServerSize[];
8
- createServer(config: ServerConfig): Promise<ServerResult>;
9
- getServerStatus(serverId: string): Promise<string>;
10
- }
11
- //# sourceMappingURL=base.d.ts.map
@@ -1 +0,0 @@
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,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1D,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpD"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":""}
@@ -1,14 +0,0 @@
1
- import type { CloudProvider } from "./base.js";
2
- import type { Region, ServerSize, ServerConfig, ServerResult } from "../types/index.js";
3
- export declare class DigitalOceanProvider implements CloudProvider {
4
- name: string;
5
- displayName: string;
6
- private apiToken;
7
- constructor(apiToken: string);
8
- validateToken(_token: string): Promise<boolean>;
9
- getRegions(): Region[];
10
- getServerSizes(): ServerSize[];
11
- createServer(_config: ServerConfig): Promise<ServerResult>;
12
- getServerStatus(_serverId: string): Promise<string>;
13
- }
14
- //# sourceMappingURL=digitalocean.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"digitalocean.d.ts","sourceRoot":"","sources":["../../src/providers/digitalocean.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAExF,qBAAa,oBAAqB,YAAW,aAAa;IACxD,IAAI,SAAkB;IACtB,WAAW,SAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAItB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD,UAAU,IAAI,MAAM,EAAE;IAKtB,cAAc,IAAI,UAAU,EAAE;IAKxB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAK1D,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAI1D"}
@@ -1,29 +0,0 @@
1
- export class DigitalOceanProvider {
2
- name = "digitalocean";
3
- displayName = "DigitalOcean";
4
- apiToken;
5
- constructor(apiToken) {
6
- this.apiToken = apiToken;
7
- }
8
- async validateToken(_token) {
9
- // TODO: Implement DigitalOcean API call
10
- return false;
11
- }
12
- getRegions() {
13
- // TODO: Implement DigitalOcean regions
14
- return [];
15
- }
16
- getServerSizes() {
17
- // TODO: Implement DigitalOcean server sizes
18
- return [];
19
- }
20
- async createServer(_config) {
21
- // TODO: Implement DigitalOcean API call
22
- throw new Error("Not implemented");
23
- }
24
- async getServerStatus(_serverId) {
25
- // TODO: Implement DigitalOcean API call
26
- return "unknown";
27
- }
28
- }
29
- //# sourceMappingURL=digitalocean.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"digitalocean.js","sourceRoot":"","sources":["../../src/providers/digitalocean.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,oBAAoB;IAC/B,IAAI,GAAG,cAAc,CAAC;IACtB,WAAW,GAAG,cAAc,CAAC;IACrB,QAAQ,CAAS;IAEzB,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,wCAAwC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,uCAAuC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,cAAc;QACZ,4CAA4C;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAqB;QACtC,wCAAwC;QACxC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,wCAAwC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -1,15 +0,0 @@
1
- import type { CloudProvider } from "./base.js";
2
- import type { Region, ServerSize, ServerConfig, ServerResult } from "../types/index.js";
3
- export declare class HetznerProvider implements CloudProvider {
4
- name: string;
5
- displayName: string;
6
- private apiToken;
7
- private baseUrl;
8
- constructor(apiToken: string);
9
- validateToken(token: string): Promise<boolean>;
10
- createServer(config: ServerConfig): Promise<ServerResult>;
11
- getServerStatus(serverId: string): Promise<string>;
12
- getRegions(): Region[];
13
- getServerSizes(): ServerSize[];
14
- }
15
- //# sourceMappingURL=hetzner.d.ts.map
@@ -1 +0,0 @@
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;AAExF,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;IA+BzD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWxD,UAAU,IAAI,MAAM,EAAE;IAStB,cAAc,IAAI,UAAU,EAAE;CAQ/B"}
@@ -1,73 +0,0 @@
1
- import axios from "axios";
2
- export class HetznerProvider {
3
- name = "hetzner";
4
- displayName = "Hetzner Cloud";
5
- apiToken;
6
- baseUrl = "https://api.hetzner.cloud/v1";
7
- constructor(apiToken) {
8
- this.apiToken = apiToken;
9
- }
10
- async validateToken(token) {
11
- try {
12
- await axios.get(`${this.baseUrl}/servers`, {
13
- headers: { Authorization: `Bearer ${token}` },
14
- });
15
- return true;
16
- }
17
- catch {
18
- return false;
19
- }
20
- }
21
- async createServer(config) {
22
- try {
23
- const response = await axios.post(`${this.baseUrl}/servers`, {
24
- name: config.name,
25
- server_type: config.size,
26
- location: config.region,
27
- image: "ubuntu-24.04",
28
- user_data: config.cloudInit,
29
- }, {
30
- headers: {
31
- Authorization: `Bearer ${this.apiToken}`,
32
- "Content-Type": "application/json",
33
- },
34
- });
35
- return {
36
- id: response.data.server.id.toString(),
37
- ip: response.data.server.public_net.ipv4.ip,
38
- status: response.data.server.status,
39
- };
40
- }
41
- catch (error) {
42
- throw new Error(`Failed to create server: ${error.response?.data?.error?.message || error.message}`);
43
- }
44
- }
45
- async getServerStatus(serverId) {
46
- try {
47
- const response = await axios.get(`${this.baseUrl}/servers/${serverId}`, {
48
- headers: { Authorization: `Bearer ${this.apiToken}` },
49
- });
50
- return response.data.server.status;
51
- }
52
- catch (error) {
53
- throw new Error(`Failed to get server status: ${error.message}`);
54
- }
55
- }
56
- getRegions() {
57
- return [
58
- { id: "nbg1", name: "Nuremberg", location: "Germany" },
59
- { id: "fsn1", name: "Falkenstein", location: "Germany" },
60
- { id: "hel1", name: "Helsinki", location: "Finland" },
61
- { id: "ash", name: "Ashburn", location: "USA" },
62
- ];
63
- }
64
- getServerSizes() {
65
- return [
66
- { id: "cax11", name: "CAX11", vcpu: 2, ram: 4, disk: 40, price: "€3.85/mo", recommended: true },
67
- { id: "cpx11", name: "CPX11", vcpu: 2, ram: 2, disk: 40, price: "€4.15/mo" },
68
- { id: "cax21", name: "CAX21", vcpu: 4, ram: 8, disk: 80, price: "€7.05/mo" },
69
- { id: "cpx21", name: "CPX21", vcpu: 3, ram: 4, disk: 80, price: "€7.35/mo" },
70
- ];
71
- }
72
- }
73
- //# sourceMappingURL=hetzner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hetzner.js","sourceRoot":"","sources":["../../src/providers/hetzner.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- export interface Region {
2
- id: string;
3
- name: string;
4
- location: string;
5
- }
6
- export interface ServerSize {
7
- id: string;
8
- name: string;
9
- vcpu: number;
10
- ram: number;
11
- disk: number;
12
- price: string;
13
- recommended?: boolean;
14
- }
15
- export interface ServerConfig {
16
- name: string;
17
- size: string;
18
- region: string;
19
- cloudInit: string;
20
- }
21
- export interface ServerResult {
22
- id: string;
23
- ip: string;
24
- status: string;
25
- }
26
- export interface DeploymentConfig {
27
- provider: string;
28
- apiToken: string;
29
- region: string;
30
- serverSize: string;
31
- serverName: string;
32
- }
33
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export declare function getCoolifyCloudInit(serverName: string): string;
2
- //# sourceMappingURL=cloudInit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudInit.d.ts","sourceRoot":"","sources":["../../src/utils/cloudInit.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CA4B9D"}
@@ -1,30 +0,0 @@
1
- export function getCoolifyCloudInit(serverName) {
2
- return `#!/bin/bash
3
- set -e
4
-
5
- echo "=================================="
6
- echo "Quicklify Auto-Installer"
7
- echo "Server: ${serverName}"
8
- echo "=================================="
9
-
10
- # Update system
11
- echo "Updating system packages..."
12
- apt-get update -y
13
-
14
- # Install Coolify
15
- echo "Installing Coolify..."
16
- curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
17
-
18
- # Wait for services
19
- echo "Waiting for Coolify services to start..."
20
- sleep 30
21
-
22
- echo "=================================="
23
- echo "Coolify installation completed!"
24
- echo "=================================="
25
- echo ""
26
- echo "Please wait 2-3 more minutes for Coolify to fully initialize."
27
- echo "Then access your instance at: https://YOUR_SERVER_IP:8000"
28
- `;
29
- }
30
- //# sourceMappingURL=cloudInit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloudInit.js","sourceRoot":"","sources":["../../src/utils/cloudInit.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,OAAO;;;;;gBAKO,UAAU;;;;;;;;;;;;;;;;;;;;;CAqBzB,CAAC;AACF,CAAC"}
@@ -1,11 +0,0 @@
1
- import { type Ora } from "ora";
2
- export declare const logger: {
3
- info: (message: string) => void;
4
- success: (message: string) => void;
5
- error: (message: string) => void;
6
- warning: (message: string) => void;
7
- title: (message: string) => void;
8
- step: (message: string) => void;
9
- };
10
- export declare function createSpinner(text: string): Ora;
11
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAEpC,eAAO,MAAM,MAAM;oBACD,MAAM;uBAIH,MAAM;qBAIR,MAAM;uBAIJ,MAAM;qBAIR,MAAM;oBAMP,MAAM;CAGvB,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAK/C"}
@@ -1,31 +0,0 @@
1
- import chalk from "chalk";
2
- import ora from "ora";
3
- export const logger = {
4
- info: (message) => {
5
- console.log(chalk.blue("ℹ"), message);
6
- },
7
- success: (message) => {
8
- console.log(chalk.green("✔"), message);
9
- },
10
- error: (message) => {
11
- console.log(chalk.red("✖"), message);
12
- },
13
- warning: (message) => {
14
- console.log(chalk.yellow("⚠"), message);
15
- },
16
- title: (message) => {
17
- console.log();
18
- console.log(chalk.bold.cyan(message));
19
- console.log();
20
- },
21
- step: (message) => {
22
- console.log(chalk.gray("→"), message);
23
- },
24
- };
25
- export function createSpinner(text) {
26
- return ora({
27
- text,
28
- color: "cyan",
29
- });
30
- }
31
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAiB,MAAM,KAAK,CAAC;AAEpC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,GAAG,CAAC;QACT,IAAI;QACJ,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;AACL,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { CloudProvider } from "../providers/base.js";
2
- import type { DeploymentConfig } from "../types/index.js";
3
- export declare function getDeploymentConfig(provider: CloudProvider): Promise<DeploymentConfig>;
4
- export declare function confirmDeployment(config: DeploymentConfig, provider: CloudProvider): Promise<boolean>;
5
- //# sourceMappingURL=prompts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuD5F;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAsB3G"}
@@ -1,77 +0,0 @@
1
- import inquirer from "inquirer";
2
- export async function getDeploymentConfig(provider) {
3
- const answers = await inquirer.prompt([
4
- {
5
- type: "password",
6
- name: "apiToken",
7
- message: `Enter your ${provider.displayName} API token:`,
8
- validate: (input) => {
9
- if (!input || input.trim().length === 0) {
10
- return "API token is required";
11
- }
12
- return true;
13
- },
14
- },
15
- {
16
- type: "list",
17
- name: "region",
18
- message: "Select region:",
19
- choices: provider.getRegions().map((r) => ({
20
- name: `${r.name} (${r.location})`,
21
- value: r.id,
22
- })),
23
- },
24
- {
25
- type: "list",
26
- name: "size",
27
- message: "Select server size:",
28
- choices: provider.getServerSizes().map((s) => ({
29
- name: `${s.name} - ${s.vcpu} vCPU, ${s.ram}GB RAM - ${s.price}${s.recommended ? " ⭐ Recommended" : ""}`,
30
- value: s.id,
31
- })),
32
- },
33
- {
34
- type: "input",
35
- name: "serverName",
36
- message: "Server name:",
37
- default: "coolify-server",
38
- validate: (input) => {
39
- if (!input || input.trim().length === 0) {
40
- return "Server name is required";
41
- }
42
- if (!/^[a-z0-9-]+$/.test(input)) {
43
- return "Server name must contain only lowercase letters, numbers, and hyphens";
44
- }
45
- return true;
46
- },
47
- },
48
- ]);
49
- return {
50
- provider: provider.name,
51
- apiToken: answers.apiToken.trim(),
52
- region: answers.region,
53
- serverSize: answers.size,
54
- serverName: answers.serverName.trim(),
55
- };
56
- }
57
- export async function confirmDeployment(config, provider) {
58
- const region = provider.getRegions().find((r) => r.id === config.region);
59
- const size = provider.getServerSizes().find((s) => s.id === config.serverSize);
60
- console.log("\nDeployment Summary:");
61
- console.log(` Provider: ${provider.displayName}`);
62
- console.log(` Region: ${region?.name} (${region?.location})`);
63
- console.log(` Size: ${size?.name} - ${size?.vcpu} vCPU, ${size?.ram}GB RAM`);
64
- console.log(` Price: ${size?.price}`);
65
- console.log(` Server Name: ${config.serverName}`);
66
- console.log();
67
- const { confirm } = await inquirer.prompt([
68
- {
69
- type: "confirm",
70
- name: "confirm",
71
- message: "Proceed with deployment?",
72
- default: true,
73
- },
74
- ]);
75
- return confirm;
76
- }
77
- //# sourceMappingURL=prompts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}