@ebowwa/hetzner-mcp 1.1.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 (227) hide show
  1. package/bun.lock +250 -0
  2. package/dist/index.d.ts +16 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +1928 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/hetzner/actions.d.ts +356 -0
  7. package/dist/lib/hetzner/actions.d.ts.map +1 -0
  8. package/dist/lib/hetzner/actions.js +804 -0
  9. package/dist/lib/hetzner/actions.js.map +1 -0
  10. package/dist/lib/hetzner/auth.d.ts +7 -0
  11. package/dist/lib/hetzner/auth.d.ts.map +1 -0
  12. package/dist/lib/hetzner/auth.js +35 -0
  13. package/dist/lib/hetzner/auth.js.map +1 -0
  14. package/dist/lib/hetzner/bootstrap/cloud-init.d.ts +79 -0
  15. package/dist/lib/hetzner/bootstrap/cloud-init.d.ts.map +1 -0
  16. package/dist/lib/hetzner/bootstrap/cloud-init.js +279 -0
  17. package/dist/lib/hetzner/bootstrap/cloud-init.js.map +1 -0
  18. package/dist/lib/hetzner/bootstrap/firewall.d.ts +119 -0
  19. package/dist/lib/hetzner/bootstrap/firewall.d.ts.map +1 -0
  20. package/dist/lib/hetzner/bootstrap/firewall.js +279 -0
  21. package/dist/lib/hetzner/bootstrap/firewall.js.map +1 -0
  22. package/dist/lib/hetzner/bootstrap/genesis.d.ts +83 -0
  23. package/dist/lib/hetzner/bootstrap/genesis.d.ts.map +1 -0
  24. package/dist/lib/hetzner/bootstrap/genesis.js +406 -0
  25. package/dist/lib/hetzner/bootstrap/genesis.js.map +1 -0
  26. package/dist/lib/hetzner/bootstrap/index.d.ts +30 -0
  27. package/dist/lib/hetzner/bootstrap/index.d.ts.map +1 -0
  28. package/dist/lib/hetzner/bootstrap/index.js +35 -0
  29. package/dist/lib/hetzner/bootstrap/index.js.map +1 -0
  30. package/dist/lib/hetzner/bootstrap/kernel-hardening.d.ts +70 -0
  31. package/dist/lib/hetzner/bootstrap/kernel-hardening.d.ts.map +1 -0
  32. package/dist/lib/hetzner/bootstrap/kernel-hardening.js +266 -0
  33. package/dist/lib/hetzner/bootstrap/kernel-hardening.js.map +1 -0
  34. package/dist/lib/hetzner/bootstrap/kernel-hardening.test.d.ts +7 -0
  35. package/dist/lib/hetzner/bootstrap/kernel-hardening.test.d.ts.map +1 -0
  36. package/dist/lib/hetzner/bootstrap/kernel-hardening.test.js +181 -0
  37. package/dist/lib/hetzner/bootstrap/kernel-hardening.test.js.map +1 -0
  38. package/dist/lib/hetzner/bootstrap/security-audit.d.ts +46 -0
  39. package/dist/lib/hetzner/bootstrap/security-audit.d.ts.map +1 -0
  40. package/dist/lib/hetzner/bootstrap/security-audit.js +118 -0
  41. package/dist/lib/hetzner/bootstrap/security-audit.js.map +1 -0
  42. package/dist/lib/hetzner/bootstrap/ssh-hardening.d.ts +68 -0
  43. package/dist/lib/hetzner/bootstrap/ssh-hardening.d.ts.map +1 -0
  44. package/dist/lib/hetzner/bootstrap/ssh-hardening.js +182 -0
  45. package/dist/lib/hetzner/bootstrap/ssh-hardening.js.map +1 -0
  46. package/dist/lib/hetzner/client.d.ts +63 -0
  47. package/dist/lib/hetzner/client.d.ts.map +1 -0
  48. package/dist/lib/hetzner/client.js +137 -0
  49. package/dist/lib/hetzner/client.js.map +1 -0
  50. package/dist/lib/hetzner/config.d.ts +5 -0
  51. package/dist/lib/hetzner/config.d.ts.map +1 -0
  52. package/dist/lib/hetzner/config.js +5 -0
  53. package/dist/lib/hetzner/config.js.map +1 -0
  54. package/dist/lib/hetzner/errors.d.ts +171 -0
  55. package/dist/lib/hetzner/errors.d.ts.map +1 -0
  56. package/dist/lib/hetzner/errors.js +270 -0
  57. package/dist/lib/hetzner/errors.js.map +1 -0
  58. package/dist/lib/hetzner/index.d.ts +21 -0
  59. package/dist/lib/hetzner/index.d.ts.map +1 -0
  60. package/dist/lib/hetzner/index.js +29 -0
  61. package/dist/lib/hetzner/index.js.map +1 -0
  62. package/dist/lib/hetzner/pricing.d.ts +207 -0
  63. package/dist/lib/hetzner/pricing.d.ts.map +1 -0
  64. package/dist/lib/hetzner/pricing.js +284 -0
  65. package/dist/lib/hetzner/pricing.js.map +1 -0
  66. package/dist/lib/hetzner/schemas.d.ts +1644 -0
  67. package/dist/lib/hetzner/schemas.d.ts.map +1 -0
  68. package/dist/lib/hetzner/schemas.js +660 -0
  69. package/dist/lib/hetzner/schemas.js.map +1 -0
  70. package/dist/lib/hetzner/server-status.d.ts +26 -0
  71. package/dist/lib/hetzner/server-status.d.ts.map +1 -0
  72. package/dist/lib/hetzner/server-status.js +64 -0
  73. package/dist/lib/hetzner/server-status.js.map +1 -0
  74. package/dist/lib/hetzner/servers.d.ts +165 -0
  75. package/dist/lib/hetzner/servers.d.ts.map +1 -0
  76. package/dist/lib/hetzner/servers.js +424 -0
  77. package/dist/lib/hetzner/servers.js.map +1 -0
  78. package/dist/lib/hetzner/ssh-keys.d.ts +36 -0
  79. package/dist/lib/hetzner/ssh-keys.d.ts.map +1 -0
  80. package/dist/lib/hetzner/ssh-keys.js +90 -0
  81. package/dist/lib/hetzner/ssh-keys.js.map +1 -0
  82. package/dist/lib/hetzner/ssh-setup.d.ts +48 -0
  83. package/dist/lib/hetzner/ssh-setup.d.ts.map +1 -0
  84. package/dist/lib/hetzner/ssh-setup.js +167 -0
  85. package/dist/lib/hetzner/ssh-setup.js.map +1 -0
  86. package/dist/lib/hetzner/types.d.ts +330 -0
  87. package/dist/lib/hetzner/types.d.ts.map +1 -0
  88. package/dist/lib/hetzner/types.js +96 -0
  89. package/dist/lib/hetzner/types.js.map +1 -0
  90. package/dist/lib/hetzner/volumes.d.ts +106 -0
  91. package/dist/lib/hetzner/volumes.d.ts.map +1 -0
  92. package/dist/lib/hetzner/volumes.js +172 -0
  93. package/dist/lib/hetzner/volumes.js.map +1 -0
  94. package/dist/lib/resources.d.ts +70 -0
  95. package/dist/lib/resources.d.ts.map +1 -0
  96. package/dist/lib/resources.js +115 -0
  97. package/dist/lib/resources.js.map +1 -0
  98. package/dist/lib/ssh/flags.d.ts +349 -0
  99. package/dist/lib/ssh/flags.d.ts.map +1 -0
  100. package/dist/lib/ssh/flags.js +322 -0
  101. package/dist/lib/ssh/flags.js.map +1 -0
  102. package/dist/lib/ssh/index.d.ts +5 -0
  103. package/dist/lib/ssh/index.d.ts.map +1 -0
  104. package/dist/lib/ssh/index.js +5 -0
  105. package/dist/lib/ssh/index.js.map +1 -0
  106. package/dist/lib/terminal/api.d.ts +8 -0
  107. package/dist/lib/terminal/api.d.ts.map +1 -0
  108. package/dist/lib/terminal/api.js +594 -0
  109. package/dist/lib/terminal/api.js.map +1 -0
  110. package/dist/lib/terminal/client.d.ts +15 -0
  111. package/dist/lib/terminal/client.d.ts.map +1 -0
  112. package/dist/lib/terminal/client.js +45 -0
  113. package/dist/lib/terminal/client.js.map +1 -0
  114. package/dist/lib/terminal/config.d.ts +86 -0
  115. package/dist/lib/terminal/config.d.ts.map +1 -0
  116. package/dist/lib/terminal/config.js +375 -0
  117. package/dist/lib/terminal/config.js.map +1 -0
  118. package/dist/lib/terminal/error.d.ts +8 -0
  119. package/dist/lib/terminal/error.d.ts.map +1 -0
  120. package/dist/lib/terminal/error.js +12 -0
  121. package/dist/lib/terminal/error.js.map +1 -0
  122. package/dist/lib/terminal/exec.d.ts +47 -0
  123. package/dist/lib/terminal/exec.d.ts.map +1 -0
  124. package/dist/lib/terminal/exec.js +107 -0
  125. package/dist/lib/terminal/exec.js.map +1 -0
  126. package/dist/lib/terminal/files.d.ts +124 -0
  127. package/dist/lib/terminal/files.d.ts.map +1 -0
  128. package/dist/lib/terminal/files.js +436 -0
  129. package/dist/lib/terminal/files.js.map +1 -0
  130. package/dist/lib/terminal/fingerprint.d.ts +67 -0
  131. package/dist/lib/terminal/fingerprint.d.ts.map +1 -0
  132. package/dist/lib/terminal/fingerprint.js +214 -0
  133. package/dist/lib/terminal/fingerprint.js.map +1 -0
  134. package/dist/lib/terminal/index.d.ts +14 -0
  135. package/dist/lib/terminal/index.d.ts.map +1 -0
  136. package/dist/lib/terminal/index.js +21 -0
  137. package/dist/lib/terminal/index.js.map +1 -0
  138. package/dist/lib/terminal/manager.d.ts +103 -0
  139. package/dist/lib/terminal/manager.d.ts.map +1 -0
  140. package/dist/lib/terminal/manager.js +237 -0
  141. package/dist/lib/terminal/manager.js.map +1 -0
  142. package/dist/lib/terminal/network-error-detector.d.ts +19 -0
  143. package/dist/lib/terminal/network-error-detector.d.ts.map +1 -0
  144. package/dist/lib/terminal/network-error-detector.js +98 -0
  145. package/dist/lib/terminal/network-error-detector.js.map +1 -0
  146. package/dist/lib/terminal/pool.d.ts +143 -0
  147. package/dist/lib/terminal/pool.d.ts.map +1 -0
  148. package/dist/lib/terminal/pool.js +554 -0
  149. package/dist/lib/terminal/pool.js.map +1 -0
  150. package/dist/lib/terminal/pty.d.ts +59 -0
  151. package/dist/lib/terminal/pty.d.ts.map +1 -0
  152. package/dist/lib/terminal/pty.js +224 -0
  153. package/dist/lib/terminal/pty.js.map +1 -0
  154. package/dist/lib/terminal/resources.d.ts +63 -0
  155. package/dist/lib/terminal/resources.d.ts.map +1 -0
  156. package/dist/lib/terminal/resources.js +62 -0
  157. package/dist/lib/terminal/resources.js.map +1 -0
  158. package/dist/lib/terminal/scp.d.ts +30 -0
  159. package/dist/lib/terminal/scp.d.ts.map +1 -0
  160. package/dist/lib/terminal/scp.js +74 -0
  161. package/dist/lib/terminal/scp.js.map +1 -0
  162. package/dist/lib/terminal/sessions.d.ts +101 -0
  163. package/dist/lib/terminal/sessions.d.ts.map +1 -0
  164. package/dist/lib/terminal/sessions.js +718 -0
  165. package/dist/lib/terminal/sessions.js.map +1 -0
  166. package/dist/lib/terminal/tmux-exec.d.ts +50 -0
  167. package/dist/lib/terminal/tmux-exec.d.ts.map +1 -0
  168. package/dist/lib/terminal/tmux-exec.js +79 -0
  169. package/dist/lib/terminal/tmux-exec.js.map +1 -0
  170. package/dist/lib/terminal/tmux-local.d.ts +273 -0
  171. package/dist/lib/terminal/tmux-local.d.ts.map +1 -0
  172. package/dist/lib/terminal/tmux-local.js +629 -0
  173. package/dist/lib/terminal/tmux-local.js.map +1 -0
  174. package/dist/lib/terminal/tmux-manager.d.ts +328 -0
  175. package/dist/lib/terminal/tmux-manager.d.ts.map +1 -0
  176. package/dist/lib/terminal/tmux-manager.js +667 -0
  177. package/dist/lib/terminal/tmux-manager.js.map +1 -0
  178. package/dist/lib/terminal/tmux.d.ts +213 -0
  179. package/dist/lib/terminal/tmux.d.ts.map +1 -0
  180. package/dist/lib/terminal/tmux.js +528 -0
  181. package/dist/lib/terminal/tmux.js.map +1 -0
  182. package/dist/lib/terminal/types.d.ts +18 -0
  183. package/dist/lib/terminal/types.d.ts.map +1 -0
  184. package/dist/lib/terminal/types.js +5 -0
  185. package/dist/lib/terminal/types.js.map +1 -0
  186. package/lmdb.db +0 -0
  187. package/lmdb.db-lock +0 -0
  188. package/package.json +48 -0
  189. package/src/index.js +2034 -0
  190. package/src/index.ts +2295 -0
  191. package/src/lib/hetzner/actions.ts +1056 -0
  192. package/src/lib/hetzner/auth.ts +37 -0
  193. package/src/lib/hetzner/bootstrap/cloud-init.ts +394 -0
  194. package/src/lib/hetzner/bootstrap/firewall.ts +342 -0
  195. package/src/lib/hetzner/bootstrap/genesis.ts +518 -0
  196. package/src/lib/hetzner/bootstrap/index.ts +71 -0
  197. package/src/lib/hetzner/bootstrap/kernel-hardening.test.ts +230 -0
  198. package/src/lib/hetzner/bootstrap/kernel-hardening.ts +272 -0
  199. package/src/lib/hetzner/bootstrap/security-audit.ts +124 -0
  200. package/src/lib/hetzner/bootstrap/ssh-hardening.ts +192 -0
  201. package/src/lib/hetzner/client.ts +177 -0
  202. package/src/lib/hetzner/config.ts +5 -0
  203. package/src/lib/hetzner/errors.ts +371 -0
  204. package/src/lib/hetzner/index.ts +56 -0
  205. package/src/lib/hetzner/pricing.ts +422 -0
  206. package/src/lib/hetzner/schemas.ts +765 -0
  207. package/src/lib/hetzner/server-status.ts +81 -0
  208. package/src/lib/hetzner/servers.ts +568 -0
  209. package/src/lib/hetzner/ssh-keys.ts +122 -0
  210. package/src/lib/hetzner/ssh-setup.ts +218 -0
  211. package/src/lib/hetzner/types.ts +419 -0
  212. package/src/lib/hetzner/volumes.ts +229 -0
  213. package/src/lib/resources.ts +156 -0
  214. package/src/lib/ssh/flags.ts +578 -0
  215. package/src/lib/ssh/index.ts +5 -0
  216. package/src/lib/terminal/client.ts +55 -0
  217. package/src/lib/terminal/config.ts +489 -0
  218. package/src/lib/terminal/error.ts +13 -0
  219. package/src/lib/terminal/exec.ts +128 -0
  220. package/src/lib/terminal/files.ts +636 -0
  221. package/src/lib/terminal/index.ts +71 -0
  222. package/src/lib/terminal/pool.ts +662 -0
  223. package/src/lib/terminal/scp.ts +109 -0
  224. package/src/lib/terminal/tmux-exec.ts +96 -0
  225. package/src/lib/terminal/tmux.ts +711 -0
  226. package/src/lib/terminal/types.ts +19 -0
  227. package/tsconfig.json +20 -0
@@ -0,0 +1,167 @@
1
+ /**
2
+ * SSH Key Management for Hetzner
3
+ *
4
+ * This module ensures SSH keys are properly configured between:
5
+ * 1. Local machine (~/.ssh/)
6
+ * 2. Hetzner Cloud API
7
+ *
8
+ * PROBLEM:
9
+ * - Creating random keys in Hetzner doesn't work because we need the matching private key locally
10
+ * - Password auth is unreliable and often disabled
11
+ * - IP reuse causes known_hosts conflicts
12
+ *
13
+ * SOLUTION:
14
+ * - Always use existing local keys or create new key pairs
15
+ * - Upload public key to Hetzner, keep private key local
16
+ */
17
+ import { existsSync, readFileSync } from "fs";
18
+ import { join } from "path";
19
+ import { SSHPresets, SSHFlags, buildSSHArgs, sshConfig } from "../ssh/index.js";
20
+ const HETZNER_SSH_DIR = join(process.env.HOME || "", ".ssh");
21
+ const HETZNER_KEY_PREFIX = "hetzner-codespaces";
22
+ /**
23
+ * Get or create a local SSH key pair for Hetzner
24
+ * Returns the key name to use with Hetzner API
25
+ */
26
+ export async function getOrCreateHetznerSSHKey() {
27
+ // Check for existing Hetzner keys
28
+ const existingKey = findExistingHetznerKey();
29
+ if (existingKey) {
30
+ console.log(`✓ Using existing SSH key: ${existingKey.name}`);
31
+ return existingKey;
32
+ }
33
+ // Create new key pair
34
+ console.log("Creating new SSH key pair for Hetzner...");
35
+ return createNewKeyPair();
36
+ }
37
+ /**
38
+ * Find existing Hetzner SSH key in local ~/.ssh/
39
+ */
40
+ function findExistingHetznerKey() {
41
+ const privateKeyPath = join(HETZNER_SSH_DIR, `${HETZNER_KEY_PREFIX}`);
42
+ const publicKeyPath = `${privateKeyPath}.pub`;
43
+ if (!existsSync(privateKeyPath) || !existsSync(publicKeyPath)) {
44
+ return null;
45
+ }
46
+ const publicKey = readFileSync(publicKeyPath, "utf-8").trim();
47
+ return {
48
+ name: HETZNER_KEY_PREFIX,
49
+ publicKey,
50
+ privateKeyPath,
51
+ };
52
+ }
53
+ /**
54
+ * Create a new SSH key pair for Hetzner
55
+ */
56
+ function createNewKeyPair() {
57
+ const keyName = `${HETZNER_KEY_PREFIX}-${Date.now()}`;
58
+ const privateKeyPath = join(HETZNER_SSH_DIR, keyName);
59
+ const publicKeyPath = `${privateKeyPath}.pub`;
60
+ // Generate new ed25519 key pair
61
+ try {
62
+ // Bun.spawn automatically escapes arguments to prevent shell injection
63
+ Bun.spawnSync(["ssh-keygen", "-t", "ed25519", "-f", privateKeyPath, "-N", "", "-C", keyName], {
64
+ stdout: "ignore",
65
+ stderr: "ignore",
66
+ });
67
+ // Set proper permissions
68
+ Bun.spawnSync(["chmod", "600", privateKeyPath], { stdout: "ignore", stderr: "ignore" });
69
+ Bun.spawnSync(["chmod", "644", publicKeyPath], { stdout: "ignore", stderr: "ignore" });
70
+ const publicKey = readFileSync(publicKeyPath, "utf-8").trim();
71
+ console.log(`✓ Created new SSH key: ${keyName}`);
72
+ console.log(` Private: ${privateKeyPath}`);
73
+ console.log(` Public: ${publicKeyPath}`);
74
+ return {
75
+ name: keyName,
76
+ publicKey,
77
+ privateKeyPath,
78
+ };
79
+ }
80
+ catch (error) {
81
+ throw new Error(`Failed to create SSH key: ${error}`);
82
+ }
83
+ }
84
+ /**
85
+ * Ensure SSH key exists in Hetzner
86
+ * Returns the SSH key name to use when creating servers
87
+ */
88
+ export async function ensureHetznerSSHKey(hetznerAPI) {
89
+ // 1. Get or create local key pair
90
+ const localKey = await getOrCreateHetznerSSHKey();
91
+ // 2. Check if key exists in Hetzner
92
+ const existingKeys = await hetznerAPI("/ssh_keys", "GET", null)
93
+ .then((r) => r.json())
94
+ .then((data) => data.ssh_keys);
95
+ // 3. Find matching key by public key
96
+ const matchingKey = existingKeys.find((k) => k.public_key.trim() === localKey.publicKey.trim());
97
+ if (matchingKey) {
98
+ console.log(`✓ SSH key already exists in Hetzner: ${matchingKey.name} (${matchingKey.id})`);
99
+ return matchingKey.name; // Use existing key name
100
+ }
101
+ // 4. Upload new key to Hetzner
102
+ console.log(`Uploading SSH key to Hetzner: ${localKey.name}...`);
103
+ const createResponse = await hetznerAPI("/ssh_keys", "POST", {
104
+ name: localKey.name,
105
+ public_key: localKey.publicKey,
106
+ });
107
+ if (!createResponse.ok) {
108
+ const error = await createResponse.text();
109
+ throw new Error(`Failed to upload SSH key to Hetzner: ${error}`);
110
+ }
111
+ const createdKey = (await createResponse.json());
112
+ console.log(`✓ SSH key uploaded: ${createdKey.name} (${createdKey.id})`);
113
+ return createdKey.name;
114
+ }
115
+ /**
116
+ * Clear known_hosts entry for an IP (to fix IP reuse issues)
117
+ */
118
+ export function clearKnownHosts(ip) {
119
+ try {
120
+ // Bun.spawn automatically escapes arguments to prevent shell injection
121
+ Bun.spawnSync(["ssh-keygen", "-R", ip], { stdout: "ignore", stderr: "ignore" });
122
+ console.log(`✓ Cleared known_hosts entry for ${ip}`);
123
+ }
124
+ catch {
125
+ // Ignore if entry doesn't exist
126
+ }
127
+ }
128
+ /**
129
+ * Test SSH connection to a server using typed flags
130
+ */
131
+ export async function testSSHConnection(ip, privateKeyPath, username = "root") {
132
+ try {
133
+ // Build SSH args using typed flags
134
+ const flags = [
135
+ ...SSHPresets.default,
136
+ SSHFlags.identity(privateKeyPath),
137
+ sshConfig("ConnectTimeout", "10"),
138
+ ];
139
+ const sshArgs = buildSSHArgs(flags, ip, username);
140
+ sshArgs.push("echo", "connected");
141
+ // Bun.spawn automatically escapes arguments to prevent shell injection
142
+ const proc = Bun.spawn(sshArgs, {
143
+ stdout: "ignore",
144
+ stderr: "ignore",
145
+ });
146
+ // Wait for process to complete with timeout
147
+ const timeout = setTimeout(() => proc.kill(), 15000);
148
+ await proc.exited;
149
+ clearTimeout(timeout);
150
+ return proc.exitCode === 0;
151
+ }
152
+ catch {
153
+ return false;
154
+ }
155
+ }
156
+ /**
157
+ * Full workflow: Prepare SSH keys before creating servers
158
+ */
159
+ export async function prepareSSHKeys(hetznerAPI) {
160
+ const sshKeyName = await ensureHetznerSSHKey(hetznerAPI);
161
+ const localKey = await getOrCreateHetznerSSHKey();
162
+ return {
163
+ sshKeyName,
164
+ privateKeyPath: localKey.privateKeyPath,
165
+ };
166
+ }
167
+ //# sourceMappingURL=ssh-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh-setup.js","sourceRoot":"","sources":["../../../src/lib/hetzner/ssh-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAiB,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAehF,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;AAC7D,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,kCAAkC;IAClC,MAAM,WAAW,GAAG,sBAAsB,EAAE,CAAC;IAC7C,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,6BAA6B,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7D,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB;IAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,kBAAkB,EAAE,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,GAAG,cAAc,MAAM,CAAC;IAE9C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAE9D,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,SAAS;QACT,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB;IACvB,MAAM,OAAO,GAAG,GAAG,kBAAkB,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACtD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,GAAG,cAAc,MAAM,CAAC;IAE9C,gCAAgC;IAChC,IAAI,CAAC;QACH,uEAAuE;QACvE,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;YAC5F,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QAEH,yBAAyB;QACzB,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxF,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEvF,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9D,OAAO,CAAC,GAAG,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,cAAc,cAAc,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,aAAa,EAAE,CAAC,CAAC;QAE3C,OAAO;YACL,IAAI,EAAE,OAAO;YACb,SAAS;YACT,cAAc;SACf,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAmF;IAEnF,kCAAkC;IAClC,MAAM,QAAQ,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAElD,oCAAoC;IACpC,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC;SAC5D,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACrB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAoB,CAAC,CAAC;IAE7C,qCAAqC;IACrC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhG,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,wCAAwC,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5F,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,wBAAwB;IACnD,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,GAAG,CAAC,iCAAiC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE;QAC3D,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,QAAQ,CAAC,SAAS;KAC/B,CAAC,CAAC;IAEH,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAAW,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,uBAAuB,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IAEzE,OAAO,UAAU,CAAC,IAAI,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,IAAI,CAAC;QACH,uEAAuE;QACvE,GAAG,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAU,EACV,cAAsB,EACtB,WAAmB,MAAM;IAEzB,IAAI,CAAC;QACH,mCAAmC;QACnC,MAAM,KAAK,GAAG;YACZ,GAAG,UAAU,CAAC,OAAO;YACrB,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;YACjC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC;SAClC,CAAC;QAEF,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAElC,uEAAuE;QACvE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE;YAC9B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QAEH,4CAA4C;QAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,MAAM,CAAC;QAClB,YAAY,CAAC,OAAO,CAAC,CAAC;QAEtB,OAAO,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAmF;IAKnF,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAElD,OAAO;QACL,UAAU;QACV,cAAc,EAAE,QAAQ,CAAC,cAAc;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Hetzner Cloud API types
3
+ */
4
+ import { EnvironmentStatus, ActionStatus, VolumeStatus } from "@ebowwa/codespaces-types/compile";
5
+ export { EnvironmentStatus, ActionStatus, VolumeStatus };
6
+ export interface HetznerServer {
7
+ id: number;
8
+ name: string;
9
+ status: EnvironmentStatus;
10
+ image?: {
11
+ id: number;
12
+ name: string;
13
+ description: string;
14
+ type: "snapshot" | "backup" | "system";
15
+ } | null;
16
+ public_net: {
17
+ ipv4: {
18
+ ip: string;
19
+ blocked: boolean;
20
+ };
21
+ ipv6?: {
22
+ ip: string;
23
+ blocked: boolean;
24
+ };
25
+ floating_ips: Array<{
26
+ id: number;
27
+ ip: string;
28
+ }>;
29
+ firewalls: Array<{
30
+ id: number;
31
+ name: string;
32
+ status: "applied" | "pending";
33
+ }>;
34
+ };
35
+ server_type: {
36
+ id: number;
37
+ name: string;
38
+ description: string;
39
+ cores: number;
40
+ memory: number;
41
+ disk: number;
42
+ };
43
+ datacenter: {
44
+ id: number;
45
+ name: string;
46
+ description: string;
47
+ location: {
48
+ id: number;
49
+ name: string;
50
+ description: string;
51
+ country: string;
52
+ city: string;
53
+ latitude: number;
54
+ longitude: number;
55
+ network_zone: string;
56
+ };
57
+ supported_server_types?: Array<{
58
+ id: number;
59
+ name: string;
60
+ }> | null;
61
+ };
62
+ labels: Record<string, string>;
63
+ created: string;
64
+ protection: {
65
+ delete: boolean;
66
+ rebuild: boolean;
67
+ };
68
+ volumes: Array<{
69
+ id: number;
70
+ name: string;
71
+ size: number;
72
+ linux_device: string;
73
+ }>;
74
+ }
75
+ export interface CreateServerOptions {
76
+ name: string;
77
+ server_type?: string;
78
+ image?: string;
79
+ location?: string;
80
+ datacenter?: string;
81
+ ssh_keys?: Array<string | number>;
82
+ volumes?: number[];
83
+ labels?: Record<string, string>;
84
+ start_after_create?: boolean;
85
+ /** Cloud-init user data script for first-boot provisioning */
86
+ user_data?: string;
87
+ }
88
+ export interface UpdateServerOptions {
89
+ name?: string;
90
+ labels?: Record<string, string>;
91
+ }
92
+ /**
93
+ * Action command types from Hetzner Cloud API
94
+ */
95
+ export declare enum ActionCommand {
96
+ CreateServer = "create_server",
97
+ DeleteServer = "delete_server",
98
+ StartServer = "start_server",
99
+ StopServer = "stop_server",
100
+ RebootServer = "reboot_server",
101
+ ResetServer = "reset_server",
102
+ ShutdownServer = "shutdown_server",
103
+ Poweroff = "poweroff",
104
+ ChangeServerType = "change_server_type",
105
+ RebuildServer = "rebuild_server",
106
+ EnableBackup = "enable_backup",
107
+ DisableBackup = "disable_backup",
108
+ CreateImage = "create_image",
109
+ ChangeDnsPtr = "change_dns_ptr",
110
+ AttachToNetwork = "attach_to_network",
111
+ DetachFromNetwork = "detach_from_network",
112
+ ChangeAliasIps = "change_alias_ips",
113
+ EnableRescue = "enable_rescue",
114
+ DisableRescue = "disable_rescue",
115
+ ChangeProtection = "change_protection",
116
+ CreateVolume = "create_volume",
117
+ DeleteVolume = "delete_volume",
118
+ AttachVolume = "attach_volume",
119
+ DetachVolume = "detach_volume",
120
+ ResizeVolume = "resize_volume",
121
+ VolumeChangeProtection = "volume_change_protection",
122
+ AddSubnet = "add_subnet",
123
+ DeleteSubnet = "delete_subnet",
124
+ AddRoute = "add_route",
125
+ DeleteRoute = "delete_route",
126
+ ChangeIpRange = "change_ip_range",
127
+ NetworkChangeProtection = "network_change_protection",
128
+ AssignFloatingIp = "assign_floating_ip",
129
+ UnassignFloatingIp = "unassign_floating_ip",
130
+ FloatingIpChangeDnsPtr = "floating_ip_change_dns_ptr",
131
+ FloatingIpChangeProtection = "floating_ip_change_protection",
132
+ CreateLoadBalancer = "create_load_balancer",
133
+ DeleteLoadBalancer = "delete_load_balancer",
134
+ AddTarget = "add_target",
135
+ RemoveTarget = "remove_target",
136
+ AddService = "add_service",
137
+ UpdateService = "update_service",
138
+ DeleteService = "delete_service",
139
+ LoadBalancerAttachToNetwork = "load_balancer_attach_to_network",
140
+ LoadBalancerDetachFromNetwork = "load_balancer_detach_from_network",
141
+ ChangeAlgorithm = "change_algorithm",
142
+ ChangeType = "change_type",
143
+ LoadBalancerChangeProtection = "load_balancer_change_protection",
144
+ IssueCertificate = "issue_certificate",
145
+ RetryCertificate = "retry_certificate",
146
+ SetFirewallRules = "set_firewall_rules",
147
+ ApplyFirewall = "apply_firewall",
148
+ RemoveFirewall = "remove_firewall",
149
+ FirewallChangeProtection = "firewall_change_protection",
150
+ ImageChangeProtection = "image_change_protection"
151
+ }
152
+ /**
153
+ * Resource types that can be affected by actions
154
+ */
155
+ export declare enum ResourceType {
156
+ Server = "server",
157
+ Volume = "volume",
158
+ Network = "network",
159
+ FloatingIp = "floating_ip",
160
+ LoadBalancer = "load_balancer",
161
+ Certificate = "certificate",
162
+ Firewall = "firewall",
163
+ Image = "image"
164
+ }
165
+ /**
166
+ * Action resource reference
167
+ */
168
+ export interface ActionResource {
169
+ id: number;
170
+ type: ResourceType;
171
+ }
172
+ /**
173
+ * Action error details
174
+ */
175
+ export interface ActionError {
176
+ code: string;
177
+ message: string;
178
+ }
179
+ /**
180
+ * Base Hetzner Action type matching the API response
181
+ *
182
+ * The API returns actions with:
183
+ * - status: "running" | "success" | "error"
184
+ * - finished: string | null (null when running)
185
+ * - error: ActionError | null (null when not error)
186
+ *
187
+ * Note: Zod validation makes finished and error optional, but the API
188
+ * typically returns them. Use type guards for runtime checks.
189
+ */
190
+ export interface HetznerAction {
191
+ id: number;
192
+ command: ActionCommand | string;
193
+ status: ActionStatus;
194
+ started: string;
195
+ finished?: string | null;
196
+ progress: number;
197
+ resources: ActionResource[];
198
+ error?: ActionError | null;
199
+ }
200
+ /**
201
+ * Server action response (includes server reference)
202
+ */
203
+ export interface ServerActionResponse {
204
+ action: HetznerAction;
205
+ server?: HetznerServer;
206
+ }
207
+ /**
208
+ * Create server response with actions
209
+ */
210
+ export interface CreateServerResponse {
211
+ server: HetznerServer;
212
+ action: HetznerAction;
213
+ next_actions: HetznerAction[];
214
+ root_password: string | null;
215
+ }
216
+ export interface HetznerVolume {
217
+ id: number;
218
+ name: string;
219
+ status: VolumeStatus;
220
+ server?: number | null;
221
+ size: number;
222
+ linux_device?: string | null;
223
+ format?: string | null;
224
+ location?: {
225
+ id: number;
226
+ name: string;
227
+ description: string;
228
+ country: string;
229
+ city: string;
230
+ latitude: number;
231
+ longitude: number;
232
+ } | null;
233
+ labels: Record<string, string>;
234
+ created: string;
235
+ protection: {
236
+ delete: boolean;
237
+ };
238
+ }
239
+ export interface CreateVolumeOptions {
240
+ name: string;
241
+ size: number;
242
+ server?: number;
243
+ location?: string;
244
+ format?: string;
245
+ automount?: boolean;
246
+ labels?: Record<string, string>;
247
+ }
248
+ export interface HetznerNetwork {
249
+ id: number;
250
+ name: string;
251
+ ip_range: string;
252
+ subnets: Array<{
253
+ type: "server" | "cloud" | "vswitch";
254
+ ip_range: string;
255
+ network_zone: string;
256
+ gateway: string;
257
+ }>;
258
+ routes: Array<{
259
+ destination: string;
260
+ gateway: string;
261
+ }>;
262
+ servers: number[];
263
+ protection: {
264
+ delete: boolean;
265
+ };
266
+ labels: Record<string, string>;
267
+ created: string;
268
+ }
269
+ export interface HetznerSSHKey {
270
+ id: number;
271
+ name: string;
272
+ fingerprint: string;
273
+ public_key: string;
274
+ labels: Record<string, string>;
275
+ created: string;
276
+ }
277
+ export interface CreateSSHKeyOptions {
278
+ name: string;
279
+ public_key: string;
280
+ labels?: Record<string, string>;
281
+ }
282
+ export interface RateLimitInfo {
283
+ limit: number;
284
+ remaining: number;
285
+ reset: number;
286
+ }
287
+ export interface RateLimitHeaders {
288
+ "RateLimit-Limit": string;
289
+ "RateLimit-Remaining": string;
290
+ "RateLimit-Reset": string;
291
+ }
292
+ export interface ActionPollingOptions {
293
+ /** Polling interval in milliseconds (default: 2000) */
294
+ pollInterval?: number;
295
+ /** Maximum number of polling attempts (default: 60) */
296
+ maxRetries?: number;
297
+ /** Optional callback for progress updates */
298
+ onProgress?: (action: HetznerAction) => void;
299
+ /** Optional timeout in milliseconds */
300
+ timeout?: number;
301
+ }
302
+ import type { HetznerLocation, HetznerDatacenter } from "@ebowwa/codespaces-types/compile";
303
+ /**
304
+ * Hetzner server type with pricing information
305
+ * Local override to allow undefined in location field (Hetzner API returns this)
306
+ */
307
+ export interface HetznerServerType {
308
+ id: number;
309
+ name: string;
310
+ description: string;
311
+ cores: number;
312
+ memory: number;
313
+ disk: number;
314
+ deprecated?: boolean;
315
+ prices: Array<{
316
+ location?: string | null | undefined;
317
+ price_hourly: {
318
+ net: string;
319
+ gross: string;
320
+ };
321
+ price_monthly: {
322
+ net: string;
323
+ gross: string;
324
+ };
325
+ }>;
326
+ storage_type: "local" | "network";
327
+ cpu_type: "shared" | "dedicated";
328
+ }
329
+ export type { HetznerLocation, HetznerDatacenter };
330
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/hetzner/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACb,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAMzD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,CAAC,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;KACxC,GAAG,IAAI,CAAC;IACT,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,EAAE,EAAE,MAAM,CAAC;YACX,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC;QACF,IAAI,CAAC,EAAE;YACL,EAAE,EAAE,MAAM,CAAC;YACX,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC;QACF,YAAY,EAAE,KAAK,CAAC;YAClB,EAAE,EAAE,MAAM,CAAC;YACX,EAAE,EAAE,MAAM,CAAC;SACZ,CAAC,CAAC;QACH,SAAS,EAAE,KAAK,CAAC;YACf,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;SAC/B,CAAC,CAAC;KACJ,CAAC;IACF,WAAW,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE;YACR,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,EAAE,MAAM,CAAC;YAClB,YAAY,EAAE,MAAM,CAAC;SACtB,CAAC;QACF,sBAAsB,CAAC,EAAE,KAAK,CAAC;YAC7B,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;SACd,CAAC,GAAG,IAAI,CAAC;KACX,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE;QACV,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAMD;;GAEG;AACH,oBAAY,aAAa;IAEvB,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,cAAc,oBAAoB;IAClC,QAAQ,aAAa;IACrB,gBAAgB,uBAAuB;IACvC,aAAa,mBAAmB;IAChC,YAAY,kBAAkB;IAC9B,aAAa,mBAAmB;IAChC,WAAW,iBAAiB;IAC5B,YAAY,mBAAmB;IAC/B,eAAe,sBAAsB;IACrC,iBAAiB,wBAAwB;IACzC,cAAc,qBAAqB;IACnC,YAAY,kBAAkB;IAC9B,aAAa,mBAAmB;IAChC,gBAAgB,sBAAsB;IAGtC,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,sBAAsB,6BAA6B;IAGnD,SAAS,eAAe;IACxB,YAAY,kBAAkB;IAC9B,QAAQ,cAAc;IACtB,WAAW,iBAAiB;IAC5B,aAAa,oBAAoB;IACjC,uBAAuB,8BAA8B;IAGrD,gBAAgB,uBAAuB;IACvC,kBAAkB,yBAAyB;IAC3C,sBAAsB,+BAA+B;IACrD,0BAA0B,kCAAkC;IAG5D,kBAAkB,yBAAyB;IAC3C,kBAAkB,yBAAyB;IAC3C,SAAS,eAAe;IACxB,YAAY,kBAAkB;IAC9B,UAAU,gBAAgB;IAC1B,aAAa,mBAAmB;IAChC,aAAa,mBAAmB;IAChC,2BAA2B,oCAAoC;IAC/D,6BAA6B,sCAAsC;IACnE,eAAe,qBAAqB;IACpC,UAAU,gBAAgB;IAC1B,4BAA4B,oCAAoC;IAGhE,gBAAgB,sBAAsB;IACtC,gBAAgB,sBAAsB;IAGtC,gBAAgB,uBAAuB;IACvC,aAAa,mBAAmB;IAChC,cAAc,oBAAoB;IAClC,wBAAwB,+BAA+B;IAGvD,qBAAqB,4BAA4B;CAClD;AAED;;GAEG;AACH,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,UAAU,gBAAgB;IAC1B,YAAY,kBAAkB;IAC9B,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAMD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE;QACV,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAMD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;QACrC,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE;QACV,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAMD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAMD,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAClB,MAAM,kCAAkC,CAAC;AAM1C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QACrC,YAAY,EAAE;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;QACF,aAAa,EAAE;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC,CAAC;IACH,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAAC;CAClC;AAMD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Hetzner Cloud API types
3
+ */
4
+ // ============================================================================
5
+ // Import shared status enums
6
+ // ============================================================================
7
+ import { EnvironmentStatus, ActionStatus, VolumeStatus, } from "@ebowwa/codespaces-types/compile";
8
+ // Re-export for convenience
9
+ export { EnvironmentStatus, ActionStatus, VolumeStatus };
10
+ // ============================================================================
11
+ // Action Types
12
+ // ============================================================================
13
+ /**
14
+ * Action command types from Hetzner Cloud API
15
+ */
16
+ export var ActionCommand;
17
+ (function (ActionCommand) {
18
+ // Server actions
19
+ ActionCommand["CreateServer"] = "create_server";
20
+ ActionCommand["DeleteServer"] = "delete_server";
21
+ ActionCommand["StartServer"] = "start_server";
22
+ ActionCommand["StopServer"] = "stop_server";
23
+ ActionCommand["RebootServer"] = "reboot_server";
24
+ ActionCommand["ResetServer"] = "reset_server";
25
+ ActionCommand["ShutdownServer"] = "shutdown_server";
26
+ ActionCommand["Poweroff"] = "poweroff";
27
+ ActionCommand["ChangeServerType"] = "change_server_type";
28
+ ActionCommand["RebuildServer"] = "rebuild_server";
29
+ ActionCommand["EnableBackup"] = "enable_backup";
30
+ ActionCommand["DisableBackup"] = "disable_backup";
31
+ ActionCommand["CreateImage"] = "create_image";
32
+ ActionCommand["ChangeDnsPtr"] = "change_dns_ptr";
33
+ ActionCommand["AttachToNetwork"] = "attach_to_network";
34
+ ActionCommand["DetachFromNetwork"] = "detach_from_network";
35
+ ActionCommand["ChangeAliasIps"] = "change_alias_ips";
36
+ ActionCommand["EnableRescue"] = "enable_rescue";
37
+ ActionCommand["DisableRescue"] = "disable_rescue";
38
+ ActionCommand["ChangeProtection"] = "change_protection";
39
+ // Volume actions
40
+ ActionCommand["CreateVolume"] = "create_volume";
41
+ ActionCommand["DeleteVolume"] = "delete_volume";
42
+ ActionCommand["AttachVolume"] = "attach_volume";
43
+ ActionCommand["DetachVolume"] = "detach_volume";
44
+ ActionCommand["ResizeVolume"] = "resize_volume";
45
+ ActionCommand["VolumeChangeProtection"] = "volume_change_protection";
46
+ // Network actions
47
+ ActionCommand["AddSubnet"] = "add_subnet";
48
+ ActionCommand["DeleteSubnet"] = "delete_subnet";
49
+ ActionCommand["AddRoute"] = "add_route";
50
+ ActionCommand["DeleteRoute"] = "delete_route";
51
+ ActionCommand["ChangeIpRange"] = "change_ip_range";
52
+ ActionCommand["NetworkChangeProtection"] = "network_change_protection";
53
+ // Floating IP actions
54
+ ActionCommand["AssignFloatingIp"] = "assign_floating_ip";
55
+ ActionCommand["UnassignFloatingIp"] = "unassign_floating_ip";
56
+ ActionCommand["FloatingIpChangeDnsPtr"] = "floating_ip_change_dns_ptr";
57
+ ActionCommand["FloatingIpChangeProtection"] = "floating_ip_change_protection";
58
+ // Load Balancer actions
59
+ ActionCommand["CreateLoadBalancer"] = "create_load_balancer";
60
+ ActionCommand["DeleteLoadBalancer"] = "delete_load_balancer";
61
+ ActionCommand["AddTarget"] = "add_target";
62
+ ActionCommand["RemoveTarget"] = "remove_target";
63
+ ActionCommand["AddService"] = "add_service";
64
+ ActionCommand["UpdateService"] = "update_service";
65
+ ActionCommand["DeleteService"] = "delete_service";
66
+ ActionCommand["LoadBalancerAttachToNetwork"] = "load_balancer_attach_to_network";
67
+ ActionCommand["LoadBalancerDetachFromNetwork"] = "load_balancer_detach_from_network";
68
+ ActionCommand["ChangeAlgorithm"] = "change_algorithm";
69
+ ActionCommand["ChangeType"] = "change_type";
70
+ ActionCommand["LoadBalancerChangeProtection"] = "load_balancer_change_protection";
71
+ // Certificate actions
72
+ ActionCommand["IssueCertificate"] = "issue_certificate";
73
+ ActionCommand["RetryCertificate"] = "retry_certificate";
74
+ // Firewall actions
75
+ ActionCommand["SetFirewallRules"] = "set_firewall_rules";
76
+ ActionCommand["ApplyFirewall"] = "apply_firewall";
77
+ ActionCommand["RemoveFirewall"] = "remove_firewall";
78
+ ActionCommand["FirewallChangeProtection"] = "firewall_change_protection";
79
+ // Image actions
80
+ ActionCommand["ImageChangeProtection"] = "image_change_protection";
81
+ })(ActionCommand || (ActionCommand = {}));
82
+ /**
83
+ * Resource types that can be affected by actions
84
+ */
85
+ export var ResourceType;
86
+ (function (ResourceType) {
87
+ ResourceType["Server"] = "server";
88
+ ResourceType["Volume"] = "volume";
89
+ ResourceType["Network"] = "network";
90
+ ResourceType["FloatingIp"] = "floating_ip";
91
+ ResourceType["LoadBalancer"] = "load_balancer";
92
+ ResourceType["Certificate"] = "certificate";
93
+ ResourceType["Firewall"] = "firewall";
94
+ ResourceType["Image"] = "image";
95
+ })(ResourceType || (ResourceType = {}));
96
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/hetzner/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,MAAM,kCAAkC,CAAC;AAE1C,4BAA4B;AAC5B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AA+FzD,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAN,IAAY,aAuEX;AAvED,WAAY,aAAa;IACvB,iBAAiB;IACjB,+CAA8B,CAAA;IAC9B,+CAA8B,CAAA;IAC9B,6CAA4B,CAAA;IAC5B,2CAA0B,CAAA;IAC1B,+CAA8B,CAAA;IAC9B,6CAA4B,CAAA;IAC5B,mDAAkC,CAAA;IAClC,sCAAqB,CAAA;IACrB,wDAAuC,CAAA;IACvC,iDAAgC,CAAA;IAChC,+CAA8B,CAAA;IAC9B,iDAAgC,CAAA;IAChC,6CAA4B,CAAA;IAC5B,gDAA+B,CAAA;IAC/B,sDAAqC,CAAA;IACrC,0DAAyC,CAAA;IACzC,oDAAmC,CAAA;IACnC,+CAA8B,CAAA;IAC9B,iDAAgC,CAAA;IAChC,uDAAsC,CAAA;IAEtC,iBAAiB;IACjB,+CAA8B,CAAA;IAC9B,+CAA8B,CAAA;IAC9B,+CAA8B,CAAA;IAC9B,+CAA8B,CAAA;IAC9B,+CAA8B,CAAA;IAC9B,oEAAmD,CAAA;IAEnD,kBAAkB;IAClB,yCAAwB,CAAA;IACxB,+CAA8B,CAAA;IAC9B,uCAAsB,CAAA;IACtB,6CAA4B,CAAA;IAC5B,kDAAiC,CAAA;IACjC,sEAAqD,CAAA;IAErD,sBAAsB;IACtB,wDAAuC,CAAA;IACvC,4DAA2C,CAAA;IAC3C,sEAAqD,CAAA;IACrD,6EAA4D,CAAA;IAE5D,wBAAwB;IACxB,4DAA2C,CAAA;IAC3C,4DAA2C,CAAA;IAC3C,yCAAwB,CAAA;IACxB,+CAA8B,CAAA;IAC9B,2CAA0B,CAAA;IAC1B,iDAAgC,CAAA;IAChC,iDAAgC,CAAA;IAChC,gFAA+D,CAAA;IAC/D,oFAAmE,CAAA;IACnE,qDAAoC,CAAA;IACpC,2CAA0B,CAAA;IAC1B,iFAAgE,CAAA;IAEhE,sBAAsB;IACtB,uDAAsC,CAAA;IACtC,uDAAsC,CAAA;IAEtC,mBAAmB;IACnB,wDAAuC,CAAA;IACvC,iDAAgC,CAAA;IAChC,mDAAkC,CAAA;IAClC,wEAAuD,CAAA;IAEvD,gBAAgB;IAChB,kEAAiD,CAAA;AACnD,CAAC,EAvEW,aAAa,KAAb,aAAa,QAuExB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,YASX;AATD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,iCAAiB,CAAA;IACjB,mCAAmB,CAAA;IACnB,0CAA0B,CAAA;IAC1B,8CAA8B,CAAA;IAC9B,2CAA2B,CAAA;IAC3B,qCAAqB,CAAA;IACrB,+BAAe,CAAA;AACjB,CAAC,EATW,YAAY,KAAZ,YAAY,QASvB"}