quicklify 1.1.0 → 1.2.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.
Files changed (187) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +46 -22
  3. package/README.tr.md +46 -22
  4. package/SECURITY.md +63 -34
  5. package/dist/commands/add.d.ts +1 -0
  6. package/dist/commands/add.d.ts.map +1 -1
  7. package/dist/commands/add.js +41 -65
  8. package/dist/commands/add.js.map +1 -1
  9. package/dist/commands/backup.d.ts +2 -11
  10. package/dist/commands/backup.d.ts.map +1 -1
  11. package/dist/commands/backup.js +111 -53
  12. package/dist/commands/backup.js.map +1 -1
  13. package/dist/commands/destroy.d.ts.map +1 -1
  14. package/dist/commands/destroy.js +58 -37
  15. package/dist/commands/destroy.js.map +1 -1
  16. package/dist/commands/domain.d.ts +2 -9
  17. package/dist/commands/domain.d.ts.map +1 -1
  18. package/dist/commands/domain.js +47 -56
  19. package/dist/commands/domain.js.map +1 -1
  20. package/dist/commands/firewall.d.ts +3 -10
  21. package/dist/commands/firewall.d.ts.map +1 -1
  22. package/dist/commands/firewall.js +28 -51
  23. package/dist/commands/firewall.js.map +1 -1
  24. package/dist/commands/health.d.ts +2 -2
  25. package/dist/commands/health.d.ts.map +1 -1
  26. package/dist/commands/health.js +77 -19
  27. package/dist/commands/health.js.map +1 -1
  28. package/dist/commands/init.d.ts.map +1 -1
  29. package/dist/commands/init.js +115 -29
  30. package/dist/commands/init.js.map +1 -1
  31. package/dist/commands/interactive.d.ts +2 -0
  32. package/dist/commands/interactive.d.ts.map +1 -0
  33. package/dist/commands/interactive.js +357 -0
  34. package/dist/commands/interactive.js.map +1 -0
  35. package/dist/commands/list.d.ts.map +1 -1
  36. package/dist/commands/list.js +4 -2
  37. package/dist/commands/list.js.map +1 -1
  38. package/dist/commands/logs.d.ts.map +1 -1
  39. package/dist/commands/logs.js +9 -1
  40. package/dist/commands/logs.js.map +1 -1
  41. package/dist/commands/maintain.d.ts.map +1 -1
  42. package/dist/commands/maintain.js +28 -47
  43. package/dist/commands/maintain.js.map +1 -1
  44. package/dist/commands/monitor.js +1 -1
  45. package/dist/commands/monitor.js.map +1 -1
  46. package/dist/commands/remove.d.ts.map +1 -1
  47. package/dist/commands/remove.js +25 -0
  48. package/dist/commands/remove.js.map +1 -1
  49. package/dist/commands/restart.d.ts.map +1 -1
  50. package/dist/commands/restart.js +39 -39
  51. package/dist/commands/restart.js.map +1 -1
  52. package/dist/commands/restore.d.ts +2 -13
  53. package/dist/commands/restore.d.ts.map +1 -1
  54. package/dist/commands/restore.js +42 -54
  55. package/dist/commands/restore.js.map +1 -1
  56. package/dist/commands/secure.d.ts +2 -9
  57. package/dist/commands/secure.d.ts.map +1 -1
  58. package/dist/commands/secure.js +2 -97
  59. package/dist/commands/secure.js.map +1 -1
  60. package/dist/commands/snapshot.d.ts.map +1 -1
  61. package/dist/commands/snapshot.js +55 -67
  62. package/dist/commands/snapshot.js.map +1 -1
  63. package/dist/commands/status.d.ts.map +1 -1
  64. package/dist/commands/status.js +33 -16
  65. package/dist/commands/status.js.map +1 -1
  66. package/dist/commands/update.d.ts.map +1 -1
  67. package/dist/commands/update.js +23 -16
  68. package/dist/commands/update.js.map +1 -1
  69. package/dist/constants.d.ts +14 -0
  70. package/dist/constants.d.ts.map +1 -0
  71. package/dist/constants.js +23 -0
  72. package/dist/constants.js.map +1 -0
  73. package/dist/core/backup.d.ts +16 -0
  74. package/dist/core/backup.d.ts.map +1 -1
  75. package/dist/core/backup.js +159 -1
  76. package/dist/core/backup.js.map +1 -1
  77. package/dist/core/domain.d.ts.map +1 -1
  78. package/dist/core/domain.js +1 -5
  79. package/dist/core/domain.js.map +1 -1
  80. package/dist/core/firewall.d.ts +2 -0
  81. package/dist/core/firewall.d.ts.map +1 -1
  82. package/dist/core/firewall.js +12 -0
  83. package/dist/core/firewall.js.map +1 -1
  84. package/dist/core/logs.js +1 -1
  85. package/dist/core/logs.js.map +1 -1
  86. package/dist/core/maintain.d.ts.map +1 -1
  87. package/dist/core/maintain.js +1 -2
  88. package/dist/core/maintain.js.map +1 -1
  89. package/dist/core/manage.d.ts +10 -1
  90. package/dist/core/manage.d.ts.map +1 -1
  91. package/dist/core/manage.js +42 -4
  92. package/dist/core/manage.js.map +1 -1
  93. package/dist/core/provision.d.ts +2 -1
  94. package/dist/core/provision.d.ts.map +1 -1
  95. package/dist/core/provision.js +7 -12
  96. package/dist/core/provision.js.map +1 -1
  97. package/dist/core/secure.d.ts.map +1 -1
  98. package/dist/core/secure.js +8 -2
  99. package/dist/core/secure.js.map +1 -1
  100. package/dist/core/status.d.ts.map +1 -1
  101. package/dist/core/status.js +2 -1
  102. package/dist/core/status.js.map +1 -1
  103. package/dist/index.js +17 -4
  104. package/dist/index.js.map +1 -1
  105. package/dist/mcp/server.d.ts.map +1 -1
  106. package/dist/mcp/server.js +13 -7
  107. package/dist/mcp/server.js.map +1 -1
  108. package/dist/mcp/tools/serverBackup.d.ts +2 -7
  109. package/dist/mcp/tools/serverBackup.d.ts.map +1 -1
  110. package/dist/mcp/tools/serverBackup.js +120 -234
  111. package/dist/mcp/tools/serverBackup.js.map +1 -1
  112. package/dist/mcp/tools/serverInfo.d.ts +18 -2
  113. package/dist/mcp/tools/serverInfo.d.ts.map +1 -1
  114. package/dist/mcp/tools/serverInfo.js +121 -57
  115. package/dist/mcp/tools/serverInfo.js.map +1 -1
  116. package/dist/mcp/tools/serverLogs.d.ts +2 -7
  117. package/dist/mcp/tools/serverLogs.d.ts.map +1 -1
  118. package/dist/mcp/tools/serverLogs.js +36 -57
  119. package/dist/mcp/tools/serverLogs.js.map +1 -1
  120. package/dist/mcp/tools/serverMaintain.d.ts +3 -8
  121. package/dist/mcp/tools/serverMaintain.d.ts.map +1 -1
  122. package/dist/mcp/tools/serverMaintain.js +48 -109
  123. package/dist/mcp/tools/serverMaintain.js.map +1 -1
  124. package/dist/mcp/tools/serverManage.d.ts +5 -0
  125. package/dist/mcp/tools/serverManage.d.ts.map +1 -1
  126. package/dist/mcp/tools/serverManage.js +92 -109
  127. package/dist/mcp/tools/serverManage.js.map +1 -1
  128. package/dist/mcp/tools/serverProvision.d.ts +5 -0
  129. package/dist/mcp/tools/serverProvision.d.ts.map +1 -1
  130. package/dist/mcp/tools/serverProvision.js +67 -76
  131. package/dist/mcp/tools/serverProvision.js.map +1 -1
  132. package/dist/mcp/tools/serverSecure.d.ts +2 -7
  133. package/dist/mcp/tools/serverSecure.d.ts.map +1 -1
  134. package/dist/mcp/tools/serverSecure.js +109 -170
  135. package/dist/mcp/tools/serverSecure.js.map +1 -1
  136. package/dist/mcp/utils.d.ts +42 -0
  137. package/dist/mcp/utils.d.ts.map +1 -0
  138. package/dist/mcp/utils.js +61 -0
  139. package/dist/mcp/utils.js.map +1 -0
  140. package/dist/providers/base.d.ts +2 -2
  141. package/dist/providers/base.d.ts.map +1 -1
  142. package/dist/providers/digitalocean.d.ts +2 -2
  143. package/dist/providers/digitalocean.d.ts.map +1 -1
  144. package/dist/providers/digitalocean.js +3 -3
  145. package/dist/providers/digitalocean.js.map +1 -1
  146. package/dist/providers/hetzner.d.ts +2 -2
  147. package/dist/providers/hetzner.d.ts.map +1 -1
  148. package/dist/providers/hetzner.js +7 -4
  149. package/dist/providers/hetzner.js.map +1 -1
  150. package/dist/providers/linode.d.ts +2 -2
  151. package/dist/providers/linode.d.ts.map +1 -1
  152. package/dist/providers/linode.js +2 -2
  153. package/dist/providers/linode.js.map +1 -1
  154. package/dist/providers/vultr.d.ts +2 -2
  155. package/dist/providers/vultr.d.ts.map +1 -1
  156. package/dist/providers/vultr.js +2 -2
  157. package/dist/providers/vultr.js.map +1 -1
  158. package/dist/types/index.d.ts +11 -0
  159. package/dist/types/index.d.ts.map +1 -1
  160. package/dist/utils/cloudInit.d.ts +1 -0
  161. package/dist/utils/cloudInit.d.ts.map +1 -1
  162. package/dist/utils/cloudInit.js +62 -0
  163. package/dist/utils/cloudInit.js.map +1 -1
  164. package/dist/utils/config.js +1 -1
  165. package/dist/utils/config.js.map +1 -1
  166. package/dist/utils/errorMapper.d.ts.map +1 -1
  167. package/dist/utils/errorMapper.js +5 -1
  168. package/dist/utils/errorMapper.js.map +1 -1
  169. package/dist/utils/modeGuard.d.ts +5 -0
  170. package/dist/utils/modeGuard.d.ts.map +1 -0
  171. package/dist/utils/modeGuard.js +13 -0
  172. package/dist/utils/modeGuard.js.map +1 -0
  173. package/dist/utils/openBrowser.d.ts.map +1 -1
  174. package/dist/utils/openBrowser.js +3 -1
  175. package/dist/utils/openBrowser.js.map +1 -1
  176. package/dist/utils/prompts.d.ts +2 -2
  177. package/dist/utils/prompts.d.ts.map +1 -1
  178. package/dist/utils/prompts.js +3 -3
  179. package/dist/utils/prompts.js.map +1 -1
  180. package/dist/utils/ssh.d.ts +9 -0
  181. package/dist/utils/ssh.d.ts.map +1 -1
  182. package/dist/utils/ssh.js +175 -15
  183. package/dist/utils/ssh.js.map +1 -1
  184. package/dist/utils/sshKey.d.ts.map +1 -1
  185. package/dist/utils/sshKey.js +3 -0
  186. package/dist/utils/sshKey.js.map +1 -1
  187. package/package.json +2 -2
package/dist/utils/ssh.js CHANGED
@@ -1,7 +1,48 @@
1
1
  import { spawn, execSync } from "child_process";
2
- export function checkSshAvailable() {
2
+ import { existsSync } from "fs";
3
+ import { join } from "path";
4
+ /** Default SSH connect timeout in seconds */
5
+ const SSH_CONNECT_TIMEOUT = 10;
6
+ /** Default SSH command execution timeout in milliseconds (30s) */
7
+ const SSH_EXEC_TIMEOUT_MS = 30_000;
8
+ /** Max stdout/stderr buffer size in bytes (1MB) */
9
+ const MAX_BUFFER_SIZE = 1024 * 1024;
10
+ let cachedSshPath = null;
11
+ export function resolveSshPath() {
12
+ if (cachedSshPath)
13
+ return cachedSshPath;
14
+ // Try default PATH first
3
15
  try {
4
16
  execSync("ssh -V", { stdio: "pipe" });
17
+ cachedSshPath = "ssh";
18
+ return cachedSshPath;
19
+ }
20
+ catch {
21
+ // Not in PATH, try common locations
22
+ }
23
+ // Windows common SSH locations
24
+ if (process.platform === "win32") {
25
+ const candidates = [
26
+ join(process.env.SystemRoot || "C:\\Windows", "System32", "OpenSSH", "ssh.exe"),
27
+ join(process.env.ProgramFiles || "C:\\Program Files", "OpenSSH", "ssh.exe"),
28
+ join(process.env.LOCALAPPDATA || "", "Programs", "Git", "usr", "bin", "ssh.exe"),
29
+ join(process.env.ProgramFiles || "C:\\Program Files", "Git", "usr", "bin", "ssh.exe"),
30
+ ];
31
+ for (const candidate of candidates) {
32
+ if (existsSync(candidate)) {
33
+ cachedSshPath = candidate;
34
+ return cachedSshPath;
35
+ }
36
+ }
37
+ }
38
+ // Fallback — return "ssh" and let it fail with a clearer error
39
+ cachedSshPath = "ssh";
40
+ return cachedSshPath;
41
+ }
42
+ export function checkSshAvailable() {
43
+ try {
44
+ const sshBin = resolveSshPath();
45
+ execSync(`"${sshBin}" -V`, { stdio: "pipe" });
5
46
  return true;
6
47
  }
7
48
  catch {
@@ -30,10 +71,33 @@ export function sanitizedEnv() {
30
71
  }
31
72
  return env;
32
73
  }
74
+ /**
75
+ * Removes stale host key entry for the given IP from known_hosts.
76
+ * Silently ignores errors (ssh-keygen not available or no entry).
77
+ * IP is validated before use to prevent command injection.
78
+ */
79
+ export function removeStaleHostKey(ip) {
80
+ assertValidIp(ip);
81
+ try {
82
+ execSync(`ssh-keygen -R ${ip}`, { stdio: "ignore", env: sanitizedEnv() });
83
+ }
84
+ catch {
85
+ // Silently ignore — ssh-keygen may not be available or no entry exists
86
+ }
87
+ }
88
+ export const HOST_KEY_PATTERN = /Host key verification failed|REMOTE HOST IDENTIFICATION HAS CHANGED/i;
89
+ export function isHostKeyMismatch(stderr) {
90
+ return HOST_KEY_PATTERN.test(stderr);
91
+ }
33
92
  export function sshConnect(ip) {
34
93
  assertValidIp(ip);
94
+ const sshBin = resolveSshPath();
35
95
  return new Promise((resolve) => {
36
- const child = spawn("ssh", ["-o", "StrictHostKeyChecking=accept-new", `root@${ip}`], {
96
+ const child = spawn(sshBin, [
97
+ "-o", "StrictHostKeyChecking=accept-new",
98
+ "-o", `ConnectTimeout=${SSH_CONNECT_TIMEOUT}`,
99
+ `root@${ip}`,
100
+ ], {
37
101
  stdio: "inherit",
38
102
  env: sanitizedEnv(),
39
103
  });
@@ -41,34 +105,130 @@ export function sshConnect(ip) {
41
105
  child.on("error", () => resolve(1));
42
106
  });
43
107
  }
44
- export function sshStream(ip, command) {
45
- assertValidIp(ip);
108
+ function sshStreamInner(ip, command, retried) {
109
+ const sshBin = resolveSshPath();
46
110
  return new Promise((resolve) => {
47
- const child = spawn("ssh", ["-o", "StrictHostKeyChecking=accept-new", `root@${ip}`, command], {
48
- stdio: "inherit",
111
+ let settled = false;
112
+ const finish = (code) => {
113
+ if (settled)
114
+ return;
115
+ settled = true;
116
+ clearTimeout(timer);
117
+ resolve(code);
118
+ };
119
+ const child = spawn(sshBin, [
120
+ "-o", "StrictHostKeyChecking=accept-new",
121
+ "-o", "BatchMode=yes",
122
+ "-o", `ConnectTimeout=${SSH_CONNECT_TIMEOUT}`,
123
+ `root@${ip}`,
124
+ command,
125
+ ], {
126
+ // stdin "ignore" — streaming commands don't need user input.
127
+ // Also prevents MCP stdin (JSON-RPC) from leaking into SSH.
128
+ stdio: ["ignore", "inherit", "pipe"],
49
129
  env: sanitizedEnv(),
50
130
  });
51
- child.on("close", (code) => resolve(code ?? 0));
52
- child.on("error", () => resolve(1));
131
+ // Process-level timeout for stream operations (longer: 120s for interactive use)
132
+ const timer = setTimeout(() => {
133
+ killChild(child);
134
+ finish(1);
135
+ }, 120_000);
136
+ let stderr = "";
137
+ child.stderr?.on("data", (data) => {
138
+ // Cap stderr buffer — only need enough for host key pattern detection
139
+ if (stderr.length < 4096) {
140
+ stderr += data.toString();
141
+ }
142
+ });
143
+ child.on("close", (code) => {
144
+ const exitCode = code ?? 0;
145
+ if (exitCode !== 0 && !retried && isHostKeyMismatch(stderr)) {
146
+ removeStaleHostKey(ip);
147
+ clearTimeout(timer);
148
+ settled = true;
149
+ resolve(sshStreamInner(ip, command, true));
150
+ }
151
+ else {
152
+ finish(exitCode);
153
+ }
154
+ });
155
+ child.on("error", () => finish(1));
53
156
  });
54
157
  }
55
- export function sshExec(ip, command) {
158
+ export function sshStream(ip, command) {
56
159
  assertValidIp(ip);
160
+ return sshStreamInner(ip, command, false);
161
+ }
162
+ function killChild(child) {
163
+ try {
164
+ child.kill("SIGTERM");
165
+ // Force kill after 2s if still alive
166
+ setTimeout(() => {
167
+ try {
168
+ child.kill("SIGKILL");
169
+ }
170
+ catch { /* already dead */ }
171
+ }, 2000);
172
+ }
173
+ catch { /* already dead */ }
174
+ }
175
+ function sshExecInner(ip, command, retried) {
176
+ const sshBin = resolveSshPath();
57
177
  return new Promise((resolve) => {
58
- const child = spawn("ssh", ["-o", "StrictHostKeyChecking=accept-new", `root@${ip}`, command], {
59
- stdio: ["inherit", "pipe", "pipe"],
178
+ let settled = false;
179
+ const finish = (result) => {
180
+ if (settled)
181
+ return;
182
+ settled = true;
183
+ clearTimeout(timer);
184
+ resolve(result);
185
+ };
186
+ const child = spawn(sshBin, [
187
+ "-o", "StrictHostKeyChecking=accept-new",
188
+ "-o", "BatchMode=yes",
189
+ "-o", `ConnectTimeout=${SSH_CONNECT_TIMEOUT}`,
190
+ `root@${ip}`,
191
+ command,
192
+ ], {
193
+ // stdin must be "ignore" — not "inherit". MCP uses stdin for JSON-RPC transport;
194
+ // inheriting it would let SSH read MCP messages, causing silent failures.
195
+ stdio: ["ignore", "pipe", "pipe"],
60
196
  env: sanitizedEnv(),
61
197
  });
198
+ // Process-level timeout — kill SSH if it takes too long
199
+ const timer = setTimeout(() => {
200
+ killChild(child);
201
+ finish({ code: 1, stdout, stderr: stderr || `SSH command timed out after ${SSH_EXEC_TIMEOUT_MS / 1000}s` });
202
+ }, SSH_EXEC_TIMEOUT_MS);
62
203
  let stdout = "";
63
204
  let stderr = "";
64
205
  child.stdout?.on("data", (data) => {
65
- stdout += data.toString();
206
+ if (stdout.length < MAX_BUFFER_SIZE) {
207
+ stdout += data.toString();
208
+ }
66
209
  });
67
210
  child.stderr?.on("data", (data) => {
68
- stderr += data.toString();
211
+ if (stderr.length < MAX_BUFFER_SIZE) {
212
+ stderr += data.toString();
213
+ }
69
214
  });
70
- child.on("close", (code) => resolve({ code: code ?? 1, stdout, stderr }));
71
- child.on("error", (err) => resolve({ code: 1, stdout: "", stderr: err.message }));
215
+ child.on("close", (code) => {
216
+ const exitCode = code ?? 1;
217
+ if (exitCode !== 0 && !retried && isHostKeyMismatch(stderr)) {
218
+ removeStaleHostKey(ip);
219
+ clearTimeout(timer);
220
+ settled = true;
221
+ resolve(sshExecInner(ip, command, true));
222
+ }
223
+ else {
224
+ finish({ code: exitCode, stdout, stderr });
225
+ }
226
+ });
227
+ child.on("error", (err) => finish({ code: 1, stdout: "", stderr: err.message }));
72
228
  });
73
229
  }
230
+ export function sshExec(ip, command) {
231
+ assertValidIp(ip);
232
+ return sshExecInner(ip, command, false);
233
+ }
74
234
  //# sourceMappingURL=ssh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/utils/ssh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/utils/ssh.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sshKey.d.ts","sourceRoot":"","sources":["../../src/utils/sshKey.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAgB/C;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAuB9C;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
1
+ {"version":3,"file":"sshKey.d.ts","sourceRoot":"","sources":["../../src/utils/sshKey.ts"],"names":[],"mappings":"AAQA,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAgB/C;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAyB9C;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -2,6 +2,7 @@ import { readFileSync, existsSync, mkdirSync } from "fs";
2
2
  import { spawnSync } from "child_process";
3
3
  import { homedir } from "os";
4
4
  import { join } from "path";
5
+ import { sanitizedEnv } from "./ssh.js";
5
6
  const SSH_KEY_FILES = ["id_ed25519.pub", "id_rsa.pub", "id_ecdsa.pub"];
6
7
  export function findLocalSshKey() {
7
8
  const sshDir = join(homedir(), ".ssh");
@@ -30,8 +31,10 @@ export function generateSshKey() {
30
31
  mkdirSync(sshDir, { mode: 0o700, recursive: true });
31
32
  }
32
33
  // Generate key with no passphrase
34
+ // Use sanitizedEnv so tokens are not inherited by the ssh-keygen subprocess
33
35
  spawnSync("ssh-keygen", ["-t", "ed25519", "-f", keyPath, "-N", "", "-C", "quicklify"], {
34
36
  stdio: "pipe",
37
+ env: sanitizedEnv(),
35
38
  });
36
39
  const pubKeyPath = `${keyPath}.pub`;
37
40
  if (existsSync(pubKeyPath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"sshKey.js","sourceRoot":"","sources":["../../src/utils/sshKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,aAAa,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AAEvE,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,iCAAiC;QACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,kCAAkC;QAClC,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE;YACrF,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,GAAG,OAAO,MAAM,CAAC;QACpC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"sshKey.js","sourceRoot":"","sources":["../../src/utils/sshKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,aAAa,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AAEvE,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,iCAAiC;QACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,kCAAkC;QAClC,4EAA4E;QAC5E,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE;YACrF,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,YAAY,EAAE;SACpB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,GAAG,OAAO,MAAM,CAAC;QACpC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "quicklify",
3
- "version": "1.1.0",
4
- "description": "Automate Coolify deployment on cloud providers",
3
+ "version": "1.2.0",
4
+ "description": "Deploy and manage self-hosted infrastructure on cloud providers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {