@flui-cloud/cli 0.0.1

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 (873) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +124 -0
  3. package/bin/run +17 -0
  4. package/lib/cli/src/background/cluster-worker.d.ts +11 -0
  5. package/lib/cli/src/background/cluster-worker.js +90 -0
  6. package/lib/cli/src/cli-providers.module.d.ts +2 -0
  7. package/lib/cli/src/cli-providers.module.js +118 -0
  8. package/lib/cli/src/cli.module.d.ts +13 -0
  9. package/lib/cli/src/cli.module.js +80 -0
  10. package/lib/cli/src/commands/_diag-oidc.d.ts +6 -0
  11. package/lib/cli/src/commands/_diag-oidc.js +132 -0
  12. package/lib/cli/src/commands/app/backup/create.d.ts +20 -0
  13. package/lib/cli/src/commands/app/backup/create.js +128 -0
  14. package/lib/cli/src/commands/app/backup/delete.d.ts +19 -0
  15. package/lib/cli/src/commands/app/backup/delete.js +95 -0
  16. package/lib/cli/src/commands/app/build.d.ts +17 -0
  17. package/lib/cli/src/commands/app/build.js +133 -0
  18. package/lib/cli/src/commands/app/builds.d.ts +14 -0
  19. package/lib/cli/src/commands/app/builds.js +82 -0
  20. package/lib/cli/src/commands/app/crash.d.ts +16 -0
  21. package/lib/cli/src/commands/app/crash.js +106 -0
  22. package/lib/cli/src/commands/app/crashes.d.ts +15 -0
  23. package/lib/cli/src/commands/app/crashes.js +99 -0
  24. package/lib/cli/src/commands/app/delete.d.ts +16 -0
  25. package/lib/cli/src/commands/app/delete.js +149 -0
  26. package/lib/cli/src/commands/app/image/delete.d.ts +18 -0
  27. package/lib/cli/src/commands/app/image/delete.js +72 -0
  28. package/lib/cli/src/commands/app/init.d.ts +40 -0
  29. package/lib/cli/src/commands/app/init.js +436 -0
  30. package/lib/cli/src/commands/app/list.d.ts +11 -0
  31. package/lib/cli/src/commands/app/list.js +84 -0
  32. package/lib/cli/src/commands/app/logs.d.ts +18 -0
  33. package/lib/cli/src/commands/app/logs.js +121 -0
  34. package/lib/cli/src/commands/app/metrics.d.ts +17 -0
  35. package/lib/cli/src/commands/app/metrics.js +100 -0
  36. package/lib/cli/src/commands/app/redeploy.d.ts +14 -0
  37. package/lib/cli/src/commands/app/redeploy.js +60 -0
  38. package/lib/cli/src/commands/app/releases.d.ts +15 -0
  39. package/lib/cli/src/commands/app/releases.js +117 -0
  40. package/lib/cli/src/commands/app/restart.d.ts +12 -0
  41. package/lib/cli/src/commands/app/restart.js +44 -0
  42. package/lib/cli/src/commands/app/scale.d.ts +13 -0
  43. package/lib/cli/src/commands/app/scale.js +58 -0
  44. package/lib/cli/src/commands/app/snapshot/create.d.ts +14 -0
  45. package/lib/cli/src/commands/app/snapshot/create.js +85 -0
  46. package/lib/cli/src/commands/app/snapshot/delete.d.ts +14 -0
  47. package/lib/cli/src/commands/app/snapshot/delete.js +63 -0
  48. package/lib/cli/src/commands/app/snapshot/list.d.ts +11 -0
  49. package/lib/cli/src/commands/app/snapshot/list.js +82 -0
  50. package/lib/cli/src/commands/app/snapshot/restore.d.ts +15 -0
  51. package/lib/cli/src/commands/app/snapshot/restore.js +74 -0
  52. package/lib/cli/src/commands/app/snapshot/swap.d.ts +15 -0
  53. package/lib/cli/src/commands/app/snapshot/swap.js +68 -0
  54. package/lib/cli/src/commands/app/start.d.ts +12 -0
  55. package/lib/cli/src/commands/app/start.js +45 -0
  56. package/lib/cli/src/commands/app/status.d.ts +15 -0
  57. package/lib/cli/src/commands/app/status.js +108 -0
  58. package/lib/cli/src/commands/app/stop.d.ts +12 -0
  59. package/lib/cli/src/commands/app/stop.js +45 -0
  60. package/lib/cli/src/commands/app/versions.d.ts +14 -0
  61. package/lib/cli/src/commands/app/versions.js +80 -0
  62. package/lib/cli/src/commands/auth/generate-api-key.d.ts +12 -0
  63. package/lib/cli/src/commands/auth/generate-api-key.js +90 -0
  64. package/lib/cli/src/commands/auth/login.d.ts +11 -0
  65. package/lib/cli/src/commands/auth/login.js +296 -0
  66. package/lib/cli/src/commands/auth/reset-password.d.ts +15 -0
  67. package/lib/cli/src/commands/auth/reset-password.js +253 -0
  68. package/lib/cli/src/commands/backup/destination/create.d.ts +22 -0
  69. package/lib/cli/src/commands/backup/destination/create.js +102 -0
  70. package/lib/cli/src/commands/backup/destination/delete.d.ts +11 -0
  71. package/lib/cli/src/commands/backup/destination/delete.js +46 -0
  72. package/lib/cli/src/commands/backup/destination/list.d.ts +9 -0
  73. package/lib/cli/src/commands/backup/destination/list.js +42 -0
  74. package/lib/cli/src/commands/backup/destination/show.d.ts +11 -0
  75. package/lib/cli/src/commands/backup/destination/show.js +45 -0
  76. package/lib/cli/src/commands/backup/destination/test.d.ts +8 -0
  77. package/lib/cli/src/commands/backup/destination/test.js +39 -0
  78. package/lib/cli/src/commands/backup/job/list.d.ts +9 -0
  79. package/lib/cli/src/commands/backup/job/list.js +38 -0
  80. package/lib/cli/src/commands/backup/job/run.d.ts +8 -0
  81. package/lib/cli/src/commands/backup/job/run.js +32 -0
  82. package/lib/cli/src/commands/backup/job/show.d.ts +11 -0
  83. package/lib/cli/src/commands/backup/job/show.js +38 -0
  84. package/lib/cli/src/commands/backup/policy/create.d.ts +21 -0
  85. package/lib/cli/src/commands/backup/policy/create.js +97 -0
  86. package/lib/cli/src/commands/backup/policy/delete.d.ts +11 -0
  87. package/lib/cli/src/commands/backup/policy/delete.js +42 -0
  88. package/lib/cli/src/commands/backup/policy/list.d.ts +9 -0
  89. package/lib/cli/src/commands/backup/policy/list.js +40 -0
  90. package/lib/cli/src/commands/backup/policy/show.d.ts +11 -0
  91. package/lib/cli/src/commands/backup/policy/show.js +45 -0
  92. package/lib/cli/src/commands/backup/restore/create.d.ts +14 -0
  93. package/lib/cli/src/commands/backup/restore/create.js +68 -0
  94. package/lib/cli/src/commands/backup/restore/list.d.ts +8 -0
  95. package/lib/cli/src/commands/backup/restore/list.js +33 -0
  96. package/lib/cli/src/commands/backup/restore/preview.d.ts +9 -0
  97. package/lib/cli/src/commands/backup/restore/preview.js +29 -0
  98. package/lib/cli/src/commands/backup/restore/show.d.ts +11 -0
  99. package/lib/cli/src/commands/backup/restore/show.js +40 -0
  100. package/lib/cli/src/commands/catalog/validate.d.ts +14 -0
  101. package/lib/cli/src/commands/catalog/validate.js +155 -0
  102. package/lib/cli/src/commands/cluster/destroy.d.ts +15 -0
  103. package/lib/cli/src/commands/cluster/destroy.js +137 -0
  104. package/lib/cli/src/commands/config/get.d.ts +9 -0
  105. package/lib/cli/src/commands/config/get.js +47 -0
  106. package/lib/cli/src/commands/config/list.d.ts +15 -0
  107. package/lib/cli/src/commands/config/list.js +109 -0
  108. package/lib/cli/src/commands/config/remove.d.ts +12 -0
  109. package/lib/cli/src/commands/config/remove.js +92 -0
  110. package/lib/cli/src/commands/config/set.d.ts +15 -0
  111. package/lib/cli/src/commands/config/set.js +152 -0
  112. package/lib/cli/src/commands/config/show.d.ts +6 -0
  113. package/lib/cli/src/commands/config/show.js +15 -0
  114. package/lib/cli/src/commands/context/create.d.ts +12 -0
  115. package/lib/cli/src/commands/context/create.js +46 -0
  116. package/lib/cli/src/commands/context/delete.d.ts +12 -0
  117. package/lib/cli/src/commands/context/delete.js +53 -0
  118. package/lib/cli/src/commands/context/list.d.ts +6 -0
  119. package/lib/cli/src/commands/context/list.js +29 -0
  120. package/lib/cli/src/commands/context/show.d.ts +6 -0
  121. package/lib/cli/src/commands/context/show.js +12 -0
  122. package/lib/cli/src/commands/context/use.d.ts +9 -0
  123. package/lib/cli/src/commands/context/use.js +30 -0
  124. package/lib/cli/src/commands/deploy.d.ts +49 -0
  125. package/lib/cli/src/commands/deploy.js +542 -0
  126. package/lib/cli/src/commands/dev/creds.d.ts +19 -0
  127. package/lib/cli/src/commands/dev/creds.js +290 -0
  128. package/lib/cli/src/commands/dev/tunnel.d.ts +15 -0
  129. package/lib/cli/src/commands/dev/tunnel.js +268 -0
  130. package/lib/cli/src/commands/dns/cleanup.d.ts +11 -0
  131. package/lib/cli/src/commands/dns/cleanup.js +93 -0
  132. package/lib/cli/src/commands/env/capacity.d.ts +12 -0
  133. package/lib/cli/src/commands/env/capacity.js +177 -0
  134. package/lib/cli/src/commands/env/create.d.ts +21 -0
  135. package/lib/cli/src/commands/env/create.js +721 -0
  136. package/lib/cli/src/commands/env/credentials.d.ts +21 -0
  137. package/lib/cli/src/commands/env/credentials.js +435 -0
  138. package/lib/cli/src/commands/env/destroy.d.ts +9 -0
  139. package/lib/cli/src/commands/env/destroy.js +145 -0
  140. package/lib/cli/src/commands/env/diag-ca.d.ts +14 -0
  141. package/lib/cli/src/commands/env/diag-ca.js +192 -0
  142. package/lib/cli/src/commands/env/export-config.d.ts +39 -0
  143. package/lib/cli/src/commands/env/export-config.js +386 -0
  144. package/lib/cli/src/commands/env/force-ready.d.ts +10 -0
  145. package/lib/cli/src/commands/env/force-ready.js +222 -0
  146. package/lib/cli/src/commands/env/inspect.d.ts +12 -0
  147. package/lib/cli/src/commands/env/inspect.js +192 -0
  148. package/lib/cli/src/commands/env/kubectl.d.ts +9 -0
  149. package/lib/cli/src/commands/env/kubectl.js +33 -0
  150. package/lib/cli/src/commands/env/logs.d.ts +12 -0
  151. package/lib/cli/src/commands/env/logs.js +136 -0
  152. package/lib/cli/src/commands/env/orphan-volumes.d.ts +11 -0
  153. package/lib/cli/src/commands/env/orphan-volumes.js +153 -0
  154. package/lib/cli/src/commands/env/refresh-kubeconfig.d.ts +6 -0
  155. package/lib/cli/src/commands/env/refresh-kubeconfig.js +66 -0
  156. package/lib/cli/src/commands/env/repair-ssh-ca.d.ts +11 -0
  157. package/lib/cli/src/commands/env/repair-ssh-ca.js +137 -0
  158. package/lib/cli/src/commands/env/restart.d.ts +10 -0
  159. package/lib/cli/src/commands/env/restart.js +187 -0
  160. package/lib/cli/src/commands/env/scale-master.d.ts +11 -0
  161. package/lib/cli/src/commands/env/scale-master.js +160 -0
  162. package/lib/cli/src/commands/env/scale-node.d.ts +14 -0
  163. package/lib/cli/src/commands/env/scale-node.js +139 -0
  164. package/lib/cli/src/commands/env/status.d.ts +10 -0
  165. package/lib/cli/src/commands/env/status.js +182 -0
  166. package/lib/cli/src/commands/env/stop.d.ts +6 -0
  167. package/lib/cli/src/commands/env/stop.js +147 -0
  168. package/lib/cli/src/commands/env/storage-expand.d.ts +10 -0
  169. package/lib/cli/src/commands/env/storage-expand.js +124 -0
  170. package/lib/cli/src/commands/env/storage.d.ts +8 -0
  171. package/lib/cli/src/commands/env/storage.js +92 -0
  172. package/lib/cli/src/commands/env/sync.d.ts +17 -0
  173. package/lib/cli/src/commands/env/sync.js +225 -0
  174. package/lib/cli/src/commands/env/uncordon.d.ts +9 -0
  175. package/lib/cli/src/commands/env/uncordon.js +73 -0
  176. package/lib/cli/src/commands/env/update-firewall.d.ts +9 -0
  177. package/lib/cli/src/commands/env/update-firewall.js +185 -0
  178. package/lib/cli/src/commands/integration/connect.d.ts +13 -0
  179. package/lib/cli/src/commands/integration/connect.js +161 -0
  180. package/lib/cli/src/commands/integration/ghcr-pat/revoke.d.ts +9 -0
  181. package/lib/cli/src/commands/integration/ghcr-pat/revoke.js +61 -0
  182. package/lib/cli/src/commands/integration/ghcr-pat/set.d.ts +12 -0
  183. package/lib/cli/src/commands/integration/ghcr-pat/set.js +141 -0
  184. package/lib/cli/src/commands/integration/ghcr-pat/status.d.ts +6 -0
  185. package/lib/cli/src/commands/integration/ghcr-pat/status.js +69 -0
  186. package/lib/cli/src/commands/integration/installations.d.ts +6 -0
  187. package/lib/cli/src/commands/integration/installations.js +45 -0
  188. package/lib/cli/src/commands/integration/list.d.ts +8 -0
  189. package/lib/cli/src/commands/integration/list.js +67 -0
  190. package/lib/cli/src/commands/integration/remove-installation.d.ts +12 -0
  191. package/lib/cli/src/commands/integration/remove-installation.js +71 -0
  192. package/lib/cli/src/commands/integration/setup-github-app.d.ts +10 -0
  193. package/lib/cli/src/commands/integration/setup-github-app.js +162 -0
  194. package/lib/cli/src/commands/node/add.d.ts +11 -0
  195. package/lib/cli/src/commands/node/add.js +103 -0
  196. package/lib/cli/src/commands/node/list.d.ts +11 -0
  197. package/lib/cli/src/commands/node/list.js +83 -0
  198. package/lib/cli/src/commands/node/remove.d.ts +16 -0
  199. package/lib/cli/src/commands/node/remove.js +161 -0
  200. package/lib/cli/src/commands/reconcile.d.ts +19 -0
  201. package/lib/cli/src/commands/reconcile.js +171 -0
  202. package/lib/cli/src/commands/repo/connect.d.ts +12 -0
  203. package/lib/cli/src/commands/repo/connect.js +133 -0
  204. package/lib/cli/src/commands/repo/disconnect.d.ts +12 -0
  205. package/lib/cli/src/commands/repo/disconnect.js +73 -0
  206. package/lib/cli/src/commands/repo/list.d.ts +9 -0
  207. package/lib/cli/src/commands/repo/list.js +66 -0
  208. package/lib/cli/src/commands/server-types/list.d.ts +12 -0
  209. package/lib/cli/src/commands/server-types/list.js +205 -0
  210. package/lib/cli/src/commands/ssh.d.ts +9 -0
  211. package/lib/cli/src/commands/ssh.js +94 -0
  212. package/lib/cli/src/commands/standalone/install.d.ts +27 -0
  213. package/lib/cli/src/commands/standalone/install.js +330 -0
  214. package/lib/cli/src/commands/template/use.d.ts +16 -0
  215. package/lib/cli/src/commands/template/use.js +111 -0
  216. package/lib/cli/src/commands/update.d.ts +6 -0
  217. package/lib/cli/src/commands/update.js +87 -0
  218. package/lib/cli/src/config/bootstrap.config.d.ts +37 -0
  219. package/lib/cli/src/config/bootstrap.config.js +33 -0
  220. package/lib/cli/src/config/defaults.d.ts +46 -0
  221. package/lib/cli/src/config/defaults.js +79 -0
  222. package/lib/cli/src/config/key-router.d.ts +22 -0
  223. package/lib/cli/src/config/key-router.js +45 -0
  224. package/lib/cli/src/config/preferences-echo.d.ts +9 -0
  225. package/lib/cli/src/config/preferences-echo.js +61 -0
  226. package/lib/cli/src/config/preferences-resolver.d.ts +43 -0
  227. package/lib/cli/src/config/preferences-resolver.js +100 -0
  228. package/lib/cli/src/config/preferences-schema.d.ts +32 -0
  229. package/lib/cli/src/config/preferences-schema.js +53 -0
  230. package/lib/cli/src/hooks/command_not_found.d.ts +3 -0
  231. package/lib/cli/src/hooks/command_not_found.js +44 -0
  232. package/lib/cli/src/lib/api-client.d.ts +58 -0
  233. package/lib/cli/src/lib/api-client.js +162 -0
  234. package/lib/cli/src/lib/backup-client.d.ts +131 -0
  235. package/lib/cli/src/lib/backup-client.js +78 -0
  236. package/lib/cli/src/lib/browser-callback.d.ts +3 -0
  237. package/lib/cli/src/lib/browser-callback.js +83 -0
  238. package/lib/cli/src/lib/byos-precheck.d.ts +29 -0
  239. package/lib/cli/src/lib/byos-precheck.js +162 -0
  240. package/lib/cli/src/lib/ca-utils.d.ts +13 -0
  241. package/lib/cli/src/lib/ca-utils.js +72 -0
  242. package/lib/cli/src/lib/cli-credential-provider.service.d.ts +31 -0
  243. package/lib/cli/src/lib/cli-credential-provider.service.js +86 -0
  244. package/lib/cli/src/lib/config-storage.d.ts +128 -0
  245. package/lib/cli/src/lib/config-storage.js +349 -0
  246. package/lib/cli/src/lib/config.d.ts +23 -0
  247. package/lib/cli/src/lib/config.js +113 -0
  248. package/lib/cli/src/lib/context-banner.d.ts +12 -0
  249. package/lib/cli/src/lib/context-banner.js +25 -0
  250. package/lib/cli/src/lib/format-bytes.d.ts +1 -0
  251. package/lib/cli/src/lib/format-bytes.js +18 -0
  252. package/lib/cli/src/lib/framework-detector.d.ts +12 -0
  253. package/lib/cli/src/lib/framework-detector.js +216 -0
  254. package/lib/cli/src/lib/framework-postchecks.d.ts +11 -0
  255. package/lib/cli/src/lib/framework-postchecks.js +152 -0
  256. package/lib/cli/src/lib/nest-app.d.ts +17 -0
  257. package/lib/cli/src/lib/nest-app.js +69 -0
  258. package/lib/cli/src/lib/nip-base-domain.util.d.ts +8 -0
  259. package/lib/cli/src/lib/nip-base-domain.util.js +17 -0
  260. package/lib/cli/src/lib/profile-manager.d.ts +56 -0
  261. package/lib/cli/src/lib/profile-manager.js +207 -0
  262. package/lib/cli/src/lib/prompts.d.ts +67 -0
  263. package/lib/cli/src/lib/prompts.js +475 -0
  264. package/lib/cli/src/lib/provider-credential-schemas.d.ts +29 -0
  265. package/lib/cli/src/lib/provider-credential-schemas.js +48 -0
  266. package/lib/cli/src/lib/repositories/cli-cluster.repository.d.ts +56 -0
  267. package/lib/cli/src/lib/repositories/cli-cluster.repository.js +216 -0
  268. package/lib/cli/src/lib/repositories/cli-firewall.repository.d.ts +13 -0
  269. package/lib/cli/src/lib/repositories/cli-firewall.repository.js +147 -0
  270. package/lib/cli/src/lib/repositories/cli-node.repository.d.ts +26 -0
  271. package/lib/cli/src/lib/repositories/cli-node.repository.js +164 -0
  272. package/lib/cli/src/lib/repositories/cli-operation.repository.d.ts +57 -0
  273. package/lib/cli/src/lib/repositories/cli-operation.repository.js +226 -0
  274. package/lib/cli/src/lib/repositories/cli-vnet.repository.d.ts +22 -0
  275. package/lib/cli/src/lib/repositories/cli-vnet.repository.js +175 -0
  276. package/lib/cli/src/lib/repositories/index.d.ts +5 -0
  277. package/lib/cli/src/lib/repositories/index.js +21 -0
  278. package/lib/cli/src/lib/resolve-cluster.d.ts +16 -0
  279. package/lib/cli/src/lib/resolve-cluster.js +34 -0
  280. package/lib/cli/src/lib/scaleway-validator.d.ts +5 -0
  281. package/lib/cli/src/lib/scaleway-validator.js +87 -0
  282. package/lib/cli/src/lib/server-utils.d.ts +8 -0
  283. package/lib/cli/src/lib/server-utils.js +19 -0
  284. package/lib/cli/src/lib/services/cli-app.service.d.ts +294 -0
  285. package/lib/cli/src/lib/services/cli-app.service.js +162 -0
  286. package/lib/cli/src/lib/services/cli-node.service.d.ts +43 -0
  287. package/lib/cli/src/lib/services/cli-node.service.js +34 -0
  288. package/lib/cli/src/lib/services/provider-sync.service.d.ts +90 -0
  289. package/lib/cli/src/lib/services/provider-sync.service.js +178 -0
  290. package/lib/cli/src/lib/services/reconciliation.service.d.ts +40 -0
  291. package/lib/cli/src/lib/services/reconciliation.service.js +119 -0
  292. package/lib/cli/src/lib/services/vnet-provisioning.service.d.ts +37 -0
  293. package/lib/cli/src/lib/services/vnet-provisioning.service.js +164 -0
  294. package/lib/cli/src/lib/ssh-key.d.ts +23 -0
  295. package/lib/cli/src/lib/ssh-key.js +126 -0
  296. package/lib/cli/src/lib/template-fetcher.d.ts +25 -0
  297. package/lib/cli/src/lib/template-fetcher.js +48 -0
  298. package/lib/cli/src/lib/templates/firewall-rules.d.ts +8 -0
  299. package/lib/cli/src/lib/templates/firewall-rules.js +17 -0
  300. package/lib/cli/src/lib/typeorm-shim.d.ts +12 -0
  301. package/lib/cli/src/lib/typeorm-shim.js +17 -0
  302. package/lib/cli/src/lib/utils/env-file.d.ts +2 -0
  303. package/lib/cli/src/lib/utils/env-file.js +40 -0
  304. package/lib/cli/src/lib/utils/ip-detection.d.ts +27 -0
  305. package/lib/cli/src/lib/utils/ip-detection.js +144 -0
  306. package/lib/cli/src/modules/cli-infrastructure.module.d.ts +14 -0
  307. package/lib/cli/src/modules/cli-infrastructure.module.js +249 -0
  308. package/lib/cli/src/services/cli-ca.service.d.ts +62 -0
  309. package/lib/cli/src/services/cli-ca.service.js +281 -0
  310. package/lib/cli/src/services/cli-cluster-creator.service.d.ts +78 -0
  311. package/lib/cli/src/services/cli-cluster-creator.service.js +655 -0
  312. package/lib/cli/src/services/cli-clusters.service.d.ts +74 -0
  313. package/lib/cli/src/services/cli-clusters.service.js +762 -0
  314. package/lib/cli/src/services/cli-endpoint-resolver.service.d.ts +33 -0
  315. package/lib/cli/src/services/cli-endpoint-resolver.service.js +195 -0
  316. package/lib/cli/src/services/cli-k3s-script.service.d.ts +114 -0
  317. package/lib/cli/src/services/cli-k3s-script.service.js +288 -0
  318. package/lib/cli/src/services/cli-logger.service.d.ts +56 -0
  319. package/lib/cli/src/services/cli-logger.service.js +188 -0
  320. package/lib/cli/src/services/cli-observability-cluster.service.d.ts +128 -0
  321. package/lib/cli/src/services/cli-observability-cluster.service.js +525 -0
  322. package/lib/cli/src/services/cli-ssh.service.d.ts +90 -0
  323. package/lib/cli/src/services/cli-ssh.service.js +457 -0
  324. package/lib/cli/src/services/server-type-cache.service.d.ts +34 -0
  325. package/lib/cli/src/services/server-type-cache.service.js +156 -0
  326. package/lib/cli/src/services/server-type-validator.service.d.ts +80 -0
  327. package/lib/cli/src/services/server-type-validator.service.js +366 -0
  328. package/lib/cli/src/types/index.d.ts +41 -0
  329. package/lib/cli/src/types/index.js +2 -0
  330. package/lib/src/common/utils/project-root.util.d.ts +22 -0
  331. package/lib/src/common/utils/project-root.util.js +78 -0
  332. package/lib/src/modules/access/access.controller.d.ts +30 -0
  333. package/lib/src/modules/access/access.controller.js +336 -0
  334. package/lib/src/modules/access/access.module.d.ts +2 -0
  335. package/lib/src/modules/access/access.module.js +92 -0
  336. package/lib/src/modules/access/controllers/ca.controller.d.ts +22 -0
  337. package/lib/src/modules/access/controllers/ca.controller.js +242 -0
  338. package/lib/src/modules/access/dto/api-token.dto.d.ts +11 -0
  339. package/lib/src/modules/access/dto/api-token.dto.js +74 -0
  340. package/lib/src/modules/access/dto/bearer-token.dto.d.ts +7 -0
  341. package/lib/src/modules/access/dto/bearer-token.dto.js +36 -0
  342. package/lib/src/modules/access/dto/ca-public-key.dto.d.ts +7 -0
  343. package/lib/src/modules/access/dto/ca-public-key.dto.js +52 -0
  344. package/lib/src/modules/access/dto/create-api-token.dto.d.ts +7 -0
  345. package/lib/src/modules/access/dto/create-api-token.dto.js +64 -0
  346. package/lib/src/modules/access/dto/create-bearer-token.dto.d.ts +9 -0
  347. package/lib/src/modules/access/dto/create-bearer-token.dto.js +58 -0
  348. package/lib/src/modules/access/dto/create-ssh-key.dto.d.ts +7 -0
  349. package/lib/src/modules/access/dto/create-ssh-key.dto.js +61 -0
  350. package/lib/src/modules/access/dto/refresh-token.dto.d.ts +7 -0
  351. package/lib/src/modules/access/dto/refresh-token.dto.js +46 -0
  352. package/lib/src/modules/access/dto/register-ca.dto.d.ts +16 -0
  353. package/lib/src/modules/access/dto/register-ca.dto.js +111 -0
  354. package/lib/src/modules/access/dto/ssh-key.dto.d.ts +20 -0
  355. package/lib/src/modules/access/dto/ssh-key.dto.js +124 -0
  356. package/lib/src/modules/access/dto/update-ssh-key.dto.d.ts +7 -0
  357. package/lib/src/modules/access/dto/update-ssh-key.dto.js +73 -0
  358. package/lib/src/modules/access/entities/api-token.entity.d.ts +30 -0
  359. package/lib/src/modules/access/entities/api-token.entity.js +87 -0
  360. package/lib/src/modules/access/entities/ca-keypair.entity.d.ts +13 -0
  361. package/lib/src/modules/access/entities/ca-keypair.entity.js +63 -0
  362. package/lib/src/modules/access/entities/credentials.entity.d.ts +18 -0
  363. package/lib/src/modules/access/entities/credentials.entity.js +87 -0
  364. package/lib/src/modules/access/entities/ssh-key.entity.d.ts +15 -0
  365. package/lib/src/modules/access/entities/ssh-key.entity.js +81 -0
  366. package/lib/src/modules/access/enums/credential-purpose.enum.d.ts +4 -0
  367. package/lib/src/modules/access/enums/credential-purpose.enum.js +8 -0
  368. package/lib/src/modules/access/interfaces/access.repository.d.ts +11 -0
  369. package/lib/src/modules/access/interfaces/access.repository.js +2 -0
  370. package/lib/src/modules/access/interfaces/ssh-key.interface.d.ts +26 -0
  371. package/lib/src/modules/access/interfaces/ssh-key.interface.js +2 -0
  372. package/lib/src/modules/access/mapper/api-token.mapper.d.ts +6 -0
  373. package/lib/src/modules/access/mapper/api-token.mapper.js +21 -0
  374. package/lib/src/modules/access/mapper/ssh-key.mapper.d.ts +6 -0
  375. package/lib/src/modules/access/mapper/ssh-key.mapper.js +25 -0
  376. package/lib/src/modules/access/providers/contabo-ssh-provider.service.d.ts +13 -0
  377. package/lib/src/modules/access/providers/contabo-ssh-provider.service.js +40 -0
  378. package/lib/src/modules/access/providers/hetzner-ssh-provider.service.d.ts +17 -0
  379. package/lib/src/modules/access/providers/hetzner-ssh-provider.service.js +95 -0
  380. package/lib/src/modules/access/providers/interfaces/ssh-provider.interface.d.ts +8 -0
  381. package/lib/src/modules/access/providers/interfaces/ssh-provider.interface.js +3 -0
  382. package/lib/src/modules/access/providers/ssh-provider.factory.d.ts +13 -0
  383. package/lib/src/modules/access/providers/ssh-provider.factory.js +44 -0
  384. package/lib/src/modules/access/repositories/api-token.repository.d.ts +24 -0
  385. package/lib/src/modules/access/repositories/api-token.repository.js +99 -0
  386. package/lib/src/modules/access/repositories/default-access.repository.d.ts +16 -0
  387. package/lib/src/modules/access/repositories/default-access.repository.js +121 -0
  388. package/lib/src/modules/access/repositories/provider-credentials.repository.d.ts +17 -0
  389. package/lib/src/modules/access/repositories/provider-credentials.repository.js +106 -0
  390. package/lib/src/modules/access/services/access.service.d.ts +180 -0
  391. package/lib/src/modules/access/services/access.service.js +732 -0
  392. package/lib/src/modules/access/services/bearerToken.service.d.ts +15 -0
  393. package/lib/src/modules/access/services/bearerToken.service.js +107 -0
  394. package/lib/src/modules/access/services/ca-manager.service.d.ts +48 -0
  395. package/lib/src/modules/access/services/ca-manager.service.js +293 -0
  396. package/lib/src/modules/access/services/certificate-signer.service.d.ts +36 -0
  397. package/lib/src/modules/access/services/certificate-signer.service.js +155 -0
  398. package/lib/src/modules/access/services/key-storage.service.d.ts +17 -0
  399. package/lib/src/modules/access/services/key-storage.service.js +133 -0
  400. package/lib/src/modules/access/services/ssh-key-generator.service.d.ts +6 -0
  401. package/lib/src/modules/access/services/ssh-key-generator.service.js +51 -0
  402. package/lib/src/modules/app-builds/entities/app-build.entity.d.ts +38 -0
  403. package/lib/src/modules/app-builds/entities/app-build.entity.js +168 -0
  404. package/lib/src/modules/app-builds/enums/app-build-status.enum.d.ts +10 -0
  405. package/lib/src/modules/app-builds/enums/app-build-status.enum.js +14 -0
  406. package/lib/src/modules/app-builds/enums/build-provider.enum.d.ts +6 -0
  407. package/lib/src/modules/app-builds/enums/build-provider.enum.js +10 -0
  408. package/lib/src/modules/app-builds/services/build-job.service.d.ts +178 -0
  409. package/lib/src/modules/app-builds/services/build-job.service.js +1057 -0
  410. package/lib/src/modules/applications/entities/app-resource.entity.d.ts +24 -0
  411. package/lib/src/modules/applications/entities/app-resource.entity.js +117 -0
  412. package/lib/src/modules/applications/entities/app-revision.entity.d.ts +29 -0
  413. package/lib/src/modules/applications/entities/app-revision.entity.js +133 -0
  414. package/lib/src/modules/applications/entities/application.entity.d.ts +121 -0
  415. package/lib/src/modules/applications/entities/application.entity.js +279 -0
  416. package/lib/src/modules/applications/enums/app-event-type.enum.d.ts +24 -0
  417. package/lib/src/modules/applications/enums/app-event-type.enum.js +28 -0
  418. package/lib/src/modules/applications/enums/application-category.enum.d.ts +4 -0
  419. package/lib/src/modules/applications/enums/application-category.enum.js +8 -0
  420. package/lib/src/modules/applications/enums/application-exposure.enum.d.ts +4 -0
  421. package/lib/src/modules/applications/enums/application-exposure.enum.js +8 -0
  422. package/lib/src/modules/applications/enums/application-kind.enum.d.ts +6 -0
  423. package/lib/src/modules/applications/enums/application-kind.enum.js +10 -0
  424. package/lib/src/modules/applications/enums/application-resource-kind.enum.d.ts +17 -0
  425. package/lib/src/modules/applications/enums/application-resource-kind.enum.js +21 -0
  426. package/lib/src/modules/applications/enums/application-resource-status.enum.d.ts +8 -0
  427. package/lib/src/modules/applications/enums/application-resource-status.enum.js +12 -0
  428. package/lib/src/modules/applications/enums/application-source-type.enum.d.ts +6 -0
  429. package/lib/src/modules/applications/enums/application-source-type.enum.js +10 -0
  430. package/lib/src/modules/applications/enums/application-status.enum.d.ts +20 -0
  431. package/lib/src/modules/applications/enums/application-status.enum.js +24 -0
  432. package/lib/src/modules/applications/interfaces/source-config.interface.d.ts +132 -0
  433. package/lib/src/modules/applications/interfaces/source-config.interface.js +2 -0
  434. package/lib/src/modules/auth/decorators/admin.decorator.d.ts +2 -0
  435. package/lib/src/modules/auth/decorators/admin.decorator.js +7 -0
  436. package/lib/src/modules/auth/entities/user.entity.d.ts +19 -0
  437. package/lib/src/modules/auth/entities/user.entity.js +78 -0
  438. package/lib/src/modules/auth/guards/admin.guard.d.ts +7 -0
  439. package/lib/src/modules/auth/guards/admin.guard.js +50 -0
  440. package/lib/src/modules/auth/interfaces/authenticated-user.interface.d.ts +12 -0
  441. package/lib/src/modules/auth/interfaces/authenticated-user.interface.js +2 -0
  442. package/lib/src/modules/common/cache/cache.service.d.ts +77 -0
  443. package/lib/src/modules/common/cache/cache.service.js +232 -0
  444. package/lib/src/modules/common/cache/cache.tokens.d.ts +1 -0
  445. package/lib/src/modules/common/cache/cache.tokens.js +4 -0
  446. package/lib/src/modules/common/cache/enums/cache-category.enum.d.ts +33 -0
  447. package/lib/src/modules/common/cache/enums/cache-category.enum.js +42 -0
  448. package/lib/src/modules/common/common.module.d.ts +2 -0
  449. package/lib/src/modules/common/common.module.js +20 -0
  450. package/lib/src/modules/common/dto/async-operation-response.dto.d.ts +19 -0
  451. package/lib/src/modules/common/dto/async-operation-response.dto.js +65 -0
  452. package/lib/src/modules/common/dto/index.d.ts +1 -0
  453. package/lib/src/modules/common/dto/index.js +17 -0
  454. package/lib/src/modules/common/services/label.service.d.ts +70 -0
  455. package/lib/src/modules/common/services/label.service.js +128 -0
  456. package/lib/src/modules/dns/entities/app-endpoint.entity.d.ts +57 -0
  457. package/lib/src/modules/dns/entities/app-endpoint.entity.js +205 -0
  458. package/lib/src/modules/dns/entities/cluster-dns-zone.entity.d.ts +21 -0
  459. package/lib/src/modules/dns/entities/cluster-dns-zone.entity.js +88 -0
  460. package/lib/src/modules/dns/entities/dns-zone.entity.d.ts +12 -0
  461. package/lib/src/modules/dns/entities/dns-zone.entity.js +53 -0
  462. package/lib/src/modules/dns/entities/san-certificate.entity.d.ts +29 -0
  463. package/lib/src/modules/dns/entities/san-certificate.entity.js +132 -0
  464. package/lib/src/modules/dns/entities/wildcard-certificate.entity.d.ts +26 -0
  465. package/lib/src/modules/dns/entities/wildcard-certificate.entity.js +111 -0
  466. package/lib/src/modules/dns/enums/cert-challenge.enum.d.ts +4 -0
  467. package/lib/src/modules/dns/enums/cert-challenge.enum.js +8 -0
  468. package/lib/src/modules/dns/enums/endpoint-type.enum.d.ts +4 -0
  469. package/lib/src/modules/dns/enums/endpoint-type.enum.js +8 -0
  470. package/lib/src/modules/dns/enums/hostname-mode.enum.d.ts +4 -0
  471. package/lib/src/modules/dns/enums/hostname-mode.enum.js +8 -0
  472. package/lib/src/modules/dns/services/cluster-dns-cleanup.service.d.ts +12 -0
  473. package/lib/src/modules/dns/services/cluster-dns-cleanup.service.js +79 -0
  474. package/lib/src/modules/dns/utils/nip-hostname.util.d.ts +12 -0
  475. package/lib/src/modules/dns/utils/nip-hostname.util.js +27 -0
  476. package/lib/src/modules/dns/utils/nip-token.util.d.ts +2 -0
  477. package/lib/src/modules/dns/utils/nip-token.util.js +94 -0
  478. package/lib/src/modules/frameworks/framework-core/enums/build-stage.enum.d.ts +21 -0
  479. package/lib/src/modules/frameworks/framework-core/enums/build-stage.enum.js +29 -0
  480. package/lib/src/modules/frameworks/framework-core/enums/deploy-strategy.enum.d.ts +22 -0
  481. package/lib/src/modules/frameworks/framework-core/enums/deploy-strategy.enum.js +26 -0
  482. package/lib/src/modules/frameworks/framework-core/enums/framework-type.enum.d.ts +32 -0
  483. package/lib/src/modules/frameworks/framework-core/enums/framework-type.enum.js +47 -0
  484. package/lib/src/modules/grafana/services/grafana-config.service.d.ts +43 -0
  485. package/lib/src/modules/grafana/services/grafana-config.service.js +177 -0
  486. package/lib/src/modules/grafana/services/grafana-datasource.service.d.ts +70 -0
  487. package/lib/src/modules/grafana/services/grafana-datasource.service.js +333 -0
  488. package/lib/src/modules/infrastructure/clusters/clusters.service.d.ts +126 -0
  489. package/lib/src/modules/infrastructure/clusters/clusters.service.js +265 -0
  490. package/lib/src/modules/infrastructure/clusters/constants/storage-conventions.d.ts +60 -0
  491. package/lib/src/modules/infrastructure/clusters/constants/storage-conventions.js +64 -0
  492. package/lib/src/modules/infrastructure/clusters/dto/build-resources.dto.d.ts +19 -0
  493. package/lib/src/modules/infrastructure/clusters/dto/build-resources.dto.js +69 -0
  494. package/lib/src/modules/infrastructure/clusters/dto/cluster-capacity-plan.dto.d.ts +36 -0
  495. package/lib/src/modules/infrastructure/clusters/dto/cluster-capacity-plan.dto.js +149 -0
  496. package/lib/src/modules/infrastructure/clusters/dto/cluster-power-management.dto.d.ts +51 -0
  497. package/lib/src/modules/infrastructure/clusters/dto/cluster-power-management.dto.js +222 -0
  498. package/lib/src/modules/infrastructure/clusters/dto/cluster-response.dto.d.ts +42 -0
  499. package/lib/src/modules/infrastructure/clusters/dto/cluster-response.dto.js +238 -0
  500. package/lib/src/modules/infrastructure/clusters/dto/cluster-storage.dto.d.ts +35 -0
  501. package/lib/src/modules/infrastructure/clusters/dto/cluster-storage.dto.js +122 -0
  502. package/lib/src/modules/infrastructure/clusters/dto/create-cluster.dto.d.ts +43 -0
  503. package/lib/src/modules/infrastructure/clusters/dto/create-cluster.dto.js +334 -0
  504. package/lib/src/modules/infrastructure/clusters/dto/register-cluster.dto.d.ts +30 -0
  505. package/lib/src/modules/infrastructure/clusters/dto/register-cluster.dto.js +190 -0
  506. package/lib/src/modules/infrastructure/clusters/dto/resource-availability.dto.d.ts +15 -0
  507. package/lib/src/modules/infrastructure/clusters/dto/resource-availability.dto.js +91 -0
  508. package/lib/src/modules/infrastructure/clusters/entities/cluster-node.entity.d.ts +28 -0
  509. package/lib/src/modules/infrastructure/clusters/entities/cluster-node.entity.js +104 -0
  510. package/lib/src/modules/infrastructure/clusters/entities/cluster.entity.d.ts +64 -0
  511. package/lib/src/modules/infrastructure/clusters/entities/cluster.entity.js +199 -0
  512. package/lib/src/modules/infrastructure/clusters/entities/node-billable-interval.entity.d.ts +17 -0
  513. package/lib/src/modules/infrastructure/clusters/entities/node-billable-interval.entity.js +86 -0
  514. package/lib/src/modules/infrastructure/clusters/entities/volume-billable-interval.entity.d.ts +18 -0
  515. package/lib/src/modules/infrastructure/clusters/entities/volume-billable-interval.entity.js +79 -0
  516. package/lib/src/modules/infrastructure/clusters/services/billing-intervals.service.d.ts +48 -0
  517. package/lib/src/modules/infrastructure/clusters/services/billing-intervals.service.js +159 -0
  518. package/lib/src/modules/infrastructure/clusters/services/cluster-capacity.service.d.ts +23 -0
  519. package/lib/src/modules/infrastructure/clusters/services/cluster-capacity.service.js +198 -0
  520. package/lib/src/modules/infrastructure/clusters/services/cluster-creation.service.d.ts +25 -0
  521. package/lib/src/modules/infrastructure/clusters/services/cluster-creation.service.js +192 -0
  522. package/lib/src/modules/infrastructure/clusters/services/cluster-deletion.service.d.ts +36 -0
  523. package/lib/src/modules/infrastructure/clusters/services/cluster-deletion.service.js +159 -0
  524. package/lib/src/modules/infrastructure/clusters/services/cluster-firewall-integration.service.d.ts +25 -0
  525. package/lib/src/modules/infrastructure/clusters/services/cluster-firewall-integration.service.js +90 -0
  526. package/lib/src/modules/infrastructure/clusters/services/cluster-mapper.service.d.ts +15 -0
  527. package/lib/src/modules/infrastructure/clusters/services/cluster-mapper.service.js +63 -0
  528. package/lib/src/modules/infrastructure/clusters/services/cluster-node-scaling.service.d.ts +78 -0
  529. package/lib/src/modules/infrastructure/clusters/services/cluster-node-scaling.service.js +644 -0
  530. package/lib/src/modules/infrastructure/clusters/services/cluster-operations.service.d.ts +37 -0
  531. package/lib/src/modules/infrastructure/clusters/services/cluster-operations.service.js +244 -0
  532. package/lib/src/modules/infrastructure/clusters/services/cluster-power-management.service.d.ts +68 -0
  533. package/lib/src/modules/infrastructure/clusters/services/cluster-power-management.service.js +716 -0
  534. package/lib/src/modules/infrastructure/clusters/services/cluster-storage.service.d.ts +15 -0
  535. package/lib/src/modules/infrastructure/clusters/services/cluster-storage.service.js +179 -0
  536. package/lib/src/modules/infrastructure/clusters/services/cluster-validation.service.d.ts +29 -0
  537. package/lib/src/modules/infrastructure/clusters/services/cluster-validation.service.js +100 -0
  538. package/lib/src/modules/infrastructure/firewalls/dto/cluster-firewall.dto.d.ts +62 -0
  539. package/lib/src/modules/infrastructure/firewalls/dto/cluster-firewall.dto.js +252 -0
  540. package/lib/src/modules/infrastructure/firewalls/entities/cluster-firewall.entity.d.ts +20 -0
  541. package/lib/src/modules/infrastructure/firewalls/entities/cluster-firewall.entity.js +83 -0
  542. package/lib/src/modules/infrastructure/firewalls/services/firewall-desired-state.service.d.ts +73 -0
  543. package/lib/src/modules/infrastructure/firewalls/services/firewall-desired-state.service.js +329 -0
  544. package/lib/src/modules/infrastructure/firewalls/services/firewall-reconciliation.service.d.ts +43 -0
  545. package/lib/src/modules/infrastructure/firewalls/services/firewall-reconciliation.service.js +212 -0
  546. package/lib/src/modules/infrastructure/firewalls/templates/firewall-rules.template.d.ts +54 -0
  547. package/lib/src/modules/infrastructure/firewalls/templates/firewall-rules.template.js +167 -0
  548. package/lib/src/modules/infrastructure/operations/helpers/operation-steps.helper.d.ts +34 -0
  549. package/lib/src/modules/infrastructure/operations/helpers/operation-steps.helper.js +401 -0
  550. package/lib/src/modules/infrastructure/servers/dto/create-server.dto.d.ts +40 -0
  551. package/lib/src/modules/infrastructure/servers/dto/create-server.dto.js +157 -0
  552. package/lib/src/modules/infrastructure/servers/dto/delete-server.dto.d.ts +17 -0
  553. package/lib/src/modules/infrastructure/servers/dto/delete-server.dto.js +85 -0
  554. package/lib/src/modules/infrastructure/servers/dto/server-response.dto.d.ts +29 -0
  555. package/lib/src/modules/infrastructure/servers/dto/server-response.dto.js +147 -0
  556. package/lib/src/modules/infrastructure/servers/entities/infrastructure-operations.entity.d.ts +266 -0
  557. package/lib/src/modules/infrastructure/servers/entities/infrastructure-operations.entity.js +348 -0
  558. package/lib/src/modules/infrastructure/shared/enums/reconciliation-status.enum.d.ts +7 -0
  559. package/lib/src/modules/infrastructure/shared/enums/reconciliation-status.enum.js +11 -0
  560. package/lib/src/modules/infrastructure/shared/services/kubernetes.service.d.ts +304 -0
  561. package/lib/src/modules/infrastructure/shared/services/kubernetes.service.js +1164 -0
  562. package/lib/src/modules/infrastructure/shared/services/label.service.d.ts +97 -0
  563. package/lib/src/modules/infrastructure/shared/services/label.service.js +189 -0
  564. package/lib/src/modules/infrastructure/shared/shared-infrastructure.module.d.ts +2 -0
  565. package/lib/src/modules/infrastructure/shared/shared-infrastructure.module.js +24 -0
  566. package/lib/src/modules/infrastructure/vnets/entities/vnet-route.entity.d.ts +10 -0
  567. package/lib/src/modules/infrastructure/vnets/entities/vnet-route.entity.js +51 -0
  568. package/lib/src/modules/infrastructure/vnets/entities/vnet-subnet.entity.d.ts +20 -0
  569. package/lib/src/modules/infrastructure/vnets/entities/vnet-subnet.entity.js +77 -0
  570. package/lib/src/modules/infrastructure/vnets/entities/vnet.entity.d.ts +28 -0
  571. package/lib/src/modules/infrastructure/vnets/entities/vnet.entity.js +88 -0
  572. package/lib/src/modules/instances/entities/instance-status.enum.d.ts +12 -0
  573. package/lib/src/modules/instances/entities/instance-status.enum.js +16 -0
  574. package/lib/src/modules/instances/entities/instance-type.enum.d.ts +6 -0
  575. package/lib/src/modules/instances/entities/instance-type.enum.js +10 -0
  576. package/lib/src/modules/instances/entities/instance.entity.d.ts +41 -0
  577. package/lib/src/modules/instances/entities/instance.entity.js +126 -0
  578. package/lib/src/modules/management/dto/configure-provider.dto.d.ts +8 -0
  579. package/lib/src/modules/management/dto/configure-provider.dto.js +51 -0
  580. package/lib/src/modules/management/dto/credentials.dto.d.ts +15 -0
  581. package/lib/src/modules/management/dto/credentials.dto.js +114 -0
  582. package/lib/src/modules/management/dto/health-status.dto.d.ts +12 -0
  583. package/lib/src/modules/management/dto/health-status.dto.js +40 -0
  584. package/lib/src/modules/management/dto/node-size-option.dto.d.ts +37 -0
  585. package/lib/src/modules/management/dto/node-size-option.dto.js +178 -0
  586. package/lib/src/modules/management/dto/pricing-query.dto.d.ts +5 -0
  587. package/lib/src/modules/management/dto/pricing-query.dto.js +36 -0
  588. package/lib/src/modules/management/dto/pricing-response.dto.d.ts +21 -0
  589. package/lib/src/modules/management/dto/pricing-response.dto.js +80 -0
  590. package/lib/src/modules/management/dto/provider-configuration.dto.d.ts +23 -0
  591. package/lib/src/modules/management/dto/provider-configuration.dto.js +72 -0
  592. package/lib/src/modules/management/dto/provider-filters.dto.d.ts +7 -0
  593. package/lib/src/modules/management/dto/provider-filters.dto.js +45 -0
  594. package/lib/src/modules/management/dto/validation-result.dto.d.ts +16 -0
  595. package/lib/src/modules/management/dto/validation-result.dto.js +35 -0
  596. package/lib/src/modules/management/entities/credentials.entity.d.ts +21 -0
  597. package/lib/src/modules/management/entities/credentials.entity.js +10 -0
  598. package/lib/src/modules/management/entities/provider-capabilities.entity.d.ts +85 -0
  599. package/lib/src/modules/management/entities/provider-capabilities.entity.js +2 -0
  600. package/lib/src/modules/management/entities/provider-configuration.entity.d.ts +14 -0
  601. package/lib/src/modules/management/entities/provider-configuration.entity.js +65 -0
  602. package/lib/src/modules/management/entities/provider-definition.entity.d.ts +19 -0
  603. package/lib/src/modules/management/entities/provider-definition.entity.js +2 -0
  604. package/lib/src/modules/management/entities/provider-region.entity.d.ts +11 -0
  605. package/lib/src/modules/management/entities/provider-region.entity.js +2 -0
  606. package/lib/src/modules/management/entities/provider-status.enum.d.ts +8 -0
  607. package/lib/src/modules/management/entities/provider-status.enum.js +12 -0
  608. package/lib/src/modules/management/interfaces/provider-configuration.repository.interface.d.ts +17 -0
  609. package/lib/src/modules/management/interfaces/provider-configuration.repository.interface.js +2 -0
  610. package/lib/src/modules/management/repositories/provider-configuration.repository.d.ts +21 -0
  611. package/lib/src/modules/management/repositories/provider-configuration.repository.js +89 -0
  612. package/lib/src/modules/management/services/configuration-mode.service.d.ts +20 -0
  613. package/lib/src/modules/management/services/configuration-mode.service.js +54 -0
  614. package/lib/src/modules/management/services/management.service.d.ts +72 -0
  615. package/lib/src/modules/management/services/management.service.js +546 -0
  616. package/lib/src/modules/management/services/provider-definitions.service.d.ts +26 -0
  617. package/lib/src/modules/management/services/provider-definitions.service.js +133 -0
  618. package/lib/src/modules/providers/controllers/provider-firewalls.controller.d.ts +28 -0
  619. package/lib/src/modules/providers/controllers/provider-firewalls.controller.js +277 -0
  620. package/lib/src/modules/providers/core/factories/capabilities-provider.factory.d.ts +10 -0
  621. package/lib/src/modules/providers/core/factories/capabilities-provider.factory.js +39 -0
  622. package/lib/src/modules/providers/core/factories/certificate-provider.factory.d.ts +11 -0
  623. package/lib/src/modules/providers/core/factories/certificate-provider.factory.js +58 -0
  624. package/lib/src/modules/providers/core/factories/dns-provider.factory.d.ts +12 -0
  625. package/lib/src/modules/providers/core/factories/dns-provider.factory.js +65 -0
  626. package/lib/src/modules/providers/core/factories/firewall-provider.factory.d.ts +12 -0
  627. package/lib/src/modules/providers/core/factories/firewall-provider.factory.js +61 -0
  628. package/lib/src/modules/providers/core/factories/provider.factory.d.ts +9 -0
  629. package/lib/src/modules/providers/core/factories/provider.factory.js +47 -0
  630. package/lib/src/modules/providers/core/factories/vm-backup-provider.factory.d.ts +12 -0
  631. package/lib/src/modules/providers/core/factories/vm-backup-provider.factory.js +56 -0
  632. package/lib/src/modules/providers/core/factories/volume-export.factory.d.ts +12 -0
  633. package/lib/src/modules/providers/core/factories/volume-export.factory.js +56 -0
  634. package/lib/src/modules/providers/core/interfaces/certificate-provider.interface.d.ts +1 -0
  635. package/lib/src/modules/providers/core/interfaces/certificate-provider.interface.js +17 -0
  636. package/lib/src/modules/providers/core/interfaces/cloud-provider.interface.d.ts +1 -0
  637. package/lib/src/modules/providers/core/interfaces/cloud-provider.interface.js +17 -0
  638. package/lib/src/modules/providers/core/interfaces/dns-provider.interface.d.ts +1 -0
  639. package/lib/src/modules/providers/core/interfaces/dns-provider.interface.js +17 -0
  640. package/lib/src/modules/providers/core/interfaces/firewall-provider.interface.d.ts +1 -0
  641. package/lib/src/modules/providers/core/interfaces/firewall-provider.interface.js +17 -0
  642. package/lib/src/modules/providers/core/interfaces/provider-bootstrap-seeder.interface.d.ts +54 -0
  643. package/lib/src/modules/providers/core/interfaces/provider-bootstrap-seeder.interface.js +2 -0
  644. package/lib/src/modules/providers/core/tokens.d.ts +59 -0
  645. package/lib/src/modules/providers/core/tokens.js +19 -0
  646. package/lib/src/modules/providers/data/region-coordinates.d.ts +6 -0
  647. package/lib/src/modules/providers/data/region-coordinates.js +25 -0
  648. package/lib/src/modules/providers/dto/firewall.dto.d.ts +30 -0
  649. package/lib/src/modules/providers/dto/firewall.dto.js +105 -0
  650. package/lib/src/modules/providers/dto/node-size.dto.d.ts +46 -0
  651. package/lib/src/modules/providers/dto/node-size.dto.js +22 -0
  652. package/lib/src/modules/providers/dto/pricing.dto.d.ts +24 -0
  653. package/lib/src/modules/providers/dto/pricing.dto.js +19 -0
  654. package/lib/src/modules/providers/dto/provider-firewall-response.dto.d.ts +28 -0
  655. package/lib/src/modules/providers/dto/provider-firewall-response.dto.js +134 -0
  656. package/lib/src/modules/providers/enums/certificate-provider.enum.d.ts +4 -0
  657. package/lib/src/modules/providers/enums/certificate-provider.enum.js +8 -0
  658. package/lib/src/modules/providers/enums/cloud-provider.enum.d.ts +5 -0
  659. package/lib/src/modules/providers/enums/cloud-provider.enum.js +9 -0
  660. package/lib/src/modules/providers/enums/dns-provider.enum.d.ts +5 -0
  661. package/lib/src/modules/providers/enums/dns-provider.enum.js +9 -0
  662. package/lib/src/modules/providers/implementations/contabo/contabo-capabilities.service.d.ts +19 -0
  663. package/lib/src/modules/providers/implementations/contabo/contabo-capabilities.service.js +254 -0
  664. package/lib/src/modules/providers/implementations/contabo/contabo-provider.module.d.ts +10 -0
  665. package/lib/src/modules/providers/implementations/contabo/contabo-provider.module.js +72 -0
  666. package/lib/src/modules/providers/implementations/contabo/generated/api.d.ts +13374 -0
  667. package/lib/src/modules/providers/implementations/contabo/generated/api.js +11341 -0
  668. package/lib/src/modules/providers/implementations/contabo/generated/base.d.ts +66 -0
  669. package/lib/src/modules/providers/implementations/contabo/generated/base.js +66 -0
  670. package/lib/src/modules/providers/implementations/contabo/generated/common.d.ts +65 -0
  671. package/lib/src/modules/providers/implementations/contabo/generated/common.js +152 -0
  672. package/lib/src/modules/providers/implementations/contabo/generated/configuration.d.ts +91 -0
  673. package/lib/src/modules/providers/implementations/contabo/generated/configuration.js +50 -0
  674. package/lib/src/modules/providers/implementations/contabo/generated/index.d.ts +13 -0
  675. package/lib/src/modules/providers/implementations/contabo/generated/index.js +31 -0
  676. package/lib/src/modules/providers/implementations/hetzner/generated/api.d.ts +18419 -0
  677. package/lib/src/modules/providers/implementations/hetzner/generated/api.js +19133 -0
  678. package/lib/src/modules/providers/implementations/hetzner/generated/base.d.ts +66 -0
  679. package/lib/src/modules/providers/implementations/hetzner/generated/base.js +66 -0
  680. package/lib/src/modules/providers/implementations/hetzner/generated/common.d.ts +65 -0
  681. package/lib/src/modules/providers/implementations/hetzner/generated/common.js +152 -0
  682. package/lib/src/modules/providers/implementations/hetzner/generated/configuration.d.ts +91 -0
  683. package/lib/src/modules/providers/implementations/hetzner/generated/configuration.js +50 -0
  684. package/lib/src/modules/providers/implementations/hetzner/generated/index.d.ts +13 -0
  685. package/lib/src/modules/providers/implementations/hetzner/generated/index.js +31 -0
  686. package/lib/src/modules/providers/implementations/hetzner/hetzner-bootstrap-seeder.service.d.ts +19 -0
  687. package/lib/src/modules/providers/implementations/hetzner/hetzner-bootstrap-seeder.service.js +68 -0
  688. package/lib/src/modules/providers/implementations/hetzner/hetzner-capabilities.service.d.ts +29 -0
  689. package/lib/src/modules/providers/implementations/hetzner/hetzner-capabilities.service.js +392 -0
  690. package/lib/src/modules/providers/implementations/hetzner/hetzner-provider.module.d.ts +2 -0
  691. package/lib/src/modules/providers/implementations/hetzner/hetzner-provider.module.js +81 -0
  692. package/lib/src/modules/providers/implementations/hetzner/hetzner-volume-operations.service.d.ts +31 -0
  693. package/lib/src/modules/providers/implementations/hetzner/hetzner-volume-operations.service.js +312 -0
  694. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage-connection.controller.d.ts +18 -0
  695. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage-connection.controller.js +67 -0
  696. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage-connection.service.d.ts +24 -0
  697. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage-connection.service.js +107 -0
  698. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage.backend.d.ts +7 -0
  699. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage.backend.js +35 -0
  700. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage.module.d.ts +8 -0
  701. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage.module.js +60 -0
  702. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage.provisioner.d.ts +22 -0
  703. package/lib/src/modules/providers/implementations/hetzner/object-storage/hetzner-object-storage.provisioner.js +100 -0
  704. package/lib/src/modules/providers/implementations/hetzner/vm-backup/hetzner-vm-backup.service.d.ts +20 -0
  705. package/lib/src/modules/providers/implementations/hetzner/vm-backup/hetzner-vm-backup.service.js +118 -0
  706. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/api.d.ts +4227 -0
  707. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/api.js +3362 -0
  708. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/base.d.ts +66 -0
  709. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/base.js +66 -0
  710. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/common.d.ts +65 -0
  711. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/common.js +152 -0
  712. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/configuration.d.ts +91 -0
  713. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/configuration.js +50 -0
  714. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/index.d.ts +13 -0
  715. package/lib/src/modules/providers/implementations/scaleway/generated/baremetal/index.js +31 -0
  716. package/lib/src/modules/providers/implementations/scaleway/generated/domain/api.d.ts +2486 -0
  717. package/lib/src/modules/providers/implementations/scaleway/generated/domain/api.js +2424 -0
  718. package/lib/src/modules/providers/implementations/scaleway/generated/domain/base.d.ts +66 -0
  719. package/lib/src/modules/providers/implementations/scaleway/generated/domain/base.js +66 -0
  720. package/lib/src/modules/providers/implementations/scaleway/generated/domain/common.d.ts +65 -0
  721. package/lib/src/modules/providers/implementations/scaleway/generated/domain/common.js +152 -0
  722. package/lib/src/modules/providers/implementations/scaleway/generated/domain/configuration.d.ts +91 -0
  723. package/lib/src/modules/providers/implementations/scaleway/generated/domain/configuration.js +50 -0
  724. package/lib/src/modules/providers/implementations/scaleway/generated/domain/index.d.ts +13 -0
  725. package/lib/src/modules/providers/implementations/scaleway/generated/domain/index.js +31 -0
  726. package/lib/src/modules/providers/implementations/scaleway/generated/iam/api.d.ts +6425 -0
  727. package/lib/src/modules/providers/implementations/scaleway/generated/iam/api.js +6925 -0
  728. package/lib/src/modules/providers/implementations/scaleway/generated/iam/base.d.ts +66 -0
  729. package/lib/src/modules/providers/implementations/scaleway/generated/iam/base.js +66 -0
  730. package/lib/src/modules/providers/implementations/scaleway/generated/iam/common.d.ts +65 -0
  731. package/lib/src/modules/providers/implementations/scaleway/generated/iam/common.js +152 -0
  732. package/lib/src/modules/providers/implementations/scaleway/generated/iam/configuration.d.ts +91 -0
  733. package/lib/src/modules/providers/implementations/scaleway/generated/iam/configuration.js +50 -0
  734. package/lib/src/modules/providers/implementations/scaleway/generated/iam/index.d.ts +13 -0
  735. package/lib/src/modules/providers/implementations/scaleway/generated/iam/index.js +31 -0
  736. package/lib/src/modules/providers/implementations/scaleway/generated/instances/api.d.ts +11187 -0
  737. package/lib/src/modules/providers/implementations/scaleway/generated/instances/api.js +9264 -0
  738. package/lib/src/modules/providers/implementations/scaleway/generated/instances/base.d.ts +66 -0
  739. package/lib/src/modules/providers/implementations/scaleway/generated/instances/base.js +66 -0
  740. package/lib/src/modules/providers/implementations/scaleway/generated/instances/common.d.ts +65 -0
  741. package/lib/src/modules/providers/implementations/scaleway/generated/instances/common.js +152 -0
  742. package/lib/src/modules/providers/implementations/scaleway/generated/instances/configuration.d.ts +91 -0
  743. package/lib/src/modules/providers/implementations/scaleway/generated/instances/configuration.js +50 -0
  744. package/lib/src/modules/providers/implementations/scaleway/generated/instances/index.d.ts +13 -0
  745. package/lib/src/modules/providers/implementations/scaleway/generated/instances/index.js +31 -0
  746. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/api.d.ts +492 -0
  747. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/api.js +531 -0
  748. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/base.d.ts +66 -0
  749. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/base.js +66 -0
  750. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/common.d.ts +65 -0
  751. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/common.js +152 -0
  752. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/configuration.d.ts +91 -0
  753. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/configuration.js +50 -0
  754. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/index.d.ts +13 -0
  755. package/lib/src/modules/providers/implementations/scaleway/generated/private-network/index.js +31 -0
  756. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/api.d.ts +2305 -0
  757. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/api.js +2443 -0
  758. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/base.d.ts +66 -0
  759. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/base.js +66 -0
  760. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/common.d.ts +65 -0
  761. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/common.js +152 -0
  762. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/configuration.d.ts +91 -0
  763. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/configuration.js +50 -0
  764. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/index.d.ts +13 -0
  765. package/lib/src/modules/providers/implementations/scaleway/generated/vpc/index.js +31 -0
  766. package/lib/src/modules/providers/implementations/scaleway/object-storage/scaleway-object-storage.backend.d.ts +8 -0
  767. package/lib/src/modules/providers/implementations/scaleway/object-storage/scaleway-object-storage.backend.js +49 -0
  768. package/lib/src/modules/providers/implementations/scaleway/object-storage/scaleway-object-storage.module.d.ts +9 -0
  769. package/lib/src/modules/providers/implementations/scaleway/object-storage/scaleway-object-storage.module.js +56 -0
  770. package/lib/src/modules/providers/implementations/scaleway/object-storage/scaleway-object-storage.provisioner.d.ts +27 -0
  771. package/lib/src/modules/providers/implementations/scaleway/object-storage/scaleway-object-storage.provisioner.js +120 -0
  772. package/lib/src/modules/providers/implementations/scaleway/scaleway-baremetal.adapter.d.ts +22 -0
  773. package/lib/src/modules/providers/implementations/scaleway/scaleway-baremetal.adapter.js +140 -0
  774. package/lib/src/modules/providers/implementations/scaleway/scaleway-bootstrap-seeder.service.d.ts +12 -0
  775. package/lib/src/modules/providers/implementations/scaleway/scaleway-bootstrap-seeder.service.js +65 -0
  776. package/lib/src/modules/providers/implementations/scaleway/scaleway-capabilities.service.d.ts +23 -0
  777. package/lib/src/modules/providers/implementations/scaleway/scaleway-capabilities.service.js +319 -0
  778. package/lib/src/modules/providers/implementations/scaleway/scaleway-dns.service.d.ts +24 -0
  779. package/lib/src/modules/providers/implementations/scaleway/scaleway-dns.service.js +189 -0
  780. package/lib/src/modules/providers/implementations/scaleway/scaleway-firewall.service.d.ts +43 -0
  781. package/lib/src/modules/providers/implementations/scaleway/scaleway-firewall.service.js +455 -0
  782. package/lib/src/modules/providers/implementations/scaleway/scaleway-iam.adapter.d.ts +32 -0
  783. package/lib/src/modules/providers/implementations/scaleway/scaleway-iam.adapter.js +108 -0
  784. package/lib/src/modules/providers/implementations/scaleway/scaleway-instances.adapter.d.ts +66 -0
  785. package/lib/src/modules/providers/implementations/scaleway/scaleway-instances.adapter.js +289 -0
  786. package/lib/src/modules/providers/implementations/scaleway/scaleway-provider.module.d.ts +17 -0
  787. package/lib/src/modules/providers/implementations/scaleway/scaleway-provider.module.js +122 -0
  788. package/lib/src/modules/providers/implementations/scaleway/scaleway-provider.service.d.ts +100 -0
  789. package/lib/src/modules/providers/implementations/scaleway/scaleway-provider.service.js +1395 -0
  790. package/lib/src/modules/providers/implementations/scaleway/scaleway-volume-operations.service.d.ts +24 -0
  791. package/lib/src/modules/providers/implementations/scaleway/scaleway-volume-operations.service.js +199 -0
  792. package/lib/src/modules/providers/implementations/scaleway/scaleway-vpc.adapter.d.ts +30 -0
  793. package/lib/src/modules/providers/implementations/scaleway/scaleway-vpc.adapter.js +180 -0
  794. package/lib/src/modules/providers/index.d.ts +17 -0
  795. package/lib/src/modules/providers/index.js +39 -0
  796. package/lib/src/modules/providers/interfaces/certificate-provider.interface.d.ts +38 -0
  797. package/lib/src/modules/providers/interfaces/certificate-provider.interface.js +11 -0
  798. package/lib/src/modules/providers/interfaces/cloud-provider.interface.d.ts +215 -0
  799. package/lib/src/modules/providers/interfaces/cloud-provider.interface.js +2 -0
  800. package/lib/src/modules/providers/interfaces/credential-provider.interface.d.ts +23 -0
  801. package/lib/src/modules/providers/interfaces/credential-provider.interface.js +2 -0
  802. package/lib/src/modules/providers/interfaces/dns-provider.interface.d.ts +55 -0
  803. package/lib/src/modules/providers/interfaces/dns-provider.interface.js +12 -0
  804. package/lib/src/modules/providers/interfaces/firewall-provider.interface.d.ts +47 -0
  805. package/lib/src/modules/providers/interfaces/firewall-provider.interface.js +2 -0
  806. package/lib/src/modules/providers/interfaces/network-provider.interface.d.ts +124 -0
  807. package/lib/src/modules/providers/interfaces/network-provider.interface.js +2 -0
  808. package/lib/src/modules/providers/interfaces/provider-capabilities.interface.d.ts +87 -0
  809. package/lib/src/modules/providers/interfaces/provider-capabilities.interface.js +2 -0
  810. package/lib/src/modules/providers/interfaces/vm-backup-provider.interface.d.ts +39 -0
  811. package/lib/src/modules/providers/interfaces/vm-backup-provider.interface.js +8 -0
  812. package/lib/src/modules/providers/interfaces/volume-export.interface.d.ts +162 -0
  813. package/lib/src/modules/providers/interfaces/volume-export.interface.js +21 -0
  814. package/lib/src/modules/providers/interfaces/volume-operations.interface.d.ts +149 -0
  815. package/lib/src/modules/providers/interfaces/volume-operations.interface.js +17 -0
  816. package/lib/src/modules/providers/mappers/node-size.mapper.d.ts +20 -0
  817. package/lib/src/modules/providers/mappers/node-size.mapper.js +75 -0
  818. package/lib/src/modules/providers/mappers/pricing.mapper.d.ts +14 -0
  819. package/lib/src/modules/providers/mappers/pricing.mapper.js +60 -0
  820. package/lib/src/modules/providers/provider-core.module.d.ts +13 -0
  821. package/lib/src/modules/providers/provider-core.module.js +59 -0
  822. package/lib/src/modules/providers/providers.module.d.ts +2 -0
  823. package/lib/src/modules/providers/providers.module.js +188 -0
  824. package/lib/src/modules/providers/services/acme-certificate.service.d.ts +38 -0
  825. package/lib/src/modules/providers/services/acme-certificate.service.js +144 -0
  826. package/lib/src/modules/providers/services/contabo-firewall.service.d.ts +11 -0
  827. package/lib/src/modules/providers/services/contabo-firewall.service.js +40 -0
  828. package/lib/src/modules/providers/services/contabo-provider.service.d.ts +48 -0
  829. package/lib/src/modules/providers/services/contabo-provider.service.js +194 -0
  830. package/lib/src/modules/providers/services/credential-provider.service.d.ts +17 -0
  831. package/lib/src/modules/providers/services/credential-provider.service.js +78 -0
  832. package/lib/src/modules/providers/services/dns-provider.factory.d.ts +5 -0
  833. package/lib/src/modules/providers/services/dns-provider.factory.js +9 -0
  834. package/lib/src/modules/providers/services/firewall-provider.factory.d.ts +5 -0
  835. package/lib/src/modules/providers/services/firewall-provider.factory.js +9 -0
  836. package/lib/src/modules/providers/services/hetzner-dns.service.d.ts +71 -0
  837. package/lib/src/modules/providers/services/hetzner-dns.service.js +565 -0
  838. package/lib/src/modules/providers/services/hetzner-firewall.service.d.ts +48 -0
  839. package/lib/src/modules/providers/services/hetzner-firewall.service.js +472 -0
  840. package/lib/src/modules/providers/services/hetzner-network.service.d.ts +84 -0
  841. package/lib/src/modules/providers/services/hetzner-network.service.js +408 -0
  842. package/lib/src/modules/providers/services/hetzner-provider.service.d.ts +213 -0
  843. package/lib/src/modules/providers/services/hetzner-provider.service.js +1159 -0
  844. package/lib/src/modules/providers/services/provider.factory.d.ts +5 -0
  845. package/lib/src/modules/providers/services/provider.factory.js +9 -0
  846. package/lib/src/modules/providers/services/volume-export.service.d.ts +50 -0
  847. package/lib/src/modules/providers/services/volume-export.service.js +650 -0
  848. package/lib/src/modules/shared/encryption/encryption.module.d.ts +2 -0
  849. package/lib/src/modules/shared/encryption/encryption.module.js +22 -0
  850. package/lib/src/modules/shared/encryption/services/encryption.service.d.ts +47 -0
  851. package/lib/src/modules/shared/encryption/services/encryption.service.js +199 -0
  852. package/lib/src/modules/storage/enums/storage-backend-provider.enum.d.ts +19 -0
  853. package/lib/src/modules/storage/enums/storage-backend-provider.enum.js +23 -0
  854. package/lib/src/modules/storage/factories/object-storage-provisioner.factory.d.ts +11 -0
  855. package/lib/src/modules/storage/factories/object-storage-provisioner.factory.js +48 -0
  856. package/lib/src/modules/storage/factories/storage-backend.factory.d.ts +12 -0
  857. package/lib/src/modules/storage/factories/storage-backend.factory.js +51 -0
  858. package/lib/src/modules/storage/implementations/generic-s3.backend.d.ts +23 -0
  859. package/lib/src/modules/storage/implementations/generic-s3.backend.js +172 -0
  860. package/lib/src/modules/storage/interfaces/backup-storage-backend.interface.d.ts +48 -0
  861. package/lib/src/modules/storage/interfaces/backup-storage-backend.interface.js +2 -0
  862. package/lib/src/modules/storage/interfaces/object-storage-provisioner.interface.d.ts +55 -0
  863. package/lib/src/modules/storage/interfaces/object-storage-provisioner.interface.js +9 -0
  864. package/lib/src/modules/storage/storage.module.d.ts +2 -0
  865. package/lib/src/modules/storage/storage.module.js +21 -0
  866. package/lib/src/modules/storage/tokens/object-storage-provisioner-registry.token.d.ts +12 -0
  867. package/lib/src/modules/storage/tokens/object-storage-provisioner-registry.token.js +8 -0
  868. package/lib/src/modules/storage/tokens/storage-backend-registry.token.d.ts +12 -0
  869. package/lib/src/modules/storage/tokens/storage-backend-registry.token.js +8 -0
  870. package/lib/src/modules/terminal/services/native-ssh-connection.service.d.ts +48 -0
  871. package/lib/src/modules/terminal/services/native-ssh-connection.service.js +282 -0
  872. package/oclif.manifest.json +5243 -0
  873. package/package.json +125 -0
@@ -0,0 +1,1159 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
45
+ return function (target, key) { decorator(target, key, paramIndex); }
46
+ };
47
+ var __importDefault = (this && this.__importDefault) || function (mod) {
48
+ return (mod && mod.__esModule) ? mod : { "default": mod };
49
+ };
50
+ var HetznerProviderService_1;
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.HetznerProviderService = void 0;
53
+ const common_1 = require("@nestjs/common");
54
+ const config_1 = require("@nestjs/config");
55
+ const instance_entity_1 = require("../../instances/entities/instance.entity");
56
+ const cloud_provider_enum_1 = require("../enums/cloud-provider.enum");
57
+ const axios_1 = __importDefault(require("axios"));
58
+ const https = __importStar(require("node:https"));
59
+ const generated_1 = require("../../../modules/providers/implementations/hetzner/generated");
60
+ const node_size_mapper_1 = require("../mappers/node-size.mapper");
61
+ const pricing_mapper_1 = require("../mappers/pricing.mapper");
62
+ const instance_status_enum_1 = require("../../instances/entities/instance-status.enum");
63
+ const label_service_1 = require("../../common/services/label.service");
64
+ const hetzner_network_service_1 = require("./hetzner-network.service");
65
+ let HetznerProviderService = HetznerProviderService_1 = class HetznerProviderService {
66
+ constructor(configService, credentialProvider, nodeSizeMapper, pricingMapper, labelService) {
67
+ this.configService = configService;
68
+ this.credentialProvider = credentialProvider;
69
+ this.nodeSizeMapper = nodeSizeMapper;
70
+ this.pricingMapper = pricingMapper;
71
+ this.labelService = labelService;
72
+ this.logger = new common_1.Logger(HetznerProviderService_1.name);
73
+ this.basePath = this.configService.get('HETZNER_API_BASE_PATH', 'https://api.hetzner.cloud/v1');
74
+ this.defaultUser = this.configService.get('HETZNER_DEFAULT_USER', 'root');
75
+ this.timeout = Number.parseInt(this.configService.get('HETZNER_TIMEOUT', '10000'), 10);
76
+ }
77
+ /**
78
+ * Create a custom Axios instance with optimized configuration
79
+ */
80
+ createAxiosInstance() {
81
+ const httpsAgent = new https.Agent({
82
+ keepAlive: true,
83
+ keepAliveMsecs: 30000,
84
+ maxSockets: 50,
85
+ maxFreeSockets: 10,
86
+ timeout: this.timeout,
87
+ rejectUnauthorized: true,
88
+ family: 4,
89
+ });
90
+ const instance = axios_1.default.create({
91
+ timeout: this.timeout,
92
+ httpsAgent,
93
+ headers: {
94
+ Accept: 'application/json',
95
+ 'Content-Type': 'application/json',
96
+ 'User-Agent': 'Flui-Cloud-API/1.0',
97
+ Connection: 'keep-alive',
98
+ },
99
+ validateStatus: (status) => status >= 200 && status < 300,
100
+ });
101
+ // Request interceptor for logging
102
+ instance.interceptors.request.use((config) => {
103
+ this.logger.debug(`Hetzner API Request: ${config.method?.toUpperCase()} ${config.url}`);
104
+ this.logger.debug(`Request Headers: ${JSON.stringify(config.headers, null, 2)}`);
105
+ return config;
106
+ }, (error) => {
107
+ const errDetails = error.response?.data
108
+ ? ` — ${JSON.stringify(error.response.data)}`
109
+ : '';
110
+ this.logger.error(`Hetzner API Request Error: ${error.message}${errDetails}`);
111
+ return Promise.reject(error);
112
+ });
113
+ // Response interceptor for logging
114
+ instance.interceptors.response.use((response) => {
115
+ this.logger.debug(`Hetzner API Response: ${response.status} ${response.statusText}`);
116
+ return response;
117
+ }, (error) => {
118
+ if (error.response) {
119
+ // Server responded with error status
120
+ this.logger.error(`Hetzner API Error Response: ${error.response.status} ${error.response.statusText}`);
121
+ this.logger.error(`Error Data: ${JSON.stringify(error.response.data, null, 2)}`);
122
+ }
123
+ else if (error.request) {
124
+ // Request was made but no response received
125
+ this.logger.error(`Hetzner API No Response Received - Possible network/timeout issue`);
126
+ this.logger.error(`Request URL: ${error.config?.url}`);
127
+ this.logger.error(`Request Method: ${error.config?.method}`);
128
+ }
129
+ else {
130
+ // Something else happened
131
+ this.logger.error(`Hetzner API Error: ${error.message}`);
132
+ }
133
+ return Promise.reject(error);
134
+ });
135
+ return instance;
136
+ }
137
+ /**
138
+ * Create a configured API client with proper headers and custom Axios instance
139
+ */
140
+ async createConfiguration() {
141
+ const token = await this.credentialProvider.getActiveApiToken(cloud_provider_enum_1.CloudProvider.HETZNER);
142
+ return new generated_1.Configuration({
143
+ accessToken: token,
144
+ basePath: this.basePath,
145
+ baseOptions: {
146
+ headers: {
147
+ 'User-Agent': 'Flui-Cloud-API/1.0',
148
+ 'Content-Type': 'application/json',
149
+ Accept: 'application/json',
150
+ },
151
+ },
152
+ });
153
+ }
154
+ /**
155
+ * Create ServersApi instance with custom Axios configuration
156
+ */
157
+ async createServersApi() {
158
+ const configuration = await this.createConfiguration();
159
+ const axiosInstance = this.createAxiosInstance();
160
+ return new generated_1.ServersApi(configuration, this.basePath, axiosInstance);
161
+ }
162
+ /**
163
+ * Create SSHKeysApi instance with custom Axios configuration
164
+ */
165
+ async createSSHKeysApi() {
166
+ const configuration = await this.createConfiguration();
167
+ const axiosInstance = this.createAxiosInstance();
168
+ return new generated_1.SSHKeysApi(configuration, this.basePath, axiosInstance);
169
+ }
170
+ /**
171
+ * Create ServerTypesApi instance with custom Axios configuration
172
+ */
173
+ async createServerTypesApi() {
174
+ const configuration = await this.createConfiguration();
175
+ const axiosInstance = this.createAxiosInstance();
176
+ return new generated_1.ServerTypesApi(configuration, this.basePath, axiosInstance);
177
+ }
178
+ /**
179
+ * Create PricingApi instance with custom Axios configuration
180
+ */
181
+ async createPricingApi() {
182
+ const configuration = await this.createConfiguration();
183
+ const axiosInstance = this.createAxiosInstance();
184
+ return new generated_1.PricingApi(configuration, this.basePath, axiosInstance);
185
+ }
186
+ /**
187
+ * Create VolumesApi instance with custom Axios configuration.
188
+ * Used by §14 of the scaling architecture to provision Flui-managed
189
+ * block storage Volumes attached to master nodes (NFS export backing).
190
+ */
191
+ async createVolumesApi() {
192
+ const configuration = await this.createConfiguration();
193
+ const axiosInstance = this.createAxiosInstance();
194
+ return new generated_1.VolumesApi(configuration, this.basePath, axiosInstance);
195
+ }
196
+ async createServerActionsApi() {
197
+ const configuration = await this.createConfiguration();
198
+ const axiosInstance = this.createAxiosInstance();
199
+ return new generated_1.ServerActionsApi(configuration, this.basePath, axiosInstance);
200
+ }
201
+ async createVolumeActionsApi() {
202
+ const configuration = await this.createConfiguration();
203
+ const axiosInstance = this.createAxiosInstance();
204
+ return new generated_1.VolumeActionsApi(configuration, this.basePath, axiosInstance);
205
+ }
206
+ async createActionsApi() {
207
+ const configuration = await this.createConfiguration();
208
+ const axiosInstance = this.createAxiosInstance();
209
+ return new generated_1.ActionsApi(configuration, this.basePath, axiosInstance);
210
+ }
211
+ /**
212
+ * Create DataCentersApi instance with custom Axios configuration
213
+ */
214
+ async createDataCentersApi() {
215
+ const configuration = await this.createConfiguration();
216
+ const axiosInstance = this.createAxiosInstance();
217
+ return new generated_1.DataCentersApi(configuration, this.basePath, axiosInstance);
218
+ }
219
+ async listInstances(filters) {
220
+ const serversApi = await this.createServersApi();
221
+ // Build label selector if clusterId is provided
222
+ let labelSelector;
223
+ if (filters?.clusterId) {
224
+ labelSelector = `flui-cluster-id=${filters.clusterId}`;
225
+ }
226
+ // Pass labelSelector to the Hetzner API call
227
+ const response = await serversApi.listServers(undefined, labelSelector);
228
+ return response.data.servers.map((server) => {
229
+ return this.mapHetznerInstanceToEntity(server);
230
+ });
231
+ }
232
+ async testApiKey(apiKey) {
233
+ try {
234
+ const configuration = new generated_1.Configuration({
235
+ accessToken: apiKey,
236
+ basePath: this.basePath,
237
+ baseOptions: {
238
+ headers: {
239
+ 'User-Agent': 'Flui-Cloud-API/1.0',
240
+ 'Content-Type': 'application/json',
241
+ Accept: 'application/json',
242
+ },
243
+ },
244
+ });
245
+ const axiosInstance = this.createAxiosInstance();
246
+ const serversApi = new generated_1.ServersApi(configuration, this.basePath, axiosInstance);
247
+ await serversApi.listServers();
248
+ return true;
249
+ }
250
+ catch (error) {
251
+ if (error.response?.status === 401) {
252
+ return false;
253
+ }
254
+ this.logger.error('Hetzner API key validation error:', error.message);
255
+ return false;
256
+ }
257
+ }
258
+ mapHetznerInstanceToEntity(server) {
259
+ // Create a new instance of InstanceEntity
260
+ const instance = new instance_entity_1.InstanceEntity();
261
+ // Map basic fields
262
+ instance.name = server.name;
263
+ instance.displayName = server.name;
264
+ instance.provider = cloud_provider_enum_1.CloudProvider.HETZNER;
265
+ instance.providerId = server.id.toString();
266
+ // Map status
267
+ instance.status = this.mapHetznerStatus(server.status);
268
+ // Map data center and region configuration
269
+ instance.dataCenter = server.datacenter.name;
270
+ instance.region = server.datacenter.location.name;
271
+ instance.regionName = server.datacenter.location.description;
272
+ // Map hardware specifications
273
+ instance.cpuCores = server.server_type.cores;
274
+ instance.ramMb = server.server_type.memory * 1024; // Convert from GB to MB
275
+ instance.diskMb = server.primary_disk_size * 1024; // Convert from GB to MB
276
+ // Operating system information
277
+ instance.osType = server.image
278
+ ? `${server.image.os_flavor} ${server.image.os_version}`
279
+ : null;
280
+ // IP configuration
281
+ instance.ipConfig = {
282
+ v4: server.public_net.ipv4
283
+ ? {
284
+ ip: server.public_net.ipv4.ip,
285
+ gateway: '', // Information not available in the response
286
+ netmaskCidr: 32, // Standard IPv4
287
+ }
288
+ : undefined,
289
+ v6: server.public_net.ipv6
290
+ ? {
291
+ ip: server.public_net.ipv6.ip,
292
+ gateway: '', // Information not available in the response
293
+ netmaskCidr: 64, // Standard IPv6
294
+ }
295
+ : undefined,
296
+ };
297
+ // Additional information
298
+ instance.productType = server.server_type.name;
299
+ instance.productName = server.server_type.description;
300
+ instance.defaultUser = this.defaultUser; // Default user for Hetzner servers
301
+ // Additional IPs (floating IPs)
302
+ instance.additionalIps =
303
+ server.public_net.floating_ips?.map((ip) => ip.toString()) || [];
304
+ // Additional metadata that might be useful
305
+ instance.metadata = {
306
+ created: server.created,
307
+ traffic: {
308
+ outgoing: server.outgoing_traffic,
309
+ ingoing: server.ingoing_traffic,
310
+ included: server.included_traffic,
311
+ },
312
+ volumes: server.volumes,
313
+ loadBalancers: server.load_balancers,
314
+ labels: server.labels,
315
+ locked: server.locked,
316
+ rescueEnabled: server.rescue_enabled,
317
+ placementGroup: server.placement_group,
318
+ };
319
+ return instance;
320
+ }
321
+ mapHetznerStatus(status) {
322
+ switch (status) {
323
+ case generated_1.ListServers200ResponseServersInnerStatusEnum.Running:
324
+ return instance_status_enum_1.InstanceStatus.RUNNING;
325
+ case generated_1.ListServers200ResponseServersInnerStatusEnum.Off:
326
+ return instance_status_enum_1.InstanceStatus.STOPPED;
327
+ case generated_1.ListServers200ResponseServersInnerStatusEnum.Starting:
328
+ return instance_status_enum_1.InstanceStatus.STARTING;
329
+ case generated_1.ListServers200ResponseServersInnerStatusEnum.Initializing:
330
+ return instance_status_enum_1.InstanceStatus.PROVISIONING;
331
+ case generated_1.ListServers200ResponseServersInnerStatusEnum.Stopping:
332
+ return instance_status_enum_1.InstanceStatus.STOPPING;
333
+ case generated_1.ListServers200ResponseServersInnerStatusEnum.Deleting:
334
+ return instance_status_enum_1.InstanceStatus.DELETING;
335
+ case generated_1.ListServers200ResponseServersInnerStatusEnum.Migrating:
336
+ return instance_status_enum_1.InstanceStatus.MIGRATING;
337
+ case generated_1.ListServers200ResponseServersInnerStatusEnum.Rebuilding:
338
+ return instance_status_enum_1.InstanceStatus.REBUILDING;
339
+ case generated_1.ListServers200ResponseServersInnerStatusEnum.Unknown:
340
+ default:
341
+ return instance_status_enum_1.InstanceStatus.UNKNOWN;
342
+ }
343
+ }
344
+ // Server creation methods for infrastructure module
345
+ async createServer(config) {
346
+ this.logger.log(`Creating server ${config.name} via Hetzner API`);
347
+ try {
348
+ const serversApi = await this.createServersApi();
349
+ // Map our config to Hetzner API request
350
+ const createRequest = {
351
+ name: config.name,
352
+ server_type: config.server_type || 'cx11',
353
+ image: 'ubuntu-24.04',
354
+ location: config.location || 'nbg1',
355
+ start_after_create: true,
356
+ ssh_keys: config.ssh_keys || [],
357
+ user_data: config.user_data || '',
358
+ };
359
+ // Convert label array to Record for Hetzner API
360
+ if (config.labels && config.labels.length > 0) {
361
+ createRequest.labels = this.labelService.toRecord(config.labels);
362
+ }
363
+ // Attach firewalls if provided
364
+ if (config.firewalls && config.firewalls.length > 0) {
365
+ createRequest.firewalls = config.firewalls.map((id) => ({
366
+ firewall: Number.parseInt(id, 10),
367
+ }));
368
+ }
369
+ if (config.networks && config.networks.length > 0) {
370
+ createRequest.networks = config.networks.map((id) => Number.parseInt(id, 10));
371
+ }
372
+ this.logger.log(`Sending create server request to Hetzner API for ${config.name}`);
373
+ const response = await serversApi.createServer(createRequest);
374
+ const serverId = response.data.server.id;
375
+ const result = {
376
+ serverId: serverId.toString(),
377
+ ipAddress: response.data.server.public_net.ipv4?.ip,
378
+ privateIp: response.data.server.private_net?.[0]?.ip,
379
+ status: response.data.server.status,
380
+ actionId: response.data.action.id,
381
+ };
382
+ // Provision Flui-managed Volumes if requested (§14 of scaling doc).
383
+ // Each Volume is created with `server: <id>` so Hetzner attaches it
384
+ // immediately, no separate attach action needed. We don't request
385
+ // automount/format — the bootstrap script handles that idempotently.
386
+ if (config.attachedVolumes && config.attachedVolumes.length > 0) {
387
+ const attached = [];
388
+ const volumesApi = await this.createVolumesApi();
389
+ for (const v of config.attachedVolumes) {
390
+ // Hetzner Volume minimum is 10 GB.
391
+ const sizeGb = Math.max(10, v.sizeGb);
392
+ const volumeReq = {
393
+ name: v.name,
394
+ size: sizeGb,
395
+ server: serverId,
396
+ ...(v.labels?.length
397
+ ? { labels: this.labelService.toRecord(v.labels) }
398
+ : {}),
399
+ };
400
+ this.logger.log(`Creating Hetzner Volume ${v.name} (${sizeGb} GB) for server ${serverId}`);
401
+ try {
402
+ const volResp = await volumesApi.createVolume(volumeReq);
403
+ const volumeId = volResp.data.volume.id;
404
+ attached.push({
405
+ volumeId: volumeId.toString(),
406
+ // Hetzner Volume convention: /dev/disk/by-id/scsi-0HC_Volume_<id>
407
+ devicePath: `/dev/disk/by-id/scsi-0HC_Volume_${volumeId}`,
408
+ sizeGb,
409
+ });
410
+ this.logger.log(`Volume ${v.name} created and attached: id=${volumeId}`);
411
+ }
412
+ catch (volErr) {
413
+ this.logger.error(`Failed to create/attach Volume ${v.name} for server ${serverId}: ${volErr.message}`);
414
+ throw new Error(`Hetzner Volume creation failed for ${v.name}: ${volErr.message}`);
415
+ }
416
+ }
417
+ result.attachedVolumes = attached;
418
+ }
419
+ this.logger.log(`Server ${config.name} created successfully`, result);
420
+ return result;
421
+ }
422
+ catch (error) {
423
+ this.logger.error(`Failed to create server ${config.name}`, error);
424
+ // Handle Hetzner API specific errors
425
+ if (error.response?.data?.error) {
426
+ const apiError = error.response.data.error;
427
+ throw new Error(`Hetzner API Error: ${apiError.message} (${apiError.code})`);
428
+ }
429
+ throw new Error(`Server creation failed: ${error.message}`);
430
+ }
431
+ }
432
+ async getServerStatus(serverId) {
433
+ try {
434
+ const serversApi = await this.createServersApi();
435
+ const response = await serversApi.getServer(Number.parseInt(serverId));
436
+ return response.data.server.status;
437
+ }
438
+ catch (error) {
439
+ this.logger.warn(`Failed to get server status for ${serverId}`, error);
440
+ if (error.response?.status === 404) {
441
+ return 'not-found';
442
+ }
443
+ return 'error';
444
+ }
445
+ }
446
+ async getServerDetails(serverId) {
447
+ try {
448
+ const serversApi = await this.createServersApi();
449
+ const response = await serversApi.getServer(Number.parseInt(serverId));
450
+ return response.data.server;
451
+ }
452
+ catch (error) {
453
+ this.logger.warn(`Failed to get server details for ${serverId}`, error);
454
+ return null;
455
+ }
456
+ }
457
+ /**
458
+ * Wait for an action to complete by monitoring its status
459
+ * This is more efficient than polling server status as it uses Hetzner's action tracking system
460
+ * @param actionId Action ID to wait for
461
+ * @param timeoutMs Timeout in milliseconds (default: 5 minutes)
462
+ * @param pollIntervalMs Polling interval in milliseconds (default: 3 seconds)
463
+ * @returns Promise that resolves when action is complete
464
+ * @throws Error if action fails or timeout is reached
465
+ */
466
+ async waitForActionCompletion(actionId, timeoutMs = 300000, pollIntervalMs = 3000) {
467
+ const startTime = Date.now();
468
+ const maxAttempts = Math.ceil(timeoutMs / pollIntervalMs);
469
+ this.logger.log(`Waiting for action ${actionId} to complete (timeout: ${timeoutMs}ms, poll interval: ${pollIntervalMs}ms)`);
470
+ const actionsApi = await this.createActionsApi();
471
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
472
+ try {
473
+ const response = await actionsApi.getAction(actionId);
474
+ const action = response.data.action;
475
+ this.logger.debug(`Poll attempt ${attempt}/${maxAttempts}: Action ${actionId} status = ${action.status}, progress = ${action.progress}%`);
476
+ // Check if action completed successfully
477
+ if (action.status === generated_1.ActionStatusEnum.Success) {
478
+ this.logger.log(`Action ${actionId} completed successfully (took ${Date.now() - startTime}ms)`);
479
+ return;
480
+ }
481
+ // Check if action failed
482
+ if (action.status === generated_1.ActionStatusEnum.Error) {
483
+ const errorMsg = action.error?.message || 'Unknown error during action execution';
484
+ throw new Error(`Action ${actionId} failed: ${errorMsg}`);
485
+ }
486
+ // Check timeout
487
+ if (Date.now() - startTime >= timeoutMs) {
488
+ throw new Error(`Timeout waiting for action ${actionId} to complete after ${timeoutMs}ms. Current status: ${action.status}, progress: ${action.progress}%`);
489
+ }
490
+ // Wait before next poll (unless it's the last attempt)
491
+ if (attempt < maxAttempts &&
492
+ action.status === generated_1.ActionStatusEnum.Running) {
493
+ await this.sleep(pollIntervalMs);
494
+ }
495
+ }
496
+ catch (error) {
497
+ // If we get a 404, the action might have been cleaned up (already completed)
498
+ if (error.response?.status === 404) {
499
+ this.logger.warn(`Action ${actionId} not found (might have been cleaned up). Assuming completion.`);
500
+ return;
501
+ }
502
+ throw error;
503
+ }
504
+ }
505
+ throw new Error(`Failed to confirm action completion after ${maxAttempts} attempts`);
506
+ }
507
+ /**
508
+ * Sleep helper
509
+ */
510
+ sleep(ms) {
511
+ return new Promise((resolve) => setTimeout(resolve, ms));
512
+ }
513
+ async deleteServer(config) {
514
+ this.logger.log(`Deleting server ${config.server_id} via Hetzner API`);
515
+ try {
516
+ const serversApi = await this.createServersApi();
517
+ // First check if server exists and get its status
518
+ const serverDetails = await this.getServerDetails(config.server_id);
519
+ if (!serverDetails) {
520
+ throw new Error(`Server ${config.server_id} not found`);
521
+ }
522
+ // Check if server is running and force is not set
523
+ if (!config.force && serverDetails.status === 'running') {
524
+ throw new Error('Server is running. Use force=true to delete running servers.');
525
+ }
526
+ this.logger.log(`Sending delete server request to Hetzner API for ${config.server_id}`);
527
+ const response = await serversApi.deleteServer(Number.parseInt(config.server_id));
528
+ const result = {
529
+ actionId: response.data.action?.id,
530
+ message: `Server ${config.server_id} deletion initiated`,
531
+ };
532
+ this.logger.log(`Server ${config.server_id} deletion initiated successfully`, result);
533
+ return result;
534
+ }
535
+ catch (error) {
536
+ this.logger.error(`Failed to delete server ${config.server_id}`, error);
537
+ // Handle Hetzner API specific errors
538
+ if (error.response?.data?.error) {
539
+ const apiError = error.response.data.error;
540
+ throw new Error(`Hetzner API Error: ${apiError.message} (${apiError.code})`);
541
+ }
542
+ // Handle 404 errors specially
543
+ if (error.response?.status === 404) {
544
+ throw new Error(`Server ${config.server_id} not found`);
545
+ }
546
+ throw new Error(`Server deletion failed: ${error.message}`);
547
+ }
548
+ }
549
+ /**
550
+ * Power off a server
551
+ */
552
+ async powerOffServer(serverId) {
553
+ this.logger.log(`Powering off server ${serverId}`);
554
+ try {
555
+ const actionsApi = await this.createServerActionsApi();
556
+ //serversIdActionsPoweroffPost
557
+ await actionsApi.poweroffServer(Number.parseInt(serverId));
558
+ this.logger.log(`Server ${serverId} poweroff action sent successfully`);
559
+ }
560
+ catch (error) {
561
+ this.logger.error(`Failed to power off server ${serverId}`, error);
562
+ if (error.response?.data?.error) {
563
+ const apiError = error.response.data.error;
564
+ throw new Error(`Hetzner API Error: ${apiError.message} (${apiError.code})`);
565
+ }
566
+ if (error.response?.status === 404) {
567
+ throw new Error(`Server ${serverId} not found`);
568
+ }
569
+ throw new Error(`Server poweroff failed: ${error.message}`);
570
+ }
571
+ }
572
+ /**
573
+ * Power on a server
574
+ */
575
+ async powerOnServer(serverId) {
576
+ this.logger.log(`Powering on server ${serverId}`);
577
+ try {
578
+ const actionsApi = await this.createServerActionsApi();
579
+ await actionsApi.poweronServer(Number.parseInt(serverId));
580
+ this.logger.log(`Server ${serverId} poweron action sent successfully`);
581
+ }
582
+ catch (error) {
583
+ this.logger.error(`Failed to power on server ${serverId}`, error);
584
+ if (error.response?.data?.error) {
585
+ const apiError = error.response.data.error;
586
+ throw new Error(`Hetzner API Error: ${apiError.message} (${apiError.code})`);
587
+ }
588
+ if (error.response?.status === 404) {
589
+ throw new Error(`Server ${serverId} not found`);
590
+ }
591
+ throw new Error(`Server poweron failed: ${error.message}`);
592
+ }
593
+ }
594
+ async changeServerType(serverId, config) {
595
+ this.logger.log(`Hetzner change_type server=${serverId} → ${config.targetServerType} (upgrade_disk=${config.upgradeDisk ?? false})`);
596
+ try {
597
+ const actionsApi = await this.createServerActionsApi();
598
+ const res = await actionsApi.changeServerType(Number.parseInt(serverId), {
599
+ server_type: config.targetServerType,
600
+ upgrade_disk: config.upgradeDisk ?? false,
601
+ });
602
+ return { actionId: res.data.action?.id };
603
+ }
604
+ catch (error) {
605
+ const apiError = error.response?.data?.error;
606
+ if (apiError) {
607
+ throw new Error(`Hetzner change_type failed: ${apiError.message} (${apiError.code})`);
608
+ }
609
+ if (error.response?.status === 404) {
610
+ throw new Error(`Server ${serverId} not found`);
611
+ }
612
+ throw new Error(`Hetzner change_type failed: ${error.message}`);
613
+ }
614
+ }
615
+ async expandVolume(volumeId, newSizeGb) {
616
+ this.logger.log(`Hetzner resize volume=${volumeId} → ${newSizeGb} GB`);
617
+ try {
618
+ const volumeActionsApi = await this.createVolumeActionsApi();
619
+ const res = await volumeActionsApi.resizeVolume(Number.parseInt(volumeId), { size: newSizeGb });
620
+ return { actionId: res.data.action?.id };
621
+ }
622
+ catch (error) {
623
+ const apiError = error.response?.data?.error;
624
+ if (apiError) {
625
+ throw new Error(`Hetzner resize volume failed: ${apiError.message} (${apiError.code})`);
626
+ }
627
+ if (error.response?.status === 404) {
628
+ throw new Error(`Volume ${volumeId} not found`);
629
+ }
630
+ throw new Error(`Hetzner resize volume failed: ${error.message}`);
631
+ }
632
+ }
633
+ async detachVolume(volumeId) {
634
+ this.logger.log(`Hetzner detach volume=${volumeId}`);
635
+ try {
636
+ const volumeActionsApi = await this.createVolumeActionsApi();
637
+ const res = await volumeActionsApi.detachVolume(Number.parseInt(volumeId));
638
+ return { actionId: res.data.action?.id };
639
+ }
640
+ catch (error) {
641
+ const apiError = error.response?.data?.error;
642
+ if (apiError?.code === 'locked') {
643
+ this.logger.warn(`Hetzner volume ${volumeId} locked — likely already detaching`);
644
+ return {};
645
+ }
646
+ if (error.response?.status === 404) {
647
+ this.logger.warn(`Hetzner volume ${volumeId} not found during detach — treating as success`);
648
+ return {};
649
+ }
650
+ throw new Error(`Hetzner detach volume failed: ${error.message}`);
651
+ }
652
+ }
653
+ async deleteVolume(volumeId) {
654
+ this.logger.log(`Hetzner delete volume=${volumeId}`);
655
+ try {
656
+ const volumesApi = await this.createVolumesApi();
657
+ await volumesApi.deleteVolume(Number.parseInt(volumeId));
658
+ }
659
+ catch (error) {
660
+ if (error.response?.status === 404) {
661
+ this.logger.warn(`Hetzner volume ${volumeId} already gone`);
662
+ return;
663
+ }
664
+ const apiError = error.response?.data?.error;
665
+ if (apiError?.code === 'volume_already_attached') {
666
+ throw new Error(`Volume ${volumeId} still attached — call detachVolume first`);
667
+ }
668
+ throw new Error(`Hetzner delete volume failed: ${error.message}`);
669
+ }
670
+ }
671
+ async listFluiManagedVolumes() {
672
+ try {
673
+ const volumesApi = await this.createVolumesApi();
674
+ const response = await volumesApi.listVolumes(undefined, undefined, undefined, 'managed-by=flui-cloud');
675
+ return (response.data.volumes ?? []).map((v) => ({
676
+ volumeId: String(v.id),
677
+ name: v.name,
678
+ sizeGb: v.size,
679
+ region: v.location?.name,
680
+ attachedServerId: v.server ? String(v.server) : null,
681
+ labels: v.labels ?? {},
682
+ createdAt: v.created,
683
+ }));
684
+ }
685
+ catch (error) {
686
+ this.logger.warn(`Hetzner listFluiManagedVolumes failed: ${error.message}`);
687
+ return [];
688
+ }
689
+ }
690
+ async listServersAsDto() {
691
+ try {
692
+ const serversApi = await this.createServersApi();
693
+ const response = await serversApi.listServers();
694
+ return response.data.servers.map((server) => this.mapHetznerServerToDto(server));
695
+ }
696
+ catch (error) {
697
+ this.logger.error('Failed to list servers from Hetzner API', error);
698
+ return [];
699
+ }
700
+ }
701
+ async getServerDetailsAsDto(serverId) {
702
+ try {
703
+ const serverDetails = await this.getServerDetails(serverId);
704
+ if (!serverDetails) {
705
+ return null;
706
+ }
707
+ return this.mapHetznerServerToDto(serverDetails);
708
+ }
709
+ catch (error) {
710
+ this.logger.warn(`Failed to get server details as DTO for ${serverId}`, error);
711
+ return null;
712
+ }
713
+ }
714
+ async testConnection() {
715
+ try {
716
+ const serversApi = await this.createServersApi();
717
+ // Test with a simple API call
718
+ await serversApi.listServers();
719
+ return { success: true };
720
+ }
721
+ catch (error) {
722
+ this.logger.error('Hetzner API connection test failed', error);
723
+ return {
724
+ success: false,
725
+ error: error.message,
726
+ };
727
+ }
728
+ }
729
+ mapHetznerServerToDto(server) {
730
+ return {
731
+ id: server.id.toString(),
732
+ name: server.name,
733
+ provider: cloud_provider_enum_1.CloudProvider.HETZNER,
734
+ provider_resource_id: server.id.toString(),
735
+ server_type: server.server_type.name,
736
+ location: server.datacenter.location.name,
737
+ status: server.status,
738
+ public_ip: server.public_net.ipv4?.ip || null,
739
+ private_ip: server.private_net?.[0]?.ip || null,
740
+ created_at: new Date(server.created),
741
+ updated_at: new Date(),
742
+ lastSyncAt: new Date(),
743
+ labels: this.labelService.fromRecord(server.labels || {}),
744
+ };
745
+ }
746
+ async listSSHKeys() {
747
+ try {
748
+ const sshKeysApi = await this.createSSHKeysApi();
749
+ const allKeys = [];
750
+ let page = 1;
751
+ const perPage = 50; // Max allowed by Hetzner API
752
+ // Fetch all pages
753
+ while (true) {
754
+ const response = await sshKeysApi.listSshKeys(undefined, // sort
755
+ undefined, // name
756
+ undefined, // fingerprint
757
+ undefined, // labelSelector
758
+ page, perPage);
759
+ const keys = response.data.ssh_keys
760
+ .filter((sshKey) => this.isFluiManagedKey(sshKey.labels))
761
+ .map((sshKey) => this.mapHetznerSSHKeyToDto(sshKey));
762
+ allKeys.push(...keys);
763
+ // Check if there are more pages
764
+ const meta = response.data.meta;
765
+ if (!meta?.pagination || page >= meta.pagination.last_page) {
766
+ break;
767
+ }
768
+ page++;
769
+ }
770
+ this.logger.log(`Retrieved ${allKeys.length} SSH keys from Hetzner`);
771
+ return allKeys;
772
+ }
773
+ catch (error) {
774
+ this.logger.error('Failed to list SSH keys from Hetzner API', error);
775
+ return [];
776
+ }
777
+ }
778
+ mapHetznerSSHKeyToDto(sshKey) {
779
+ return {
780
+ id: sshKey.id.toString(),
781
+ name: sshKey.name,
782
+ publicKey: sshKey.public_key,
783
+ fingerprint: sshKey.fingerprint,
784
+ type: this.extractKeyType(sshKey.public_key),
785
+ createdAt: new Date(sshKey.created),
786
+ updatedAt: new Date(sshKey.created),
787
+ source: cloud_provider_enum_1.CloudProvider.HETZNER,
788
+ syncedFromProvider: true,
789
+ providerKeyId: sshKey.id.toString(),
790
+ isActive: sshKey.active || true, // Default to true if not specified
791
+ lastUsed: sshKey.last_used ? new Date(sshKey.last_used) : undefined,
792
+ autoGenerated: false,
793
+ tags: sshKey.labels || {}, // Map Hetzner labels to tags
794
+ };
795
+ }
796
+ isFluiManagedKey(labels) {
797
+ if (!labels)
798
+ return false;
799
+ const isManagedByFlui = labels['managed-by'] === 'flui-cloud';
800
+ const isLegacyFluiCli = labels['flui-cli'] === 'true';
801
+ return isManagedByFlui || isLegacyFluiCli;
802
+ }
803
+ extractKeyType(publicKey) {
804
+ if (publicKey.startsWith('ssh-rsa'))
805
+ return 'rsa';
806
+ if (publicKey.startsWith('ssh-ed25519'))
807
+ return 'ed25519';
808
+ if (publicKey.startsWith('ssh-dss'))
809
+ return 'dsa';
810
+ if (publicKey.startsWith('ecdsa-sha2'))
811
+ return 'ecdsa';
812
+ return 'unknown';
813
+ }
814
+ /**
815
+ * Get available node sizes (server types) from Hetzner
816
+ * Filters out ARM architecture servers
817
+ * @param includeAvailability If true, includes real-time availability data from /datacenters endpoint (NOT cached)
818
+ */
819
+ async getNodeSizes(includeAvailability = true) {
820
+ this.logger.log(`Fetching node sizes from Hetzner API (includeAvailability: ${includeAvailability})`);
821
+ try {
822
+ const serverTypesApi = await this.createServerTypesApi();
823
+ const response = await serverTypesApi.listServerTypes();
824
+ let nodeSizes = this.nodeSizeMapper.mapHetznerServerTypesToDtos(response.data.server_types);
825
+ // Filter out ARM architecture servers
826
+ nodeSizes = nodeSizes.filter((nodeSize) => nodeSize.architecture !== 'arm');
827
+ // If requested, enrich with real-time availability (NO CACHE)
828
+ if (includeAvailability) {
829
+ const availabilityMap = await this.getDatacenterAvailability();
830
+ nodeSizes = nodeSizes.map((nodeSize) => {
831
+ const serverTypeId = Number.parseInt(nodeSize.id);
832
+ // Build availability info for each location this server type supports
833
+ const availability = nodeSize.locations.map((loc) => ({
834
+ location: loc.name,
835
+ available: availabilityMap.get(loc.name)?.has(serverTypeId) ?? false,
836
+ deprecated: !!loc.deprecation,
837
+ }));
838
+ return {
839
+ ...nodeSize,
840
+ availability,
841
+ };
842
+ });
843
+ }
844
+ // Sort by price (ascending, using first location's hourly gross price)
845
+ const sortedNodeSizes = [...nodeSizes].sort((a, b) => {
846
+ const priceA = a.prices[0]?.priceHourly?.gross;
847
+ const priceB = b.prices[0]?.priceHourly?.gross;
848
+ if (!priceA)
849
+ return 1;
850
+ if (!priceB)
851
+ return -1;
852
+ return Number.parseFloat(priceA) - Number.parseFloat(priceB);
853
+ });
854
+ this.logger.log(`Fetched ${response.data.server_types.length} node sizes, filtered to ${sortedNodeSizes.length} (excluding ARM), sorted by price`);
855
+ return sortedNodeSizes;
856
+ }
857
+ catch (error) {
858
+ //error.errors for each concatenate message an log them
859
+ this.logger.error('Failed to fetch Hetzner node sizes', error);
860
+ error?.errors?.forEach((err) => this.logger.error(err));
861
+ throw new Error(`Failed to fetch node sizes`);
862
+ }
863
+ }
864
+ /**
865
+ * Get pricing information from Hetzner
866
+ */
867
+ async getPricing(query) {
868
+ this.logger.log('Fetching pricing from Hetzner API', query);
869
+ try {
870
+ const pricingApi = await this.createPricingApi();
871
+ const response = await pricingApi.getPricing();
872
+ return this.pricingMapper.mapHetznerPricingToDto(response.data.pricing, cloud_provider_enum_1.CloudProvider.HETZNER, query.region, query.nodeSize);
873
+ }
874
+ catch (error) {
875
+ this.logger.error('Failed to fetch Hetzner pricing', error);
876
+ throw new Error(`Failed to fetch pricing: ${error.message}`);
877
+ }
878
+ }
879
+ /**
880
+ * List raw server types with full pricing data including traffic pricing.
881
+ * Used by billing service for cost calculations.
882
+ */
883
+ async listServerTypesRaw() {
884
+ const serverTypesApi = await this.createServerTypesApi();
885
+ const response = await serverTypesApi.listServerTypes();
886
+ return response.data.server_types;
887
+ }
888
+ /**
889
+ * Get datacenter availability from Hetzner
890
+ * Returns a map of location name to Set of available server type IDs
891
+ */
892
+ async getDatacenterAvailability() {
893
+ this.logger.log('Fetching datacenter availability from Hetzner API');
894
+ try {
895
+ const datacenterApi = await this.createDataCentersApi();
896
+ const response = await datacenterApi.listDatacenters();
897
+ // Build a map: location name -> Set of available server type IDs
898
+ const availabilityMap = new Map();
899
+ response.data.datacenters.forEach((dc) => {
900
+ const locationName = dc.location.name;
901
+ if (!availabilityMap.has(locationName)) {
902
+ availabilityMap.set(locationName, new Set());
903
+ }
904
+ // Add all available server type IDs for this location
905
+ dc.server_types.available.forEach((typeId) => {
906
+ availabilityMap.get(locationName).add(typeId);
907
+ });
908
+ });
909
+ this.logger.log(`Fetched availability for ${availabilityMap.size} locations from ${response.data.datacenters.length} datacenters`);
910
+ return availabilityMap;
911
+ }
912
+ catch (error) {
913
+ this.logger.error('Failed to fetch datacenter availability', error);
914
+ throw new Error(`Failed to fetch datacenter availability: ${error.message}`);
915
+ }
916
+ }
917
+ /**
918
+ * Create an SSH key on Hetzner
919
+ */
920
+ async createSSHKey(name, publicKey, labels) {
921
+ try {
922
+ const sshKeysApi = await this.createSSHKeysApi();
923
+ this.logger.log(`Creating SSH key ${name} on Hetzner with labels`, labels);
924
+ const response = await sshKeysApi.createSshKey({
925
+ name,
926
+ public_key: publicKey,
927
+ labels: labels || {},
928
+ });
929
+ this.logger.log(`SSH key ${name} created on Hetzner with ID ${response.data.ssh_key.id}`);
930
+ return {
931
+ id: response.data.ssh_key.id.toString(),
932
+ fingerprint: response.data.ssh_key.fingerprint,
933
+ };
934
+ }
935
+ catch (error) {
936
+ this.logger.error(`Failed to create SSH key ${name} on Hetzner`, error);
937
+ if (error.response?.status === 409) {
938
+ throw new Error(`SSH key with name ${name} already exists on Hetzner`);
939
+ }
940
+ throw new Error(`Failed to create SSH key on Hetzner: ${error.message}`);
941
+ }
942
+ }
943
+ /**
944
+ * Delete an SSH key from Hetzner
945
+ */
946
+ async deleteSSHKey(providerKeyId) {
947
+ try {
948
+ const sshKeysApi = await this.createSSHKeysApi();
949
+ this.logger.log(`Deleting SSH key ${providerKeyId} from Hetzner`);
950
+ await sshKeysApi.deleteSshKey(Number.parseInt(providerKeyId, 10));
951
+ this.logger.log(`SSH key ${providerKeyId} deleted from Hetzner`);
952
+ }
953
+ catch (error) {
954
+ if (error.response?.status === 404) {
955
+ this.logger.warn(`SSH key ${providerKeyId} not found on Hetzner, skipping deletion`);
956
+ return;
957
+ }
958
+ this.logger.error(`Failed to delete SSH key ${providerKeyId} from Hetzner`, error);
959
+ throw new Error(`Failed to delete SSH key from Hetzner: ${error.message}`);
960
+ }
961
+ }
962
+ /**
963
+ * Get SSH key details from Hetzner
964
+ */
965
+ async getSSHKey(providerKeyId) {
966
+ try {
967
+ const sshKeysApi = await this.createSSHKeysApi();
968
+ const response = await sshKeysApi.getSshKey(Number.parseInt(providerKeyId, 10));
969
+ return {
970
+ id: response.data.ssh_key.id.toString(),
971
+ name: response.data.ssh_key.name,
972
+ publicKey: response.data.ssh_key.public_key,
973
+ fingerprint: response.data.ssh_key.fingerprint,
974
+ labels: response.data.ssh_key.labels,
975
+ };
976
+ }
977
+ catch (error) {
978
+ if (error.response?.status === 404) {
979
+ throw new Error(`SSH key ${providerKeyId} not found on Hetzner`);
980
+ }
981
+ this.logger.error(`Failed to get SSH key ${providerKeyId} from Hetzner`, error);
982
+ throw new Error(`Failed to get SSH key from Hetzner: ${error.message}`);
983
+ }
984
+ }
985
+ async resolveSSHKeys(keys) {
986
+ const providerIds = [];
987
+ for (const key of keys) {
988
+ // Return cached provider ID if already synced
989
+ if (key.existingProviderId) {
990
+ providerIds.push(key.existingProviderId);
991
+ continue;
992
+ }
993
+ try {
994
+ const result = await this.createSSHKey(key.name, key.publicKey);
995
+ providerIds.push(result.id);
996
+ }
997
+ catch (error) {
998
+ if (error.message?.includes('already exists')) {
999
+ // Key exists — find it by fingerprint or name
1000
+ const existing = await this.listSSHKeys();
1001
+ const match = existing.find((k) => k.fingerprint === key.fingerprint || k.name === key.name);
1002
+ if (match) {
1003
+ providerIds.push(match.id);
1004
+ continue;
1005
+ }
1006
+ }
1007
+ throw error;
1008
+ }
1009
+ }
1010
+ return providerIds;
1011
+ }
1012
+ /**
1013
+ * Update server labels on Hetzner
1014
+ * IMPORTANT: This overwrites ALL labels, so we must merge with existing labels
1015
+ */
1016
+ async updateServerLabels(serverId, labels) {
1017
+ try {
1018
+ const serversApi = await this.createServersApi();
1019
+ this.logger.log(`Updating labels for server ${serverId}`, JSON.stringify(labels));
1020
+ await serversApi.updateServer(Number.parseInt(serverId, 10), {
1021
+ labels: labels,
1022
+ });
1023
+ this.logger.log(`Server ${serverId} labels updated successfully`);
1024
+ }
1025
+ catch (error) {
1026
+ this.logger.error(`Failed to update labels for server ${serverId}`, error);
1027
+ if (error.response?.status === 404) {
1028
+ throw new Error(`Server ${serverId} not found on Hetzner`);
1029
+ }
1030
+ if (error.response?.data?.error) {
1031
+ const apiError = error.response.data.error;
1032
+ throw new Error(`Hetzner API Error: ${apiError.message} (${apiError.code})`);
1033
+ }
1034
+ throw new Error(`Failed to update server labels: ${error.message}`);
1035
+ }
1036
+ }
1037
+ // ==================== Network/VNet Management ====================
1038
+ /**
1039
+ * Get network service instance
1040
+ */
1041
+ async getNetworkService() {
1042
+ const token = await this.credentialProvider.getActiveApiToken(cloud_provider_enum_1.CloudProvider.HETZNER);
1043
+ return new hetzner_network_service_1.HetznerNetworkService(token);
1044
+ }
1045
+ /**
1046
+ * Create a new VNet (private network)
1047
+ */
1048
+ async createVNet(config) {
1049
+ const networkService = await this.getNetworkService();
1050
+ return networkService.createVNet(config);
1051
+ }
1052
+ /**
1053
+ * Delete a VNet
1054
+ */
1055
+ async deleteVNet(vnetId) {
1056
+ const networkService = await this.getNetworkService();
1057
+ return networkService.deleteVNet(vnetId);
1058
+ }
1059
+ /**
1060
+ * Get VNet details
1061
+ */
1062
+ async getVNet(vnetId) {
1063
+ const networkService = await this.getNetworkService();
1064
+ return networkService.getVNet(vnetId);
1065
+ }
1066
+ /**
1067
+ * List all VNets
1068
+ */
1069
+ async listVNets() {
1070
+ const networkService = await this.getNetworkService();
1071
+ return networkService.listVNets();
1072
+ }
1073
+ /**
1074
+ * Add subnet to VNet
1075
+ */
1076
+ async addSubnet(config) {
1077
+ const networkService = await this.getNetworkService();
1078
+ return networkService.addSubnet(config);
1079
+ }
1080
+ /**
1081
+ * Delete subnet from VNet
1082
+ */
1083
+ async deleteSubnet(config) {
1084
+ const networkService = await this.getNetworkService();
1085
+ return networkService.deleteSubnet(config);
1086
+ }
1087
+ /**
1088
+ * Add route to VNet
1089
+ */
1090
+ async addRoute(config) {
1091
+ const networkService = await this.getNetworkService();
1092
+ return networkService.addRoute(config);
1093
+ }
1094
+ /**
1095
+ * Delete route from VNet
1096
+ */
1097
+ async deleteRoute(config) {
1098
+ const networkService = await this.getNetworkService();
1099
+ return networkService.deleteRoute(config);
1100
+ }
1101
+ /**
1102
+ * Change IP range of VNet (can only extend, not shrink)
1103
+ */
1104
+ async changeIpRange(config) {
1105
+ const networkService = await this.getNetworkService();
1106
+ return networkService.changeIpRange(config);
1107
+ }
1108
+ /**
1109
+ * Attach server to VNet
1110
+ */
1111
+ async attachServerToVNet(config) {
1112
+ try {
1113
+ const serverActionsApi = await this.createServerActionsApi();
1114
+ this.logger.log(`Attaching server ${config.serverId} to VNet ${config.vnetId}`);
1115
+ const response = await serverActionsApi.attachServerToNetwork(Number.parseInt(config.serverId, 10), {
1116
+ network: Number.parseInt(config.vnetId, 10),
1117
+ ip: config.ip,
1118
+ alias_ips: config.aliasIps,
1119
+ });
1120
+ const actionId = response.data.action?.id;
1121
+ this.logger.log(`Server ${config.serverId} attached to VNet ${config.vnetId}, action ID: ${actionId}`);
1122
+ return {
1123
+ actionId,
1124
+ message: `Server attached to VNet successfully`,
1125
+ };
1126
+ }
1127
+ catch (error) {
1128
+ this.logger.error(`Failed to attach server ${config.serverId} to VNet ${config.vnetId}: ${error.message}`, error.stack);
1129
+ throw new Error(`Failed to attach server to VNet on Hetzner: ${error.message}`);
1130
+ }
1131
+ }
1132
+ /**
1133
+ * Detach server from VNet
1134
+ */
1135
+ async detachServerFromVNet(config) {
1136
+ try {
1137
+ const serverActionsApi = await this.createServerActionsApi();
1138
+ this.logger.log(`Detaching server ${config.serverId} from VNet ${config.vnetId}`);
1139
+ const response = await serverActionsApi.detachServerFromNetwork(Number.parseInt(config.serverId, 10), {
1140
+ network: Number.parseInt(config.vnetId, 10),
1141
+ });
1142
+ const actionId = response.data.action?.id;
1143
+ this.logger.log(`Server ${config.serverId} detached from VNet ${config.vnetId}, action ID: ${actionId}`);
1144
+ return { actionId };
1145
+ }
1146
+ catch (error) {
1147
+ this.logger.error(`Failed to detach server ${config.serverId} from VNet ${config.vnetId}: ${error.message}`, error.stack);
1148
+ throw new Error(`Failed to detach server from VNet on Hetzner: ${error.message}`);
1149
+ }
1150
+ }
1151
+ };
1152
+ exports.HetznerProviderService = HetznerProviderService;
1153
+ exports.HetznerProviderService = HetznerProviderService = HetznerProviderService_1 = __decorate([
1154
+ (0, common_1.Injectable)(),
1155
+ __param(1, (0, common_1.Inject)('ICredentialProvider')),
1156
+ __metadata("design:paramtypes", [config_1.ConfigService, Object, node_size_mapper_1.NodeSizeMapper,
1157
+ pricing_mapper_1.PricingMapper,
1158
+ label_service_1.LabelService])
1159
+ ], HetznerProviderService);