quicklify 0.8.0 → 1.0.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 +220 -32
- package/README.tr.md +800 -0
- package/dist/commands/add.d.ts +9 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +151 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/backup.d.ts +1 -0
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +105 -6
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +1 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +5 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +93 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/maintain.d.ts +8 -0
- package/dist/commands/maintain.d.ts.map +1 -0
- package/dist/commands/maintain.js +253 -0
- package/dist/commands/maintain.js.map +1 -0
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +2 -1
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/remove.d.ts +2 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +25 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/restart.d.ts.map +1 -1
- package/dist/commands/restart.js +4 -0
- package/dist/commands/restart.js.map +1 -1
- package/dist/commands/restore.js +1 -1
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/secure.d.ts.map +1 -1
- package/dist/commands/secure.js +1 -1
- package/dist/commands/secure.js.map +1 -1
- package/dist/commands/status.d.ts +6 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +120 -7
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/transfer.d.ts.map +1 -1
- package/dist/commands/transfer.js +9 -1
- package/dist/commands/transfer.js.map +1 -1
- package/dist/commands/update.d.ts +5 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +101 -14
- package/dist/commands/update.js.map +1 -1
- package/dist/index.js +36 -5
- package/dist/index.js.map +1 -1
- package/dist/providers/digitalocean.d.ts.map +1 -1
- package/dist/providers/digitalocean.js +4 -1
- package/dist/providers/digitalocean.js.map +1 -1
- package/dist/providers/hetzner.d.ts.map +1 -1
- package/dist/providers/hetzner.js +2 -2
- package/dist/providers/hetzner.js.map +1 -1
- package/dist/providers/linode.d.ts +21 -0
- package/dist/providers/linode.d.ts.map +1 -0
- package/dist/providers/linode.js +203 -0
- package/dist/providers/linode.js.map +1 -0
- package/dist/providers/vultr.d.ts +21 -0
- package/dist/providers/vultr.d.ts.map +1 -0
- package/dist/providers/vultr.js +183 -0
- package/dist/providers/vultr.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts +1 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +7 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/configMerge.d.ts +16 -0
- package/dist/utils/configMerge.d.ts.map +1 -0
- package/dist/utils/configMerge.js +34 -0
- package/dist/utils/configMerge.js.map +1 -0
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +2 -0
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/providerFactory.d.ts.map +1 -1
- package/dist/utils/providerFactory.js +10 -0
- package/dist/utils/providerFactory.js.map +1 -1
- package/dist/utils/serverSelect.d.ts +1 -0
- package/dist/utils/serverSelect.d.ts.map +1 -1
- package/dist/utils/serverSelect.js +37 -6
- package/dist/utils/serverSelect.js.map +1 -1
- package/dist/utils/ssh.d.ts.map +1 -1
- package/dist/utils/ssh.js +3 -1
- package/dist/utils/ssh.js.map +1 -1
- package/dist/utils/templates.d.ts +6 -0
- package/dist/utils/templates.d.ts.map +1 -0
- package/dist/utils/templates.js +49 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/yamlConfig.d.ts +8 -0
- package/dist/utils/yamlConfig.d.ts.map +1 -0
- package/dist/utils/yamlConfig.js +136 -0
- package/dist/utils/yamlConfig.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CloudProvider } from "./base.js";
|
|
2
|
+
import type { Region, ServerSize, ServerConfig, ServerResult } from "../types/index.js";
|
|
3
|
+
export declare class LinodeProvider 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
|
+
uploadSshKey(name: string, publicKey: string): Promise<string>;
|
|
11
|
+
createServer(config: ServerConfig): Promise<ServerResult>;
|
|
12
|
+
getServerDetails(serverId: string): Promise<ServerResult>;
|
|
13
|
+
getServerStatus(serverId: string): Promise<string>;
|
|
14
|
+
destroyServer(serverId: string): Promise<void>;
|
|
15
|
+
rebootServer(serverId: string): Promise<void>;
|
|
16
|
+
getRegions(): Region[];
|
|
17
|
+
getServerSizes(): ServerSize[];
|
|
18
|
+
getAvailableLocations(): Promise<Region[]>;
|
|
19
|
+
getAvailableServerTypes(_location: string): Promise<ServerSize[]>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=linode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linode.d.ts","sourceRoot":"","sources":["../../src/providers/linode.ts"],"names":[],"mappings":"AAEA,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,cAAe,YAAW,aAAa;IAClD,IAAI,SAAY;IAChB,WAAW,SAAqB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAA+B;gBAElC,QAAQ,EAAE,MAAM;IAItB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B9D,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAqDzD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAYzD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAclD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBnD,UAAU,IAAI,MAAM,EAAE;IAStB,cAAc,IAAI,UAAU,EAAE;IAQxB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiB1C,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CA2BxE"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import crypto from "crypto";
|
|
2
|
+
import axios from "axios";
|
|
3
|
+
export class LinodeProvider {
|
|
4
|
+
name = "linode";
|
|
5
|
+
displayName = "Linode (Akamai)";
|
|
6
|
+
apiToken;
|
|
7
|
+
baseUrl = "https://api.linode.com/v4";
|
|
8
|
+
constructor(apiToken) {
|
|
9
|
+
this.apiToken = apiToken;
|
|
10
|
+
}
|
|
11
|
+
async validateToken(token) {
|
|
12
|
+
try {
|
|
13
|
+
await axios.get(`${this.baseUrl}/profile`, {
|
|
14
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
15
|
+
});
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async uploadSshKey(name, publicKey) {
|
|
23
|
+
try {
|
|
24
|
+
const response = await axios.post(`${this.baseUrl}/profile/sshkeys`, { label: name, ssh_key: publicKey }, {
|
|
25
|
+
headers: {
|
|
26
|
+
Authorization: `Bearer ${this.apiToken}`,
|
|
27
|
+
"Content-Type": "application/json",
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
return response.data.id.toString();
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
// Key already exists → find by matching public key
|
|
34
|
+
if (axios.isAxiosError(error) && error.response?.status === 400) {
|
|
35
|
+
const listResponse = await axios.get(`${this.baseUrl}/profile/sshkeys`, {
|
|
36
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
37
|
+
});
|
|
38
|
+
const existing = listResponse.data.data.find((k) => k.ssh_key.trim() === publicKey.trim());
|
|
39
|
+
if (existing)
|
|
40
|
+
return existing.id.toString();
|
|
41
|
+
}
|
|
42
|
+
throw new Error(`Failed to upload SSH key: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async createServer(config) {
|
|
46
|
+
try {
|
|
47
|
+
// Ensure all character classes for Linode password strength: upper + lower + digit + special
|
|
48
|
+
const rootPass = `Ql1!${crypto.randomBytes(21).toString("base64").slice(0, 28)}`;
|
|
49
|
+
const body = {
|
|
50
|
+
label: config.name,
|
|
51
|
+
type: config.size,
|
|
52
|
+
region: config.region,
|
|
53
|
+
image: "linode/ubuntu22.04",
|
|
54
|
+
root_pass: rootPass,
|
|
55
|
+
metadata: { user_data: Buffer.from(config.cloudInit).toString("base64") },
|
|
56
|
+
};
|
|
57
|
+
if (config.sshKeyIds?.length) {
|
|
58
|
+
// Linode uses authorized_users (profile usernames) to inject SSH keys.
|
|
59
|
+
// Fetch profile username; if it fails, cloud-init handles SSH key injection as fallback.
|
|
60
|
+
try {
|
|
61
|
+
const profileRes = await axios.get(`${this.baseUrl}/profile`, {
|
|
62
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
63
|
+
});
|
|
64
|
+
const username = profileRes.data?.username;
|
|
65
|
+
if (typeof username === "string" && username.length > 0) {
|
|
66
|
+
body.authorized_users = [username];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Profile fetch failed; cloud-init will handle SSH key setup
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const response = await axios.post(`${this.baseUrl}/linode/instances`, body, {
|
|
74
|
+
headers: {
|
|
75
|
+
Authorization: `Bearer ${this.apiToken}`,
|
|
76
|
+
"Content-Type": "application/json",
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
const instance = response.data;
|
|
80
|
+
return {
|
|
81
|
+
id: instance.id.toString(),
|
|
82
|
+
ip: instance.ipv4?.[0] || "pending",
|
|
83
|
+
status: instance.status === "provisioning" ? "initializing" : instance.status,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (axios.isAxiosError(error)) {
|
|
88
|
+
const reasons = error.response?.data?.errors?.map((e) => e.reason).join(", ");
|
|
89
|
+
throw new Error(`Failed to create server: ${reasons || error.message}`, { cause: error });
|
|
90
|
+
}
|
|
91
|
+
throw new Error(`Failed to create server: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async getServerDetails(serverId) {
|
|
95
|
+
const response = await axios.get(`${this.baseUrl}/linode/instances/${serverId}`, {
|
|
96
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
97
|
+
});
|
|
98
|
+
const instance = response.data;
|
|
99
|
+
return {
|
|
100
|
+
id: instance.id.toString(),
|
|
101
|
+
ip: instance.ipv4?.[0] || "pending",
|
|
102
|
+
status: instance.status === "running" ? "running" : instance.status,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
async getServerStatus(serverId) {
|
|
106
|
+
try {
|
|
107
|
+
const response = await axios.get(`${this.baseUrl}/linode/instances/${serverId}`, {
|
|
108
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
109
|
+
});
|
|
110
|
+
return response.data.status;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
throw new Error(`Failed to get server status: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async destroyServer(serverId) {
|
|
117
|
+
try {
|
|
118
|
+
await axios.delete(`${this.baseUrl}/linode/instances/${serverId}`, {
|
|
119
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (axios.isAxiosError(error)) {
|
|
124
|
+
const reasons = error.response?.data?.errors?.map((e) => e.reason).join(", ");
|
|
125
|
+
throw new Error(`Failed to destroy server: ${reasons || error.message}`, { cause: error });
|
|
126
|
+
}
|
|
127
|
+
throw new Error(`Failed to destroy server: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async rebootServer(serverId) {
|
|
131
|
+
try {
|
|
132
|
+
await axios.post(`${this.baseUrl}/linode/instances/${serverId}/reboot`, {}, {
|
|
133
|
+
headers: {
|
|
134
|
+
Authorization: `Bearer ${this.apiToken}`,
|
|
135
|
+
"Content-Type": "application/json",
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
if (axios.isAxiosError(error)) {
|
|
141
|
+
const reasons = error.response?.data?.errors?.map((e) => e.reason).join(", ");
|
|
142
|
+
throw new Error(`Failed to reboot server: ${reasons || error.message}`, { cause: error });
|
|
143
|
+
}
|
|
144
|
+
throw new Error(`Failed to reboot server: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
getRegions() {
|
|
148
|
+
return [
|
|
149
|
+
{ id: "us-east", name: "Newark, NJ", location: "USA" },
|
|
150
|
+
{ id: "eu-west", name: "London", location: "UK" },
|
|
151
|
+
{ id: "eu-central", name: "Frankfurt", location: "Germany" },
|
|
152
|
+
{ id: "ap-south", name: "Singapore", location: "Singapore" },
|
|
153
|
+
];
|
|
154
|
+
}
|
|
155
|
+
getServerSizes() {
|
|
156
|
+
return [
|
|
157
|
+
{ id: "g6-standard-2", name: "Linode 4GB", vcpu: 2, ram: 4, disk: 80, price: "$12/mo" },
|
|
158
|
+
{ id: "g6-standard-4", name: "Linode 8GB", vcpu: 4, ram: 8, disk: 160, price: "$24/mo" },
|
|
159
|
+
{ id: "g6-standard-6", name: "Linode 16GB", vcpu: 6, ram: 16, disk: 320, price: "$48/mo" },
|
|
160
|
+
];
|
|
161
|
+
}
|
|
162
|
+
async getAvailableLocations() {
|
|
163
|
+
try {
|
|
164
|
+
const response = await axios.get(`${this.baseUrl}/regions`, {
|
|
165
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
166
|
+
});
|
|
167
|
+
return response.data.data
|
|
168
|
+
.filter((r) => r.status === "ok" && r.capabilities.includes("Linodes"))
|
|
169
|
+
.map((r) => ({
|
|
170
|
+
id: r.id,
|
|
171
|
+
name: r.label,
|
|
172
|
+
location: r.country,
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return this.getRegions();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async getAvailableServerTypes(_location) {
|
|
180
|
+
try {
|
|
181
|
+
const response = await axios.get(`${this.baseUrl}/linode/types`, {
|
|
182
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
183
|
+
});
|
|
184
|
+
const MIN_RAM_MB = 4096; // Coolify requires at least 2GB, recommend 4GB
|
|
185
|
+
const types = response.data.data.filter((t) => t.memory >= MIN_RAM_MB && t.id.startsWith("g6-standard"));
|
|
186
|
+
if (types.length === 0) {
|
|
187
|
+
return this.getServerSizes();
|
|
188
|
+
}
|
|
189
|
+
return types.map((t) => ({
|
|
190
|
+
id: t.id,
|
|
191
|
+
name: t.label,
|
|
192
|
+
vcpu: t.vcpus,
|
|
193
|
+
ram: Math.round(t.memory / 1024),
|
|
194
|
+
disk: Math.round(t.disk / 1024),
|
|
195
|
+
price: `$${t.price.monthly.toFixed(2)}/mo`,
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return this.getServerSizes();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=linode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linode.js","sourceRoot":"","sources":["../../src/providers/linode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CloudProvider } from "./base.js";
|
|
2
|
+
import type { Region, ServerSize, ServerConfig, ServerResult } from "../types/index.js";
|
|
3
|
+
export declare class VultrProvider 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
|
+
uploadSshKey(name: string, publicKey: string): Promise<string>;
|
|
11
|
+
createServer(config: ServerConfig): Promise<ServerResult>;
|
|
12
|
+
getServerDetails(serverId: string): Promise<ServerResult>;
|
|
13
|
+
getServerStatus(serverId: string): Promise<string>;
|
|
14
|
+
destroyServer(serverId: string): Promise<void>;
|
|
15
|
+
rebootServer(serverId: string): Promise<void>;
|
|
16
|
+
getRegions(): Region[];
|
|
17
|
+
getServerSizes(): ServerSize[];
|
|
18
|
+
getAvailableLocations(): Promise<Region[]>;
|
|
19
|
+
getAvailableServerTypes(location: string): Promise<ServerSize[]>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=vultr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vultr.d.ts","sourceRoot":"","sources":["../../src/providers/vultr.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,aAAc,YAAW,aAAa;IACjD,IAAI,SAAW;IACf,WAAW,SAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,QAAQ,EAAE,MAAM;IAItB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW9C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B9D,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAuCzD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAYzD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAclD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnD,UAAU,IAAI,MAAM,EAAE;IAStB,cAAc,IAAI,UAAU,EAAE;IAQxB,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiB1C,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CA2BvE"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
export class VultrProvider {
|
|
3
|
+
name = "vultr";
|
|
4
|
+
displayName = "Vultr";
|
|
5
|
+
apiToken;
|
|
6
|
+
baseUrl = "https://api.vultr.com/v2";
|
|
7
|
+
constructor(apiToken) {
|
|
8
|
+
this.apiToken = apiToken;
|
|
9
|
+
}
|
|
10
|
+
async validateToken(token) {
|
|
11
|
+
try {
|
|
12
|
+
await axios.get(`${this.baseUrl}/account`, {
|
|
13
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
14
|
+
});
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async uploadSshKey(name, publicKey) {
|
|
22
|
+
try {
|
|
23
|
+
const response = await axios.post(`${this.baseUrl}/ssh-keys`, { name, ssh_key: publicKey }, {
|
|
24
|
+
headers: {
|
|
25
|
+
Authorization: `Bearer ${this.apiToken}`,
|
|
26
|
+
"Content-Type": "application/json",
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
return response.data.ssh_key.id;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
// Key already exists -> find by matching public key
|
|
33
|
+
if (axios.isAxiosError(error) && error.response?.status === 409) {
|
|
34
|
+
const listResponse = await axios.get(`${this.baseUrl}/ssh-keys`, {
|
|
35
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
36
|
+
});
|
|
37
|
+
const existing = listResponse.data.ssh_keys.find((k) => k.ssh_key.trim() === publicKey.trim());
|
|
38
|
+
if (existing)
|
|
39
|
+
return existing.id;
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`Failed to upload SSH key: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async createServer(config) {
|
|
45
|
+
try {
|
|
46
|
+
const body = {
|
|
47
|
+
label: config.name,
|
|
48
|
+
plan: config.size,
|
|
49
|
+
region: config.region,
|
|
50
|
+
os_id: 2284, // Ubuntu 24.04
|
|
51
|
+
user_data: Buffer.from(config.cloudInit).toString("base64"),
|
|
52
|
+
};
|
|
53
|
+
if (config.sshKeyIds?.length) {
|
|
54
|
+
body.sshkey_id = config.sshKeyIds;
|
|
55
|
+
}
|
|
56
|
+
const response = await axios.post(`${this.baseUrl}/instances`, body, {
|
|
57
|
+
headers: {
|
|
58
|
+
Authorization: `Bearer ${this.apiToken}`,
|
|
59
|
+
"Content-Type": "application/json",
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
const instance = response.data.instance;
|
|
63
|
+
return {
|
|
64
|
+
id: instance.id,
|
|
65
|
+
ip: instance.main_ip || "pending",
|
|
66
|
+
status: instance.power_status,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (axios.isAxiosError(error)) {
|
|
71
|
+
throw new Error(`Failed to create server: ${error.response?.data?.error || error.message}`, { cause: error });
|
|
72
|
+
}
|
|
73
|
+
throw new Error(`Failed to create server: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async getServerDetails(serverId) {
|
|
77
|
+
const response = await axios.get(`${this.baseUrl}/instances/${serverId}`, {
|
|
78
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
79
|
+
});
|
|
80
|
+
const instance = response.data.instance;
|
|
81
|
+
return {
|
|
82
|
+
id: instance.id,
|
|
83
|
+
ip: instance.main_ip,
|
|
84
|
+
status: instance.power_status === "running" ? "running" : instance.power_status,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
async getServerStatus(serverId) {
|
|
88
|
+
try {
|
|
89
|
+
const response = await axios.get(`${this.baseUrl}/instances/${serverId}`, {
|
|
90
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
91
|
+
});
|
|
92
|
+
return response.data.instance.power_status;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
throw new Error(`Failed to get server status: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async destroyServer(serverId) {
|
|
99
|
+
try {
|
|
100
|
+
await axios.delete(`${this.baseUrl}/instances/${serverId}`, {
|
|
101
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (axios.isAxiosError(error)) {
|
|
106
|
+
throw new Error(`Failed to destroy server: ${error.response?.data?.error || error.message}`, { cause: error });
|
|
107
|
+
}
|
|
108
|
+
throw new Error(`Failed to destroy server: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async rebootServer(serverId) {
|
|
112
|
+
try {
|
|
113
|
+
await axios.post(`${this.baseUrl}/instances/${serverId}/reboot`, {}, {
|
|
114
|
+
headers: {
|
|
115
|
+
Authorization: `Bearer ${this.apiToken}`,
|
|
116
|
+
"Content-Type": "application/json",
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (axios.isAxiosError(error)) {
|
|
122
|
+
throw new Error(`Failed to reboot server: ${error.response?.data?.error || error.message}`, { cause: error });
|
|
123
|
+
}
|
|
124
|
+
throw new Error(`Failed to reboot server: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
getRegions() {
|
|
128
|
+
return [
|
|
129
|
+
{ id: "ewr", name: "New Jersey", location: "USA" },
|
|
130
|
+
{ id: "ord", name: "Chicago", location: "USA" },
|
|
131
|
+
{ id: "ams", name: "Amsterdam", location: "Netherlands" },
|
|
132
|
+
{ id: "fra", name: "Frankfurt", location: "Germany" },
|
|
133
|
+
];
|
|
134
|
+
}
|
|
135
|
+
getServerSizes() {
|
|
136
|
+
return [
|
|
137
|
+
{ id: "vc2-1c-2gb", name: "VC2-1C-2GB", vcpu: 1, ram: 2, disk: 55, price: "$10/mo" },
|
|
138
|
+
{ id: "vc2-2c-4gb", name: "VC2-2C-4GB", vcpu: 2, ram: 4, disk: 80, price: "$20/mo" },
|
|
139
|
+
{ id: "vc2-4c-8gb", name: "VC2-4C-8GB", vcpu: 4, ram: 8, disk: 160, price: "$40/mo" },
|
|
140
|
+
];
|
|
141
|
+
}
|
|
142
|
+
async getAvailableLocations() {
|
|
143
|
+
try {
|
|
144
|
+
const response = await axios.get(`${this.baseUrl}/regions`, {
|
|
145
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
146
|
+
});
|
|
147
|
+
return response.data.regions
|
|
148
|
+
.filter((r) => r.options && r.options.length > 0)
|
|
149
|
+
.map((r) => ({
|
|
150
|
+
id: r.id,
|
|
151
|
+
name: r.city,
|
|
152
|
+
location: r.country,
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return this.getRegions();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async getAvailableServerTypes(location) {
|
|
160
|
+
try {
|
|
161
|
+
const response = await axios.get(`${this.baseUrl}/plans`, {
|
|
162
|
+
headers: { Authorization: `Bearer ${this.apiToken}` },
|
|
163
|
+
});
|
|
164
|
+
const MIN_RAM_MB = 2048; // Coolify requires at least 2GB RAM
|
|
165
|
+
const plans = response.data.plans.filter((p) => p.type === "vc2" && p.ram >= MIN_RAM_MB && p.locations.includes(location));
|
|
166
|
+
if (plans.length === 0) {
|
|
167
|
+
return this.getServerSizes();
|
|
168
|
+
}
|
|
169
|
+
return plans.map((p) => ({
|
|
170
|
+
id: p.id,
|
|
171
|
+
name: p.id.toUpperCase(),
|
|
172
|
+
vcpu: p.vcpu_count,
|
|
173
|
+
ram: p.ram / 1024,
|
|
174
|
+
disk: p.disk,
|
|
175
|
+
price: `$${p.monthly_cost.toFixed(2)}/mo`,
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return this.getServerSizes();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=vultr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vultr.js","sourceRoot":"","sources":["../../src/providers/vultr.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -46,6 +46,28 @@ export interface InitOptions {
|
|
|
46
46
|
size?: string;
|
|
47
47
|
name?: string;
|
|
48
48
|
fullSetup?: boolean;
|
|
49
|
+
config?: string;
|
|
50
|
+
template?: string;
|
|
51
|
+
}
|
|
52
|
+
export type TemplateName = "starter" | "production" | "dev";
|
|
53
|
+
export interface TemplateProviderDefaults {
|
|
54
|
+
region: string;
|
|
55
|
+
size: string;
|
|
56
|
+
}
|
|
57
|
+
export interface TemplateDefinition {
|
|
58
|
+
name: TemplateName;
|
|
59
|
+
description: string;
|
|
60
|
+
defaults: Record<string, TemplateProviderDefaults>;
|
|
61
|
+
fullSetup: boolean;
|
|
62
|
+
}
|
|
63
|
+
export interface QuicklifyYamlConfig {
|
|
64
|
+
template?: TemplateName;
|
|
65
|
+
provider?: string;
|
|
66
|
+
region?: string;
|
|
67
|
+
size?: string;
|
|
68
|
+
name?: string;
|
|
69
|
+
fullSetup?: boolean;
|
|
70
|
+
domain?: string;
|
|
49
71
|
}
|
|
50
72
|
export interface QuicklifyConfig {
|
|
51
73
|
provider?: string;
|
|
@@ -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;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;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;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -6,5 +6,6 @@ export declare function getServers(): ServerRecord[];
|
|
|
6
6
|
export declare function saveServer(record: ServerRecord): void;
|
|
7
7
|
export declare function removeServer(id: string): boolean;
|
|
8
8
|
export declare function findServer(query: string): ServerRecord | undefined;
|
|
9
|
+
export declare function findServers(query: string): ServerRecord[];
|
|
9
10
|
export { CONFIG_DIR, SERVERS_FILE, BACKUPS_DIR };
|
|
10
11
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +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;AACtD,QAAA,MAAM,WAAW,QAA8B,CAAC;AAQhD,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,WAAW,EAAE,CAAC"}
|
|
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;AACtD,QAAA,MAAM,WAAW,QAA8B,CAAC;AAQhD,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;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAKzD;AAGD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
package/dist/utils/config.js
CHANGED
|
@@ -46,6 +46,13 @@ export function findServer(query) {
|
|
|
46
46
|
// Search by IP first (unique), then by name
|
|
47
47
|
return servers.find((s) => s.ip === query) || servers.find((s) => s.name === query);
|
|
48
48
|
}
|
|
49
|
+
export function findServers(query) {
|
|
50
|
+
const servers = getServers();
|
|
51
|
+
const byIp = servers.filter((s) => s.ip === query);
|
|
52
|
+
if (byIp.length > 0)
|
|
53
|
+
return byIp;
|
|
54
|
+
return servers.filter((s) => s.name === query);
|
|
55
|
+
}
|
|
49
56
|
// Exported for testing
|
|
50
57
|
export { CONFIG_DIR, SERVERS_FILE, BACKUPS_DIR };
|
|
51
58
|
//# sourceMappingURL=config.js.map
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +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;AACtD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAEhD,SAAS,eAAe;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,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,WAAW,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { InitOptions, QuicklifyYamlConfig } from "../types/index.js";
|
|
2
|
+
export interface ResolvedConfig {
|
|
3
|
+
provider?: string;
|
|
4
|
+
token?: string;
|
|
5
|
+
region?: string;
|
|
6
|
+
size?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
fullSetup?: boolean;
|
|
9
|
+
domain?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Merge configuration from multiple sources.
|
|
13
|
+
* Priority: CLI flags > YAML config > template defaults > undefined (interactive prompt)
|
|
14
|
+
*/
|
|
15
|
+
export declare function mergeConfig(cliOptions: InitOptions, yamlConfig?: QuicklifyYamlConfig): ResolvedConfig;
|
|
16
|
+
//# sourceMappingURL=configMerge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configMerge.d.ts","sourceRoot":"","sources":["../../src/utils/configMerge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,MAAM,WAAW,cAAc;IAC7B,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;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,WAAW,EACvB,UAAU,CAAC,EAAE,mBAAmB,GAC/B,cAAc,CAsChB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getTemplate, getTemplateDefaults } from "./templates.js";
|
|
2
|
+
/**
|
|
3
|
+
* Merge configuration from multiple sources.
|
|
4
|
+
* Priority: CLI flags > YAML config > template defaults > undefined (interactive prompt)
|
|
5
|
+
*/
|
|
6
|
+
export function mergeConfig(cliOptions, yamlConfig) {
|
|
7
|
+
const resolved = {};
|
|
8
|
+
// Determine template name: CLI --template > YAML template
|
|
9
|
+
const templateName = cliOptions.template ?? yamlConfig?.template;
|
|
10
|
+
// Determine provider: CLI > YAML
|
|
11
|
+
resolved.provider = cliOptions.provider ?? yamlConfig?.provider;
|
|
12
|
+
// Token: only from CLI (never from YAML)
|
|
13
|
+
resolved.token = cliOptions.token;
|
|
14
|
+
// Get template defaults if both template and provider are known
|
|
15
|
+
let templateDefaults;
|
|
16
|
+
if (templateName && resolved.provider) {
|
|
17
|
+
templateDefaults = getTemplateDefaults(templateName, resolved.provider);
|
|
18
|
+
}
|
|
19
|
+
// Template-level fullSetup default
|
|
20
|
+
const templateDef = templateName ? getTemplate(templateName) : undefined;
|
|
21
|
+
const templateFullSetup = templateDef?.fullSetup;
|
|
22
|
+
// Region: CLI > YAML > template
|
|
23
|
+
resolved.region = cliOptions.region ?? yamlConfig?.region ?? templateDefaults?.region;
|
|
24
|
+
// Size: CLI > YAML > template
|
|
25
|
+
resolved.size = cliOptions.size ?? yamlConfig?.size ?? templateDefaults?.size;
|
|
26
|
+
// Name: CLI > YAML (template does not set name)
|
|
27
|
+
resolved.name = cliOptions.name ?? yamlConfig?.name;
|
|
28
|
+
// fullSetup: CLI > YAML > template
|
|
29
|
+
resolved.fullSetup = cliOptions.fullSetup ?? yamlConfig?.fullSetup ?? templateFullSetup;
|
|
30
|
+
// domain: only from YAML
|
|
31
|
+
resolved.domain = yamlConfig?.domain;
|
|
32
|
+
return resolved;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=configMerge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configMerge.js","sourceRoot":"","sources":["../../src/utils/configMerge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAYlE;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,UAAuB,EACvB,UAAgC;IAEhC,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,0DAA0D;IAC1D,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,IAAI,UAAU,EAAE,QAAQ,CAAC;IAEjE,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,UAAU,EAAE,QAAQ,CAAC;IAEhE,yCAAyC;IACzC,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;IAElC,gEAAgE;IAChE,IAAI,gBAA8D,CAAC;IACnE,IAAI,YAAY,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtC,gBAAgB,GAAG,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,mCAAmC;IACnC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,iBAAiB,GAAG,WAAW,EAAE,SAAS,CAAC;IAEjD,gCAAgC;IAChC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,CAAC;IAEtF,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,EAAE,IAAI,IAAI,gBAAgB,EAAE,IAAI,CAAC;IAE9E,gDAAgD;IAChD,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,EAAE,IAAI,CAAC;IAEpD,mCAAmC;IACnC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,IAAI,UAAU,EAAE,SAAS,IAAI,iBAAiB,CAAC;IAExF,yBAAyB;IACzB,QAAQ,CAAC,MAAM,GAAG,UAAU,EAAE,MAAM,CAAC;IAErC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
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,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC,wBAAsB,iBAAiB,IAAI,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBvE;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsB5F;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,MAAM,EAAO,GACrB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAM,EAAO,GACrB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CA2B3D;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,CAsC3B"}
|
package/dist/utils/prompts.js
CHANGED