@synteq/cli 0.1.6 → 1.1.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 (705) hide show
  1. package/bin/run.js +61 -2
  2. package/dist/api/client.d.ts +363 -5
  3. package/dist/api/client.js +559 -44
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/factory.d.ts +3 -0
  6. package/dist/api/factory.js +6 -3
  7. package/dist/api/factory.js.map +1 -1
  8. package/dist/api/types.d.ts +896 -4
  9. package/dist/apps-support/deploy.d.ts +197 -0
  10. package/dist/apps-support/deploy.js +639 -0
  11. package/dist/apps-support/deploy.js.map +1 -0
  12. package/dist/apps-support/dotenv.d.ts +67 -0
  13. package/dist/apps-support/dotenv.js +136 -0
  14. package/dist/apps-support/dotenv.js.map +1 -0
  15. package/dist/apps-support/env-rollout.d.ts +18 -0
  16. package/dist/apps-support/env-rollout.js +52 -0
  17. package/dist/apps-support/env-rollout.js.map +1 -0
  18. package/dist/apps-support/git.d.ts +14 -0
  19. package/dist/apps-support/git.js +25 -0
  20. package/dist/apps-support/git.js.map +1 -0
  21. package/dist/apps-support/link.d.ts +25 -0
  22. package/dist/apps-support/link.js +39 -0
  23. package/dist/apps-support/link.js.map +1 -0
  24. package/dist/apps-support/log-stream.d.ts +25 -0
  25. package/dist/apps-support/log-stream.js +85 -0
  26. package/dist/apps-support/log-stream.js.map +1 -0
  27. package/dist/apps-support/paid-app.d.ts +64 -0
  28. package/dist/apps-support/paid-app.js +195 -0
  29. package/dist/apps-support/paid-app.js.map +1 -0
  30. package/dist/apps-support/plans.d.ts +44 -0
  31. package/dist/apps-support/plans.js +43 -0
  32. package/dist/apps-support/plans.js.map +1 -0
  33. package/dist/apps-support/resolve.d.ts +10 -0
  34. package/dist/apps-support/resolve.js +53 -0
  35. package/dist/apps-support/resolve.js.map +1 -0
  36. package/dist/apps-support/time.d.ts +20 -0
  37. package/dist/apps-support/time.js +82 -0
  38. package/dist/apps-support/time.js.map +1 -0
  39. package/dist/auth/scope.d.ts +19 -0
  40. package/dist/auth/scope.js +69 -0
  41. package/dist/auth/scope.js.map +1 -0
  42. package/dist/auth/tokens.d.ts +3 -0
  43. package/dist/auth/tokens.js +6 -4
  44. package/dist/auth/tokens.js.map +1 -1
  45. package/dist/base/command.d.ts +36 -1
  46. package/dist/base/command.js +132 -0
  47. package/dist/base/command.js.map +1 -1
  48. package/dist/commands/account/index.d.ts +1 -0
  49. package/dist/commands/account/index.js +1 -0
  50. package/dist/commands/account/index.js.map +1 -1
  51. package/dist/commands/account/show.d.ts +1 -0
  52. package/dist/commands/account/show.js +1 -0
  53. package/dist/commands/account/show.js.map +1 -1
  54. package/dist/commands/agents.d.ts +10 -0
  55. package/dist/commands/agents.js +53 -0
  56. package/dist/commands/agents.js.map +1 -0
  57. package/dist/commands/api.d.ts +1 -1
  58. package/dist/commands/api.js +6 -4
  59. package/dist/commands/api.js.map +1 -1
  60. package/dist/commands/app/deployment/list.d.ts +14 -0
  61. package/dist/commands/app/deployment/list.js +45 -0
  62. package/dist/commands/app/deployment/list.js.map +1 -0
  63. package/dist/commands/app/deployment/rollback.d.ts +18 -0
  64. package/dist/commands/app/deployment/rollback.js +57 -0
  65. package/dist/commands/app/deployment/rollback.js.map +1 -0
  66. package/dist/commands/app/deployment/show.d.ts +26 -0
  67. package/dist/commands/app/deployment/show.js +98 -0
  68. package/dist/commands/app/deployment/show.js.map +1 -0
  69. package/dist/commands/app/domain/add.d.ts +17 -0
  70. package/dist/commands/app/domain/add.js +59 -0
  71. package/dist/commands/app/domain/add.js.map +1 -0
  72. package/dist/commands/app/domain/list.d.ts +14 -0
  73. package/dist/commands/app/domain/list.js +42 -0
  74. package/dist/commands/app/domain/list.js.map +1 -0
  75. package/dist/commands/app/domain/remove.d.ts +16 -0
  76. package/dist/commands/app/domain/remove.js +51 -0
  77. package/dist/commands/app/domain/remove.js.map +1 -0
  78. package/dist/commands/app/domain/verify.d.ts +15 -0
  79. package/dist/commands/app/domain/verify.js +39 -0
  80. package/dist/commands/app/domain/verify.js.map +1 -0
  81. package/dist/commands/app/env/add.d.ts +22 -0
  82. package/dist/commands/app/env/add.js +103 -0
  83. package/dist/commands/app/env/add.js.map +1 -0
  84. package/dist/commands/app/env/list.d.ts +17 -0
  85. package/dist/commands/app/env/list.js +40 -0
  86. package/dist/commands/app/env/list.js.map +1 -0
  87. package/dist/commands/app/env/reveal.d.ts +17 -0
  88. package/dist/commands/app/env/reveal.js +40 -0
  89. package/dist/commands/app/env/reveal.js.map +1 -0
  90. package/dist/commands/app/env/rm.d.ts +16 -0
  91. package/dist/commands/app/env/rm.js +48 -0
  92. package/dist/commands/app/env/rm.js.map +1 -0
  93. package/dist/commands/app/health.d.ts +14 -0
  94. package/dist/commands/app/health.js +40 -0
  95. package/dist/commands/app/health.js.map +1 -0
  96. package/dist/commands/app/index.d.ts +6 -0
  97. package/dist/commands/app/index.js +7 -0
  98. package/dist/commands/app/index.js.map +1 -0
  99. package/dist/commands/app/link.d.ts +22 -0
  100. package/dist/commands/app/link.js +31 -0
  101. package/dist/commands/app/link.js.map +1 -0
  102. package/dist/commands/app/logs.d.ts +25 -0
  103. package/dist/commands/app/logs.js +121 -0
  104. package/dist/commands/app/logs.js.map +1 -0
  105. package/dist/commands/app/metrics.d.ts +21 -0
  106. package/dist/commands/app/metrics.js +123 -0
  107. package/dist/commands/app/metrics.js.map +1 -0
  108. package/dist/commands/app/plan/change.d.ts +18 -0
  109. package/dist/commands/app/plan/change.js +79 -0
  110. package/dist/commands/app/plan/change.js.map +1 -0
  111. package/dist/commands/app/plan/show.d.ts +14 -0
  112. package/dist/commands/app/plan/show.js +40 -0
  113. package/dist/commands/app/plan/show.js.map +1 -0
  114. package/dist/commands/app/settings/set.d.ts +25 -0
  115. package/dist/commands/app/settings/set.js +96 -0
  116. package/dist/commands/app/settings/set.js.map +1 -0
  117. package/dist/commands/app/settings/show.d.ts +14 -0
  118. package/dist/commands/app/settings/show.js +48 -0
  119. package/dist/commands/app/settings/show.js.map +1 -0
  120. package/dist/commands/app/unlink.d.ts +8 -0
  121. package/dist/commands/app/unlink.js +25 -0
  122. package/dist/commands/app/unlink.js.map +1 -0
  123. package/dist/commands/apps/create.d.ts +26 -0
  124. package/dist/commands/apps/create.js +91 -0
  125. package/dist/commands/apps/create.js.map +1 -0
  126. package/dist/commands/apps/list.d.ts +16 -0
  127. package/dist/commands/apps/list.js +54 -0
  128. package/dist/commands/apps/list.js.map +1 -0
  129. package/dist/commands/baremetal/activity.d.ts +14 -0
  130. package/dist/commands/baremetal/activity.js +53 -0
  131. package/dist/commands/baremetal/activity.js.map +1 -0
  132. package/dist/commands/baremetal/bandwidth.d.ts +10 -0
  133. package/dist/commands/baremetal/bandwidth.js +86 -0
  134. package/dist/commands/baremetal/bandwidth.js.map +1 -0
  135. package/dist/commands/baremetal/console.d.ts +20 -0
  136. package/dist/commands/baremetal/console.js +72 -0
  137. package/dist/commands/baremetal/console.js.map +1 -0
  138. package/dist/commands/baremetal/details.d.ts +11 -0
  139. package/dist/commands/baremetal/details.js +116 -0
  140. package/dist/commands/baremetal/details.js.map +1 -0
  141. package/dist/commands/baremetal/index.d.ts +5 -0
  142. package/dist/commands/baremetal/index.js +6 -0
  143. package/dist/commands/baremetal/index.js.map +1 -0
  144. package/dist/commands/baremetal/install-password.d.ts +14 -0
  145. package/dist/commands/baremetal/install-password.js +80 -0
  146. package/dist/commands/baremetal/install-password.js.map +1 -0
  147. package/dist/commands/baremetal/list.d.ts +11 -0
  148. package/dist/commands/baremetal/list.js +59 -0
  149. package/dist/commands/baremetal/list.js.map +1 -0
  150. package/dist/commands/baremetal/order.d.ts +34 -0
  151. package/dist/commands/baremetal/order.js +394 -0
  152. package/dist/commands/baremetal/order.js.map +1 -0
  153. package/dist/commands/baremetal/power.d.ts +18 -0
  154. package/dist/commands/baremetal/power.js +168 -0
  155. package/dist/commands/baremetal/power.js.map +1 -0
  156. package/dist/commands/baremetal/reinstall.d.ts +21 -0
  157. package/dist/commands/baremetal/reinstall.js +168 -0
  158. package/dist/commands/baremetal/reinstall.js.map +1 -0
  159. package/dist/commands/catalog.d.ts +1 -0
  160. package/dist/commands/catalog.js +5 -0
  161. package/dist/commands/catalog.js.map +1 -1
  162. package/dist/commands/config/index.d.ts +1 -0
  163. package/dist/commands/config/index.js +1 -0
  164. package/dist/commands/config/index.js.map +1 -1
  165. package/dist/commands/config/profile/add.d.ts +11 -0
  166. package/dist/commands/config/profile/add.js +51 -0
  167. package/dist/commands/config/profile/add.js.map +1 -0
  168. package/dist/commands/config/profile/list.d.ts +7 -0
  169. package/dist/commands/config/profile/list.js +29 -0
  170. package/dist/commands/config/profile/list.js.map +1 -0
  171. package/dist/commands/config/profile/remove.d.ts +11 -0
  172. package/dist/commands/config/profile/remove.js +35 -0
  173. package/dist/commands/config/profile/remove.js.map +1 -0
  174. package/dist/commands/config/profile/use.d.ts +10 -0
  175. package/dist/commands/config/profile/use.js +44 -0
  176. package/dist/commands/config/profile/use.js.map +1 -0
  177. package/dist/commands/config/set-api-url.d.ts +1 -0
  178. package/dist/commands/config/set-api-url.js +1 -0
  179. package/dist/commands/config/set-api-url.js.map +1 -1
  180. package/dist/commands/config/show.d.ts +1 -0
  181. package/dist/commands/config/show.js +5 -1
  182. package/dist/commands/config/show.js.map +1 -1
  183. package/dist/commands/credits/add.d.ts +1 -0
  184. package/dist/commands/credits/add.js +3 -2
  185. package/dist/commands/credits/add.js.map +1 -1
  186. package/dist/commands/credits/index.d.ts +1 -0
  187. package/dist/commands/credits/index.js +6 -1
  188. package/dist/commands/credits/index.js.map +1 -1
  189. package/dist/commands/credits/list.d.ts +1 -0
  190. package/dist/commands/credits/list.js +1 -0
  191. package/dist/commands/credits/list.js.map +1 -1
  192. package/dist/commands/deploy.d.ts +51 -0
  193. package/dist/commands/deploy.js +515 -0
  194. package/dist/commands/deploy.js.map +1 -0
  195. package/dist/commands/function/create.d.ts +29 -0
  196. package/dist/commands/function/create.js +113 -0
  197. package/dist/commands/function/create.js.map +1 -0
  198. package/dist/commands/function/credits/add.d.ts +29 -0
  199. package/dist/commands/function/credits/add.js +209 -0
  200. package/dist/commands/function/credits/add.js.map +1 -0
  201. package/dist/commands/function/credits/auto-reload.d.ts +27 -0
  202. package/dist/commands/function/credits/auto-reload.js +107 -0
  203. package/dist/commands/function/credits/auto-reload.js.map +1 -0
  204. package/dist/commands/function/credits/index.d.ts +22 -0
  205. package/dist/commands/function/credits/index.js +80 -0
  206. package/dist/commands/function/credits/index.js.map +1 -0
  207. package/dist/commands/function/cron/add.d.ts +19 -0
  208. package/dist/commands/function/cron/add.js +74 -0
  209. package/dist/commands/function/cron/add.js.map +1 -0
  210. package/dist/commands/function/cron/list.d.ts +12 -0
  211. package/dist/commands/function/cron/list.js +55 -0
  212. package/dist/commands/function/cron/list.js.map +1 -0
  213. package/dist/commands/function/cron/rm.d.ts +17 -0
  214. package/dist/commands/function/cron/rm.js +73 -0
  215. package/dist/commands/function/cron/rm.js.map +1 -0
  216. package/dist/commands/function/cron/run.d.ts +16 -0
  217. package/dist/commands/function/cron/run.js +59 -0
  218. package/dist/commands/function/cron/run.js.map +1 -0
  219. package/dist/commands/function/cron/update.d.ts +21 -0
  220. package/dist/commands/function/cron/update.js +87 -0
  221. package/dist/commands/function/cron/update.js.map +1 -0
  222. package/dist/commands/function/delete.d.ts +23 -0
  223. package/dist/commands/function/delete.js +90 -0
  224. package/dist/commands/function/delete.js.map +1 -0
  225. package/dist/commands/function/deploy.d.ts +64 -0
  226. package/dist/commands/function/deploy.js +608 -0
  227. package/dist/commands/function/deploy.js.map +1 -0
  228. package/dist/commands/function/env/list.d.ts +12 -0
  229. package/dist/commands/function/env/list.js +46 -0
  230. package/dist/commands/function/env/list.js.map +1 -0
  231. package/dist/commands/function/env/reveal.d.ts +21 -0
  232. package/dist/commands/function/env/reveal.js +54 -0
  233. package/dist/commands/function/env/reveal.js.map +1 -0
  234. package/dist/commands/function/env/rm.d.ts +17 -0
  235. package/dist/commands/function/env/rm.js +62 -0
  236. package/dist/commands/function/env/rm.js.map +1 -0
  237. package/dist/commands/function/env/set.d.ts +28 -0
  238. package/dist/commands/function/env/set.js +124 -0
  239. package/dist/commands/function/env/set.js.map +1 -0
  240. package/dist/commands/function/index.d.ts +14 -0
  241. package/dist/commands/function/index.js +11 -0
  242. package/dist/commands/function/index.js.map +1 -0
  243. package/dist/commands/function/init.d.ts +47 -0
  244. package/dist/commands/function/init.js +269 -0
  245. package/dist/commands/function/init.js.map +1 -0
  246. package/dist/commands/function/invoke.d.ts +29 -0
  247. package/dist/commands/function/invoke.js +138 -0
  248. package/dist/commands/function/invoke.js.map +1 -0
  249. package/dist/commands/function/link.d.ts +23 -0
  250. package/dist/commands/function/link.js +80 -0
  251. package/dist/commands/function/link.js.map +1 -0
  252. package/dist/commands/function/list.d.ts +16 -0
  253. package/dist/commands/function/list.js +55 -0
  254. package/dist/commands/function/list.js.map +1 -0
  255. package/dist/commands/function/logs.d.ts +29 -0
  256. package/dist/commands/function/logs.js +171 -0
  257. package/dist/commands/function/logs.js.map +1 -0
  258. package/dist/commands/function/pause.d.ts +19 -0
  259. package/dist/commands/function/pause.js +50 -0
  260. package/dist/commands/function/pause.js.map +1 -0
  261. package/dist/commands/function/releases.d.ts +15 -0
  262. package/dist/commands/function/releases.js +62 -0
  263. package/dist/commands/function/releases.js.map +1 -0
  264. package/dist/commands/function/resume.d.ts +16 -0
  265. package/dist/commands/function/resume.js +47 -0
  266. package/dist/commands/function/resume.js.map +1 -0
  267. package/dist/commands/function/rollback.d.ts +18 -0
  268. package/dist/commands/function/rollback.js +69 -0
  269. package/dist/commands/function/rollback.js.map +1 -0
  270. package/dist/commands/function/settings/set.d.ts +23 -0
  271. package/dist/commands/function/settings/set.js +119 -0
  272. package/dist/commands/function/settings/set.js.map +1 -0
  273. package/dist/commands/function/show.d.ts +15 -0
  274. package/dist/commands/function/show.js +80 -0
  275. package/dist/commands/function/show.js.map +1 -0
  276. package/dist/commands/function/unlink.d.ts +9 -0
  277. package/dist/commands/function/unlink.js +34 -0
  278. package/dist/commands/function/unlink.js.map +1 -0
  279. package/dist/commands/gpu/activity.d.ts +1 -0
  280. package/dist/commands/gpu/activity.js +1 -0
  281. package/dist/commands/gpu/activity.js.map +1 -1
  282. package/dist/commands/gpu/bandwidth.d.ts +1 -0
  283. package/dist/commands/gpu/bandwidth.js +1 -0
  284. package/dist/commands/gpu/bandwidth.js.map +1 -1
  285. package/dist/commands/gpu/boot-order.d.ts +1 -0
  286. package/dist/commands/gpu/boot-order.js +1 -0
  287. package/dist/commands/gpu/boot-order.js.map +1 -1
  288. package/dist/commands/gpu/console.d.ts +1 -0
  289. package/dist/commands/gpu/console.js +1 -0
  290. package/dist/commands/gpu/console.js.map +1 -1
  291. package/dist/commands/gpu/details.d.ts +1 -0
  292. package/dist/commands/gpu/details.js +1 -0
  293. package/dist/commands/gpu/details.js.map +1 -1
  294. package/dist/commands/gpu/index.d.ts +1 -0
  295. package/dist/commands/gpu/index.js +1 -0
  296. package/dist/commands/gpu/index.js.map +1 -1
  297. package/dist/commands/gpu/ip/add.d.ts +1 -0
  298. package/dist/commands/gpu/ip/add.js +1 -0
  299. package/dist/commands/gpu/ip/add.js.map +1 -1
  300. package/dist/commands/gpu/ip/list.d.ts +1 -0
  301. package/dist/commands/gpu/ip/list.js +1 -0
  302. package/dist/commands/gpu/ip/list.js.map +1 -1
  303. package/dist/commands/gpu/list.d.ts +1 -0
  304. package/dist/commands/gpu/list.js +1 -0
  305. package/dist/commands/gpu/list.js.map +1 -1
  306. package/dist/commands/gpu/order.d.ts +1 -0
  307. package/dist/commands/gpu/order.js +1 -0
  308. package/dist/commands/gpu/order.js.map +1 -1
  309. package/dist/commands/gpu/power.d.ts +1 -0
  310. package/dist/commands/gpu/power.js +1 -0
  311. package/dist/commands/gpu/power.js.map +1 -1
  312. package/dist/commands/gpu/reinstall.d.ts +1 -0
  313. package/dist/commands/gpu/reinstall.js +1 -0
  314. package/dist/commands/gpu/reinstall.js.map +1 -1
  315. package/dist/commands/gpu/resize.d.ts +1 -0
  316. package/dist/commands/gpu/resize.js +1 -0
  317. package/dist/commands/gpu/resize.js.map +1 -1
  318. package/dist/commands/gpu/stats.d.ts +1 -0
  319. package/dist/commands/gpu/stats.js +1 -0
  320. package/dist/commands/gpu/stats.js.map +1 -1
  321. package/dist/commands/help.d.ts +2 -0
  322. package/dist/commands/help.js +5 -0
  323. package/dist/commands/help.js.map +1 -1
  324. package/dist/commands/instant-metal/activity.d.ts +1 -0
  325. package/dist/commands/instant-metal/activity.js +1 -0
  326. package/dist/commands/instant-metal/activity.js.map +1 -1
  327. package/dist/commands/instant-metal/bandwidth.d.ts +1 -0
  328. package/dist/commands/instant-metal/bandwidth.js +1 -0
  329. package/dist/commands/instant-metal/bandwidth.js.map +1 -1
  330. package/dist/commands/instant-metal/boot-order.d.ts +1 -0
  331. package/dist/commands/instant-metal/boot-order.js +1 -0
  332. package/dist/commands/instant-metal/boot-order.js.map +1 -1
  333. package/dist/commands/instant-metal/console.d.ts +1 -0
  334. package/dist/commands/instant-metal/console.js +1 -0
  335. package/dist/commands/instant-metal/console.js.map +1 -1
  336. package/dist/commands/instant-metal/details.d.ts +1 -0
  337. package/dist/commands/instant-metal/details.js +1 -0
  338. package/dist/commands/instant-metal/details.js.map +1 -1
  339. package/dist/commands/instant-metal/index.d.ts +1 -0
  340. package/dist/commands/instant-metal/index.js +1 -0
  341. package/dist/commands/instant-metal/index.js.map +1 -1
  342. package/dist/commands/instant-metal/ip/add.d.ts +1 -0
  343. package/dist/commands/instant-metal/ip/add.js +1 -0
  344. package/dist/commands/instant-metal/ip/add.js.map +1 -1
  345. package/dist/commands/instant-metal/ip/list.d.ts +1 -0
  346. package/dist/commands/instant-metal/ip/list.js +1 -0
  347. package/dist/commands/instant-metal/ip/list.js.map +1 -1
  348. package/dist/commands/instant-metal/list.d.ts +1 -0
  349. package/dist/commands/instant-metal/list.js +1 -0
  350. package/dist/commands/instant-metal/list.js.map +1 -1
  351. package/dist/commands/instant-metal/order.d.ts +1 -0
  352. package/dist/commands/instant-metal/order.js +1 -0
  353. package/dist/commands/instant-metal/order.js.map +1 -1
  354. package/dist/commands/instant-metal/power.d.ts +1 -0
  355. package/dist/commands/instant-metal/power.js +1 -0
  356. package/dist/commands/instant-metal/power.js.map +1 -1
  357. package/dist/commands/instant-metal/reinstall.d.ts +1 -0
  358. package/dist/commands/instant-metal/reinstall.js +1 -0
  359. package/dist/commands/instant-metal/reinstall.js.map +1 -1
  360. package/dist/commands/instant-metal/resize.d.ts +1 -0
  361. package/dist/commands/instant-metal/resize.js +1 -0
  362. package/dist/commands/instant-metal/resize.js.map +1 -1
  363. package/dist/commands/instant-metal/stats.d.ts +1 -0
  364. package/dist/commands/instant-metal/stats.js +1 -0
  365. package/dist/commands/instant-metal/stats.js.map +1 -1
  366. package/dist/commands/link.d.ts +77 -0
  367. package/dist/commands/link.js +530 -0
  368. package/dist/commands/link.js.map +1 -0
  369. package/dist/commands/login.d.ts +1 -0
  370. package/dist/commands/login.js +10 -0
  371. package/dist/commands/login.js.map +1 -1
  372. package/dist/commands/logout.d.ts +1 -0
  373. package/dist/commands/logout.js +1 -0
  374. package/dist/commands/logout.js.map +1 -1
  375. package/dist/commands/order/gpu.d.ts +1 -0
  376. package/dist/commands/order/gpu.js +1 -0
  377. package/dist/commands/order/gpu.js.map +1 -1
  378. package/dist/commands/order/instant-metal.d.ts +1 -0
  379. package/dist/commands/order/instant-metal.js +1 -0
  380. package/dist/commands/order/instant-metal.js.map +1 -1
  381. package/dist/commands/order/storage.d.ts +1 -0
  382. package/dist/commands/order/storage.js +1 -0
  383. package/dist/commands/order/storage.js.map +1 -1
  384. package/dist/commands/order/vps.d.ts +1 -0
  385. package/dist/commands/order/vps.js +1 -0
  386. package/dist/commands/order/vps.js.map +1 -1
  387. package/dist/commands/order.d.ts +1 -0
  388. package/dist/commands/order.js +4 -1
  389. package/dist/commands/order.js.map +1 -1
  390. package/dist/commands/os-images.d.ts +1 -0
  391. package/dist/commands/os-images.js +3 -0
  392. package/dist/commands/os-images.js.map +1 -1
  393. package/dist/commands/payments/index.d.ts +1 -0
  394. package/dist/commands/payments/index.js +1 -0
  395. package/dist/commands/payments/index.js.map +1 -1
  396. package/dist/commands/payments/methods/add.d.ts +1 -0
  397. package/dist/commands/payments/methods/add.js +1 -0
  398. package/dist/commands/payments/methods/add.js.map +1 -1
  399. package/dist/commands/payments/methods/delete.d.ts +1 -0
  400. package/dist/commands/payments/methods/delete.js +3 -2
  401. package/dist/commands/payments/methods/delete.js.map +1 -1
  402. package/dist/commands/payments/methods/index.d.ts +1 -0
  403. package/dist/commands/payments/methods/index.js +1 -0
  404. package/dist/commands/payments/methods/index.js.map +1 -1
  405. package/dist/commands/payments/methods/list.d.ts +1 -0
  406. package/dist/commands/payments/methods/list.js +1 -0
  407. package/dist/commands/payments/methods/list.js.map +1 -1
  408. package/dist/commands/payments/methods/set-default.d.ts +1 -0
  409. package/dist/commands/payments/methods/set-default.js +1 -0
  410. package/dist/commands/payments/methods/set-default.js.map +1 -1
  411. package/dist/commands/projects/index.d.ts +1 -0
  412. package/dist/commands/projects/index.js +1 -0
  413. package/dist/commands/projects/index.js.map +1 -1
  414. package/dist/commands/projects/list.d.ts +1 -0
  415. package/dist/commands/projects/list.js +1 -0
  416. package/dist/commands/projects/list.js.map +1 -1
  417. package/dist/commands/resources.d.ts +1 -0
  418. package/dist/commands/resources.js +61 -7
  419. package/dist/commands/resources.js.map +1 -1
  420. package/dist/commands/settings/index.d.ts +1 -0
  421. package/dist/commands/settings/index.js +1 -0
  422. package/dist/commands/settings/index.js.map +1 -1
  423. package/dist/commands/settings/render-mode.d.ts +1 -0
  424. package/dist/commands/settings/render-mode.js +1 -0
  425. package/dist/commands/settings/render-mode.js.map +1 -1
  426. package/dist/commands/ssh-key/add.d.ts +1 -0
  427. package/dist/commands/ssh-key/add.js +1 -0
  428. package/dist/commands/ssh-key/add.js.map +1 -1
  429. package/dist/commands/ssh-key/delete.d.ts +1 -0
  430. package/dist/commands/ssh-key/delete.js +1 -0
  431. package/dist/commands/ssh-key/delete.js.map +1 -1
  432. package/dist/commands/ssh-key/list.d.ts +1 -0
  433. package/dist/commands/ssh-key/list.js +1 -0
  434. package/dist/commands/ssh-key/list.js.map +1 -1
  435. package/dist/commands/status.d.ts +12 -0
  436. package/dist/commands/status.js +71 -0
  437. package/dist/commands/status.js.map +1 -0
  438. package/dist/commands/storage/attach.d.ts +1 -0
  439. package/dist/commands/storage/attach.js +1 -0
  440. package/dist/commands/storage/attach.js.map +1 -1
  441. package/dist/commands/storage/detach.d.ts +1 -0
  442. package/dist/commands/storage/detach.js +2 -1
  443. package/dist/commands/storage/detach.js.map +1 -1
  444. package/dist/commands/storage/list.d.ts +1 -0
  445. package/dist/commands/storage/list.js +7 -2
  446. package/dist/commands/storage/list.js.map +1 -1
  447. package/dist/commands/storage/order.d.ts +3 -0
  448. package/dist/commands/storage/order.js +101 -18
  449. package/dist/commands/storage/order.js.map +1 -1
  450. package/dist/commands/storage/resize.d.ts +1 -0
  451. package/dist/commands/storage/resize.js +20 -6
  452. package/dist/commands/storage/resize.js.map +1 -1
  453. package/dist/commands/team/details.d.ts +1 -0
  454. package/dist/commands/team/details.js +1 -0
  455. package/dist/commands/team/details.js.map +1 -1
  456. package/dist/commands/team/invite.d.ts +1 -0
  457. package/dist/commands/team/invite.js +1 -0
  458. package/dist/commands/team/invite.js.map +1 -1
  459. package/dist/commands/team.d.ts +1 -0
  460. package/dist/commands/team.js +1 -0
  461. package/dist/commands/team.js.map +1 -1
  462. package/dist/commands/tickets/close.d.ts +1 -0
  463. package/dist/commands/tickets/close.js +1 -0
  464. package/dist/commands/tickets/close.js.map +1 -1
  465. package/dist/commands/tickets/create.d.ts +3 -0
  466. package/dist/commands/tickets/create.js +41 -1
  467. package/dist/commands/tickets/create.js.map +1 -1
  468. package/dist/commands/tickets/departments.d.ts +1 -0
  469. package/dist/commands/tickets/departments.js +1 -0
  470. package/dist/commands/tickets/departments.js.map +1 -1
  471. package/dist/commands/tickets/download.d.ts +18 -0
  472. package/dist/commands/tickets/download.js +138 -0
  473. package/dist/commands/tickets/download.js.map +1 -0
  474. package/dist/commands/tickets/list.d.ts +1 -0
  475. package/dist/commands/tickets/list.js +14 -7
  476. package/dist/commands/tickets/list.js.map +1 -1
  477. package/dist/commands/tickets/open.d.ts +1 -0
  478. package/dist/commands/tickets/open.js +1 -0
  479. package/dist/commands/tickets/open.js.map +1 -1
  480. package/dist/commands/tickets/reopen.d.ts +11 -0
  481. package/dist/commands/tickets/reopen.js +34 -0
  482. package/dist/commands/tickets/reopen.js.map +1 -0
  483. package/dist/commands/tickets/reply.d.ts +3 -0
  484. package/dist/commands/tickets/reply.js +34 -4
  485. package/dist/commands/tickets/reply.js.map +1 -1
  486. package/dist/commands/transit.d.ts +1 -0
  487. package/dist/commands/transit.js +1 -0
  488. package/dist/commands/transit.js.map +1 -1
  489. package/dist/commands/tui/index.d.ts +1 -0
  490. package/dist/commands/tui/index.js +21 -0
  491. package/dist/commands/tui/index.js.map +1 -1
  492. package/dist/commands/vds/activity.d.ts +1 -0
  493. package/dist/commands/vds/activity.js +1 -0
  494. package/dist/commands/vds/activity.js.map +1 -1
  495. package/dist/commands/vds/bandwidth.d.ts +1 -0
  496. package/dist/commands/vds/bandwidth.js +1 -0
  497. package/dist/commands/vds/bandwidth.js.map +1 -1
  498. package/dist/commands/vds/boot-order.d.ts +1 -0
  499. package/dist/commands/vds/boot-order.js +1 -0
  500. package/dist/commands/vds/boot-order.js.map +1 -1
  501. package/dist/commands/vds/console.d.ts +1 -0
  502. package/dist/commands/vds/console.js +1 -0
  503. package/dist/commands/vds/console.js.map +1 -1
  504. package/dist/commands/vds/details.d.ts +1 -0
  505. package/dist/commands/vds/details.js +1 -0
  506. package/dist/commands/vds/details.js.map +1 -1
  507. package/dist/commands/vds/index.d.ts +1 -0
  508. package/dist/commands/vds/index.js +1 -0
  509. package/dist/commands/vds/index.js.map +1 -1
  510. package/dist/commands/vds/ip/add.d.ts +1 -0
  511. package/dist/commands/vds/ip/add.js +1 -0
  512. package/dist/commands/vds/ip/add.js.map +1 -1
  513. package/dist/commands/vds/ip/list.d.ts +1 -0
  514. package/dist/commands/vds/ip/list.js +1 -0
  515. package/dist/commands/vds/ip/list.js.map +1 -1
  516. package/dist/commands/vds/list.d.ts +1 -0
  517. package/dist/commands/vds/list.js +1 -0
  518. package/dist/commands/vds/list.js.map +1 -1
  519. package/dist/commands/vds/order.d.ts +1 -0
  520. package/dist/commands/vds/order.js +73 -7
  521. package/dist/commands/vds/order.js.map +1 -1
  522. package/dist/commands/vds/power.d.ts +1 -0
  523. package/dist/commands/vds/power.js +1 -0
  524. package/dist/commands/vds/power.js.map +1 -1
  525. package/dist/commands/vds/reinstall.d.ts +1 -0
  526. package/dist/commands/vds/reinstall.js +1 -0
  527. package/dist/commands/vds/reinstall.js.map +1 -1
  528. package/dist/commands/vds/resize.d.ts +1 -0
  529. package/dist/commands/vds/resize.js +1 -0
  530. package/dist/commands/vds/resize.js.map +1 -1
  531. package/dist/commands/vds/stats.d.ts +1 -0
  532. package/dist/commands/vds/stats.js +1 -0
  533. package/dist/commands/vds/stats.js.map +1 -1
  534. package/dist/commands/vps/activity.d.ts +1 -0
  535. package/dist/commands/vps/activity.js +1 -0
  536. package/dist/commands/vps/activity.js.map +1 -1
  537. package/dist/commands/vps/bandwidth.d.ts +1 -0
  538. package/dist/commands/vps/bandwidth.js +1 -0
  539. package/dist/commands/vps/bandwidth.js.map +1 -1
  540. package/dist/commands/vps/boot-order.d.ts +1 -0
  541. package/dist/commands/vps/boot-order.js +1 -0
  542. package/dist/commands/vps/boot-order.js.map +1 -1
  543. package/dist/commands/vps/console.d.ts +1 -0
  544. package/dist/commands/vps/console.js +15 -6
  545. package/dist/commands/vps/console.js.map +1 -1
  546. package/dist/commands/vps/details.d.ts +1 -0
  547. package/dist/commands/vps/details.js +8 -1
  548. package/dist/commands/vps/details.js.map +1 -1
  549. package/dist/commands/vps/ip/add.d.ts +1 -0
  550. package/dist/commands/vps/ip/add.js +77 -9
  551. package/dist/commands/vps/ip/add.js.map +1 -1
  552. package/dist/commands/vps/ip/list.d.ts +1 -0
  553. package/dist/commands/vps/ip/list.js +1 -0
  554. package/dist/commands/vps/ip/list.js.map +1 -1
  555. package/dist/commands/vps/list.d.ts +1 -0
  556. package/dist/commands/vps/list.js +14 -4
  557. package/dist/commands/vps/list.js.map +1 -1
  558. package/dist/commands/vps/order.d.ts +20 -0
  559. package/dist/commands/vps/order.js +180 -23
  560. package/dist/commands/vps/order.js.map +1 -1
  561. package/dist/commands/vps/power.d.ts +1 -0
  562. package/dist/commands/vps/power.js +3 -2
  563. package/dist/commands/vps/power.js.map +1 -1
  564. package/dist/commands/vps/reinstall.d.ts +1 -0
  565. package/dist/commands/vps/reinstall.js +3 -2
  566. package/dist/commands/vps/reinstall.js.map +1 -1
  567. package/dist/commands/vps/resize.d.ts +1 -0
  568. package/dist/commands/vps/resize.js +37 -13
  569. package/dist/commands/vps/resize.js.map +1 -1
  570. package/dist/commands/vps/stats.d.ts +1 -0
  571. package/dist/commands/vps/stats.js +1 -0
  572. package/dist/commands/vps/stats.js.map +1 -1
  573. package/dist/commands/whoami.d.ts +6 -0
  574. package/dist/commands/whoami.js +8 -2
  575. package/dist/commands/whoami.js.map +1 -1
  576. package/dist/config/paths.d.ts +1 -1
  577. package/dist/config/paths.js +6 -1
  578. package/dist/config/paths.js.map +1 -1
  579. package/dist/config/store.d.ts +58 -0
  580. package/dist/config/store.js +84 -2
  581. package/dist/config/store.js.map +1 -1
  582. package/dist/functions-support/credits.d.ts +64 -0
  583. package/dist/functions-support/credits.js +181 -0
  584. package/dist/functions-support/credits.js.map +1 -0
  585. package/dist/functions-support/cron.d.ts +17 -0
  586. package/dist/functions-support/cron.js +99 -0
  587. package/dist/functions-support/cron.js.map +1 -0
  588. package/dist/functions-support/env.d.ts +23 -0
  589. package/dist/functions-support/env.js +44 -0
  590. package/dist/functions-support/env.js.map +1 -0
  591. package/dist/functions-support/link.d.ts +25 -0
  592. package/dist/functions-support/link.js +51 -0
  593. package/dist/functions-support/link.js.map +1 -0
  594. package/dist/functions-support/poll.d.ts +40 -0
  595. package/dist/functions-support/poll.js +109 -0
  596. package/dist/functions-support/poll.js.map +1 -0
  597. package/dist/functions-support/resolve.d.ts +3 -0
  598. package/dist/functions-support/resolve.js +31 -0
  599. package/dist/functions-support/resolve.js.map +1 -0
  600. package/dist/functions-support/runtime.d.ts +30 -0
  601. package/dist/functions-support/runtime.js +52 -0
  602. package/dist/functions-support/runtime.js.map +1 -0
  603. package/dist/functions-support/source.d.ts +92 -0
  604. package/dist/functions-support/source.js +343 -0
  605. package/dist/functions-support/source.js.map +1 -0
  606. package/dist/help/help-filter.d.ts +10 -0
  607. package/dist/help/help-filter.js +9 -0
  608. package/dist/help/help-filter.js.map +1 -0
  609. package/dist/help/scope-aware-help.d.ts +30 -0
  610. package/dist/help/scope-aware-help.js +80 -0
  611. package/dist/help/scope-aware-help.js.map +1 -0
  612. package/dist/tui/App.js +11 -26
  613. package/dist/tui/App.js.map +1 -1
  614. package/dist/tui/components/Menu.d.ts +3 -1
  615. package/dist/tui/components/Menu.js +7 -3
  616. package/dist/tui/components/Menu.js.map +1 -1
  617. package/dist/tui/components/NumberInput.js +1 -1
  618. package/dist/tui/components/Sparkline.js +1 -1
  619. package/dist/tui/router.d.ts +1 -1
  620. package/dist/tui/router.js.map +1 -1
  621. package/dist/tui/screens/Billing.js +66 -14
  622. package/dist/tui/screens/Billing.js.map +1 -1
  623. package/dist/tui/screens/Dashboard.js +8 -7
  624. package/dist/tui/screens/Dashboard.js.map +1 -1
  625. package/dist/tui/screens/Deploy.d.ts +2 -0
  626. package/dist/tui/screens/Deploy.js +912 -0
  627. package/dist/tui/screens/Deploy.js.map +1 -0
  628. package/dist/tui/screens/Order.js +385 -52
  629. package/dist/tui/screens/Order.js.map +1 -1
  630. package/dist/tui/screens/Resources.js +277 -35
  631. package/dist/tui/screens/Resources.js.map +1 -1
  632. package/dist/tui/screens/Tickets.js +47 -26
  633. package/dist/tui/screens/Tickets.js.map +1 -1
  634. package/dist/tui/screens/deployPreset.d.ts +20 -0
  635. package/dist/tui/screens/deployPreset.js +11 -0
  636. package/dist/tui/screens/deployPreset.js.map +1 -0
  637. package/dist/tui/screens/resources/AppDetail.d.ts +7 -0
  638. package/dist/tui/screens/resources/AppDetail.js +810 -0
  639. package/dist/tui/screens/resources/AppDetail.js.map +1 -0
  640. package/dist/tui/screens/resources/FunctionDetail.d.ts +7 -0
  641. package/dist/tui/screens/resources/FunctionDetail.js +751 -0
  642. package/dist/tui/screens/resources/FunctionDetail.js.map +1 -0
  643. package/dist/ui/attach.d.ts +15 -0
  644. package/dist/ui/attach.js +63 -0
  645. package/dist/ui/attach.js.map +1 -0
  646. package/dist/ui/baremetal-resolve.d.ts +10 -0
  647. package/dist/ui/baremetal-resolve.js +50 -0
  648. package/dist/ui/baremetal-resolve.js.map +1 -0
  649. package/dist/ui/confirm.js +1 -1
  650. package/dist/ui/confirm.js.map +1 -1
  651. package/dist/ui/cycle.d.ts +66 -0
  652. package/dist/ui/cycle.js +96 -0
  653. package/dist/ui/cycle.js.map +1 -0
  654. package/dist/ui/deploy-ui.d.ts +75 -0
  655. package/dist/ui/deploy-ui.js +243 -0
  656. package/dist/ui/deploy-ui.js.map +1 -0
  657. package/dist/ui/order-result.d.ts +4 -0
  658. package/dist/ui/order-result.js +32 -0
  659. package/dist/ui/order-result.js.map +1 -0
  660. package/dist/ui/payment-gate.d.ts +26 -0
  661. package/dist/ui/payment-gate.js +70 -0
  662. package/dist/ui/payment-gate.js.map +1 -0
  663. package/dist/ui/payment.js +10 -3
  664. package/dist/ui/payment.js.map +1 -1
  665. package/dist/ui/portal.d.ts +1 -1
  666. package/dist/ui/portal.js +7 -2
  667. package/dist/ui/portal.js.map +1 -1
  668. package/dist/ui/project-resolve.d.ts +25 -0
  669. package/dist/ui/project-resolve.js +31 -0
  670. package/dist/ui/project-resolve.js.map +1 -0
  671. package/dist/ui/render-mode.d.ts +5 -0
  672. package/dist/ui/render-mode.js +1 -1
  673. package/dist/ui/render-mode.js.map +1 -1
  674. package/dist/ui/resource-detail.js +0 -3
  675. package/dist/ui/resource-detail.js.map +1 -1
  676. package/dist/ui/resource-resolve.d.ts +9 -2
  677. package/dist/ui/resource-resolve.js +11 -4
  678. package/dist/ui/resource-resolve.js.map +1 -1
  679. package/dist/ui/spinner.d.ts +10 -1
  680. package/dist/ui/spinner.js +12 -3
  681. package/dist/ui/spinner.js.map +1 -1
  682. package/dist/ui/table.d.ts +7 -0
  683. package/dist/ui/table.js +11 -0
  684. package/dist/ui/table.js.map +1 -1
  685. package/dist/ui/tax.d.ts +10 -0
  686. package/dist/ui/tax.js +31 -0
  687. package/dist/ui/tax.js.map +1 -0
  688. package/dist/ui/ticket-resolve.d.ts +9 -1
  689. package/dist/ui/ticket-resolve.js +13 -2
  690. package/dist/ui/ticket-resolve.js.map +1 -1
  691. package/dist/ui/volume-resolve.js +4 -1
  692. package/dist/ui/volume-resolve.js.map +1 -1
  693. package/dist/ui/wait.d.ts +4 -0
  694. package/dist/ui/wait.js +7 -2
  695. package/dist/ui/wait.js.map +1 -1
  696. package/dist/ui/wizard.d.ts +2 -1
  697. package/dist/ui/wizard.js +1 -1
  698. package/dist/ui/wizard.js.map +1 -1
  699. package/dist/version-check-bin.d.ts +35 -0
  700. package/dist/version-check-bin.js +123 -0
  701. package/dist/version-check-bin.js.map +1 -0
  702. package/dist/version-check.d.ts +44 -0
  703. package/dist/version-check.js +153 -0
  704. package/dist/version-check.js.map +1 -0
  705. package/package.json +59 -4
@@ -0,0 +1,34 @@
1
+ import { BaseCommand } from "../../base/command.js";
2
+ import type { BaremetalCatalogOffer, BaremetalOrderSpec, PreviewOrderOut } from "../../api/types.js";
3
+ export declare function buildNoStockLines(apiBaseUrl: string): string[];
4
+ export declare function buildOrderSpecFromFlags(flags: {
5
+ offering: string;
6
+ project?: string;
7
+ hostname: string;
8
+ "install-profile"?: string;
9
+ "ssh-key"?: string;
10
+ "ssh-public-key"?: string;
11
+ }): BaremetalOrderSpec;
12
+ export declare function buildTaxedTotalRows(preview: PreviewOrderOut | null, netFirstInvoice: number): [string, string][];
13
+ export default class BaremetalOrder extends BaseCommand {
14
+ static description: string;
15
+ static apiKeyScope: string;
16
+ static examples: string[];
17
+ static flags: {
18
+ gpu: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ offering: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ hostname: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ "install-profile": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ "ssh-key": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ "ssh-public-key": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ "payment-method": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ "apply-credits": import("@oclif/core/interfaces").BooleanFlag<boolean>;
27
+ "no-interactive": import("@oclif/core/interfaces").BooleanFlag<boolean>;
28
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
29
+ };
30
+ run(): Promise<void>;
31
+ private printNoStock;
32
+ private runWizard;
33
+ }
34
+ export declare function isGpuOffer(o: BaremetalCatalogOffer): boolean;
@@ -0,0 +1,394 @@
1
+ import { Flags } from "@oclif/core";
2
+ import open from "open";
3
+ import { BaseCommand } from "../../base/command.js";
4
+ import { confirmAction, isInteractive, panel, pickFromCatalog, promptString, summary, } from "../../ui/wizard.js";
5
+ import { statusColor } from "../../ui/glyphs.js";
6
+ import { yesRequiredMessage } from "../../ui/confirm.js";
7
+ import { pickPayment } from "../../ui/payment.js";
8
+ import { shortId } from "../../ui/table.js";
9
+ import { resolveOrderWizardProjects } from "../../ui/project-resolve.js";
10
+ import { portalUrl } from "../../ui/portal.js";
11
+ // Pure message-building for the no-stock path, exported so tests can assert
12
+ // on the ACTUAL printed contact-support text (mirrors the web UI's
13
+ // BaremetalCatalog.tsx CTA verbatim) without driving oclif's run()
14
+ // lifecycle. No network I/O — apiBaseUrl is passed in, not fetched here.
15
+ export function buildNoStockLines(apiBaseUrl) {
16
+ const supportUrl = portalUrl(apiBaseUrl, "/support", {
17
+ new: "1",
18
+ dept: "sales",
19
+ subject: "Custom bare metal inquiry",
20
+ });
21
+ return [
22
+ "No bare metal offerings are in stock right now.",
23
+ "",
24
+ "Need a custom bare metal build? Contact us:",
25
+ ` ${supportUrl}`,
26
+ ' or: synteq ticket create --subject "Custom bare metal inquiry" --department sales --message "..."',
27
+ ];
28
+ }
29
+ // Pure spec construction for the flagged (non-interactive) in-stock path —
30
+ // exactly what BaremetalOrder.run()'s `else` branch builds, extracted so
31
+ // tests can assert the exact key set POSTed to /orders (the backend 422s
32
+ // any key outside {offering_id, project_id, hostname, install_mode,
33
+ // install_profile, ssh_key_id|ssh_public_key, storage, billing_cycle})
34
+ // without needing to drive prompts.
35
+ export function buildOrderSpecFromFlags(flags) {
36
+ const profile = flags["install-profile"];
37
+ const spec = {
38
+ offering_id: flags.offering,
39
+ project_id: flags.project ?? "",
40
+ hostname: flags.hostname,
41
+ install_mode: profile ? "profile" : "none",
42
+ };
43
+ if (profile)
44
+ spec.install_profile = profile;
45
+ // Exactly one of ssh_key_id / ssh_public_key — undefined keys must be
46
+ // OMITTED (not set to `undefined`) so a naive `Object.keys()` check on
47
+ // the wire body doesn't see a phantom key the backend would reject.
48
+ if (flags["ssh-key"])
49
+ spec.ssh_key_id = flags["ssh-key"];
50
+ if (flags["ssh-public-key"])
51
+ spec.ssh_public_key = flags["ssh-public-key"];
52
+ return spec;
53
+ }
54
+ // Taxed-total rows for the wizard's confirm summary — pure, exported for
55
+ // tests. The house rule (PR #107): a surface never confirms money that
56
+ // differs from the charge. The wizard therefore quotes the first invoice
57
+ // through POST /orders/preview (the same quoting seam the create-time mint
58
+ // uses) and shows Subtotal / Tax / Total before `confirmAction`. On a
59
+ // degraded quote (Numeral down / rate-limited / preview failed) the total
60
+ // is NOT knowable, so the net figure is printed with "+ tax" plus the same
61
+ // "estimate unavailable — final total shown at invoice" caption the
62
+ // vps/storage order wizards print — never a confident number that may be
63
+ // smaller than the charge.
64
+ export function buildTaxedTotalRows(preview, netFirstInvoice) {
65
+ const taxLabel = preview?.tax_label ?? "Tax";
66
+ const degradedRows = [
67
+ ["Total (first invoice)", `$${netFirstInvoice.toFixed(2)} + tax`],
68
+ ["Tax estimate", `${taxLabel} estimate unavailable — final total shown at invoice`],
69
+ ];
70
+ if (!preview || preview.estimate_degraded)
71
+ return degradedRows;
72
+ const total = Number(preview.total);
73
+ const taxTotal = Number(preview.tax_total);
74
+ if (!Number.isFinite(total))
75
+ return degradedRows;
76
+ if (taxTotal !== 0) {
77
+ return [
78
+ ["Subtotal (first invoice)", `$${Number(preview.subtotal).toFixed(2)}`],
79
+ [taxLabel, `$${taxTotal.toFixed(2)}`],
80
+ ["Total (first invoice)", `$${total.toFixed(2)}`],
81
+ ];
82
+ }
83
+ return [["Total (first invoice)", `$${total.toFixed(2)}`]];
84
+ }
85
+ export default class BaremetalOrder extends BaseCommand {
86
+ static description = [
87
+ "Order a bare metal (physical, ILA-managed) server.",
88
+ "",
89
+ "Bare metal is a build-to-order product: most of the time there is no",
90
+ "self-serve offering in stock, and this command mirrors the web UI by",
91
+ "printing a contact-support pointer and exiting cleanly rather than",
92
+ "faking an order path. When offerings ARE in stock (--gpu filters to",
93
+ "GPU-equipped machines, matching the catalog's kind split), it runs the",
94
+ "same interactive/flagged order flow as `vps order` — offering pick,",
95
+ "project, hostname, install profile, SSH key, payment.",
96
+ ].join("\n");
97
+ static apiKeyScope = "write:orders";
98
+ static examples = [
99
+ "<%= config.bin %> baremetal order # checks stock; contact-support if none",
100
+ "<%= config.bin %> baremetal order --gpu # GPU-equipped machines only",
101
+ "<%= config.bin %> baremetal order --offering <id> --project <id> --hostname web-01 --install-profile ubuntu-22.04 --payment-method <id>",
102
+ "<%= config.bin %> baremetal order --offering <id> --hostname db-01 --ssh-key <id> --apply-credits --yes -o json # no --install-profile = hand-off with no OS",
103
+ ];
104
+ static flags = {
105
+ gpu: Flags.boolean({ description: "Only show GPU-equipped offerings (the catalog's gpumetal rows)." }),
106
+ project: Flags.string({ description: "Project id to bill against. Defaults to the active project (or, in the wizard, a prompt)." }),
107
+ offering: Flags.string({ description: "Offering id from the bare metal catalog (see -o json output of this command with no other flags, or the portal)." }),
108
+ hostname: Flags.string({ description: "Hostname for the new server (1..253 chars, valid DNS labels)." }),
109
+ "install-profile": Flags.string({ description: "Install profile id (the OS to install). Omit to hand the server off with no OS — you install your own from the console." }),
110
+ "ssh-key": Flags.string({ description: "Saved SSH key id to authorise on the new install. Exactly one of --ssh-key / --ssh-public-key." }),
111
+ "ssh-public-key": Flags.string({ description: "Raw OpenSSH public key string. Exactly one of --ssh-key / --ssh-public-key." }),
112
+ "payment-method": Flags.string({ description: "Saved payment method id." }),
113
+ "apply-credits": Flags.boolean({ description: "Apply team credit balance first." }),
114
+ "no-interactive": Flags.boolean({ description: "Skip the wizard; error if required flags are missing." }),
115
+ yes: Flags.boolean({
116
+ char: "y",
117
+ description: "Skip the confirmation prompt. Required when stdout is not a TTY.",
118
+ }),
119
+ };
120
+ async run() {
121
+ await this.initClients();
122
+ const { flags } = await this.parse(BaremetalOrder);
123
+ const wantInteractive = isInteractive() && this.outputFormat === "table" && !flags["no-interactive"];
124
+ try {
125
+ const catalog = await this.clients.api.baremetal.catalog();
126
+ const allOffers = catalog.groups.flatMap((g) => g.offers);
127
+ if (allOffers.length === 0) {
128
+ this.emit({ in_stock: false, groups: [] }, () => {
129
+ this.printNoStock();
130
+ });
131
+ return;
132
+ }
133
+ // The public catalog doesn't itself split GPU vs plain — that split
134
+ // lives on the generic /orders/catalog projection (kind "gpumetal" vs
135
+ // "baremetal", by whether the offering's hardware reports a GPU).
136
+ // Mirror it here from each offer's own hardware/capabilities payload
137
+ // rather than a second network round-trip.
138
+ const offers = flags.gpu ? allOffers.filter(isGpuOffer) : allOffers;
139
+ if (offers.length === 0) {
140
+ this.emit({ in_stock: false, groups: [] }, () => {
141
+ this.log("No GPU-equipped bare metal offerings in stock right now.");
142
+ this.log("");
143
+ this.printNoStock();
144
+ });
145
+ return;
146
+ }
147
+ const missingCore = !flags.offering || !flags.hostname;
148
+ const missingPayment = !flags["payment-method"] && !flags["apply-credits"];
149
+ let spec;
150
+ let payment;
151
+ let projectId;
152
+ let ranWizard = false;
153
+ if ((missingCore || missingPayment) && wantInteractive) {
154
+ const w = await this.runWizard(flags, offers);
155
+ spec = w.spec;
156
+ payment = w.payment;
157
+ projectId = w.projectId;
158
+ ranWizard = true;
159
+ }
160
+ else {
161
+ if (missingCore) {
162
+ this.error("Provide --offering and --hostname (or run on a TTY for the wizard).", { exit: 1 });
163
+ }
164
+ const offer = offers.find((o) => o.offering_id === flags.offering);
165
+ if (!offer) {
166
+ this.error(`Offering "${flags.offering}" is not currently in stock. Run \`synteq baremetal order -o json\` with no other flags to see current offering ids.`, { exit: 1 });
167
+ }
168
+ if (!flags["ssh-key"] && !flags["ssh-public-key"]) {
169
+ this.error("Provide --ssh-key or --ssh-public-key.", { exit: 1 });
170
+ }
171
+ if (missingPayment) {
172
+ this.error("Provide --payment-method or --apply-credits.", { exit: 1 });
173
+ }
174
+ payment = await pickPayment({
175
+ api: this.clients.api,
176
+ tokens: this.clients.tokens,
177
+ config: this.clients.config,
178
+ flow: "virtualized_order",
179
+ estimatedCost: Number(offer.monthly_price),
180
+ prefill: {
181
+ paymentMethodId: flags["payment-method"],
182
+ applyCredits: flags["apply-credits"],
183
+ },
184
+ noInteractive: true,
185
+ log: (msg) => this.log(msg),
186
+ });
187
+ projectId = flags.project;
188
+ spec = buildOrderSpecFromFlags({
189
+ offering: offer.offering_id,
190
+ project: projectId,
191
+ hostname: flags.hostname,
192
+ "install-profile": flags["install-profile"],
193
+ "ssh-key": flags["ssh-key"],
194
+ "ssh-public-key": flags["ssh-public-key"],
195
+ });
196
+ }
197
+ const genericPayment = payment.payment_kind === "bitpay"
198
+ ? { method: "bitpay", apply_credits: payment.apply_credits }
199
+ : payment.payment_method_id
200
+ ? {
201
+ method: "saved",
202
+ payment_method_id: payment.payment_method_id,
203
+ apply_credits: payment.apply_credits,
204
+ }
205
+ : payment.apply_credits
206
+ ? { method: "credit_only" }
207
+ : { method: "invoice_only" };
208
+ // A charge needs an explicit go-ahead. The wizard shows a summary and
209
+ // confirms on its own; when it is skipped — not a terminal, -o json,
210
+ // --no-interactive, or every detail passed as a flag — nothing confirms,
211
+ // so require --yes before the order POSTs. (2026-10-09)
212
+ if (!flags.yes && !ranWizard) {
213
+ const cmd = (this.id ?? "baremetal:order").replaceAll(":", " ");
214
+ this.error(isInteractive()
215
+ ? `\`${cmd}\` (charges a payment method) needs confirmation — re-run with --yes.`
216
+ : yesRequiredMessage(`\`${cmd}\` (charges a payment method)`), { exit: 1 });
217
+ }
218
+ const result = await this.clients.api.baremetal.order(spec, genericPayment, projectId);
219
+ this.emit(result, () => {
220
+ this.log(panel("Bare metal order submitted", [
221
+ ["Status", statusColor(result.status)],
222
+ ["Order id", result.order_id],
223
+ ["Invoice id", result.invoice_id],
224
+ ["Charge id", result.charge_id],
225
+ ["Credits applied", result.credits_applied],
226
+ ["Checkout URL", result.checkout_url],
227
+ ["Failure reason", result.failure_reason],
228
+ ]));
229
+ if (result.order_id) {
230
+ this.log("Provisioning runs in the background — check `synteq baremetal list` once payment settles.");
231
+ }
232
+ });
233
+ if (result.checkout_url && process.stdout.isTTY) {
234
+ try {
235
+ await open(result.checkout_url);
236
+ }
237
+ catch { }
238
+ }
239
+ }
240
+ catch (err) {
241
+ this.fail(err);
242
+ }
243
+ }
244
+ printNoStock() {
245
+ // Mirrors the web UI's build-to-order CTA exactly (BaremetalCatalog.tsx
246
+ // "Need a custom bare metal build? Contact us" → /support?new=1&dept=sales).
247
+ const apiBase = this.clients.config.get().api_base_url;
248
+ for (const line of buildNoStockLines(apiBase))
249
+ this.log(line);
250
+ }
251
+ async runWizard(flags, offers) {
252
+ const { projects, team } = await resolveOrderWizardProjects(this.clients.api, this.clients.authMode);
253
+ let activeTeam = team;
254
+ if (!activeTeam) {
255
+ const teams = await this.clients.api.auth.teams().catch(() => []);
256
+ const tokens = await this.clients.tokens.read();
257
+ const activeTeamId = this.clients.config.get().active_team_id ?? tokens?.team_id ?? undefined;
258
+ activeTeam = teams.find((t) => t.id === activeTeamId);
259
+ }
260
+ if (activeTeam) {
261
+ this.log("");
262
+ this.log(`Team: ${activeTeam.name} (${activeTeam.id.slice(0, 8)})`);
263
+ }
264
+ let projectId = flags.project;
265
+ if (!projectId) {
266
+ if (projects.length === 0) {
267
+ this.error(this.clients.authMode === "api_key"
268
+ ? "This API key cannot list any projects — run `synteq login` or pass --project <id>."
269
+ : "No projects on this team. Create one in the portal first.", { exit: 1 });
270
+ }
271
+ projectId = await pickFromCatalog("Pick a project to bill against", projects.map((p) => ({ value: p.id, name: p.name, description: p.description ?? undefined })), { defaultValue: projects.find((p) => p.is_default)?.id });
272
+ }
273
+ let offeringId = flags.offering;
274
+ if (!offeringId) {
275
+ offeringId = await pickFromCatalog("Pick a server", offers.map((o) => ({
276
+ value: o.offering_id,
277
+ name: `${o.title ?? "Bare metal server"} $${Number(o.monthly_price).toFixed(2)}/mo`,
278
+ description: [o.location_city, o.location_country].filter(Boolean).join(", ") || undefined,
279
+ })));
280
+ }
281
+ const offer = offers.find((o) => o.offering_id === offeringId);
282
+ const hostname = flags.hostname ??
283
+ (await promptString("Hostname", {
284
+ validate: (s) => (s.length <= 253 ? true : "Max 253 characters."),
285
+ }));
286
+ let installProfile = flags["install-profile"];
287
+ if (!installProfile) {
288
+ const { profiles } = await this.clients.api.baremetal.installProfilesForOffering(offer.offering_id);
289
+ const choice = await pickFromCatalog("Installation", [
290
+ {
291
+ value: "__none__",
292
+ name: "No OS — hand the server off as-is",
293
+ description: "IPs, console and power; install your own from the console.",
294
+ },
295
+ ...profiles.map((p) => ({
296
+ value: p.id,
297
+ name: p.name ?? p.id,
298
+ description: [p.os_name, p.os_version].filter(Boolean).join(" ") || undefined,
299
+ })),
300
+ ]);
301
+ installProfile = choice === "__none__" ? undefined : choice;
302
+ }
303
+ let sshKeyId = flags["ssh-key"];
304
+ let sshPublicKey = flags["ssh-public-key"];
305
+ if (!sshKeyId && !sshPublicKey) {
306
+ const keys = await this.clients.api.sshKeys.list().catch(() => []);
307
+ const choices = [
308
+ ...keys.map((k) => ({ value: k.id, name: k.name })),
309
+ { value: "__paste__", name: "(paste a public key instead)" },
310
+ ];
311
+ if (keys.length === 0) {
312
+ sshPublicKey = await promptString("Paste an OpenSSH public key");
313
+ }
314
+ else {
315
+ const pick = await pickFromCatalog("Pick an SSH key to authorise", choices);
316
+ if (pick === "__paste__") {
317
+ sshPublicKey = await promptString("Paste an OpenSSH public key");
318
+ }
319
+ else {
320
+ sshKeyId = pick;
321
+ }
322
+ }
323
+ }
324
+ const estimatedCost = Number(offer.monthly_price) || 0;
325
+ const setupFee = Number(offer.setup_fee) || 0;
326
+ const payment = await pickPayment({
327
+ api: this.clients.api,
328
+ tokens: this.clients.tokens,
329
+ config: this.clients.config,
330
+ flow: "virtualized_order",
331
+ estimatedCost,
332
+ prefill: {
333
+ paymentMethodId: flags["payment-method"],
334
+ applyCredits: Boolean(flags["apply-credits"]),
335
+ },
336
+ log: (msg) => this.log(msg),
337
+ });
338
+ // Built BEFORE the summary so the tax preview prices the exact spec the
339
+ // POST /orders create will carry.
340
+ const spec = buildOrderSpecFromFlags({
341
+ offering: offer.offering_id,
342
+ project: projectId,
343
+ hostname,
344
+ "install-profile": installProfile,
345
+ "ssh-key": sshKeyId,
346
+ "ssh-public-key": sshPublicKey,
347
+ });
348
+ // Tax-inclusive first-invoice preview (POST /orders/preview, the same
349
+ // seam the web checkout and the create-time mint quote through) —
350
+ // best-effort, mirrors vps/order.ts. A preview failure must never block
351
+ // ordering: it degrades to "net + tax" wording via buildTaxedTotalRows.
352
+ let taxPreview = null;
353
+ try {
354
+ taxPreview = await this.clients.api.orders.preview({
355
+ kind: "baremetal",
356
+ spec: spec,
357
+ quantity: 1,
358
+ });
359
+ }
360
+ catch {
361
+ taxPreview = null;
362
+ }
363
+ const lines = [
364
+ ["Team", activeTeam?.name],
365
+ ["Project", projects.find((p) => p.id === projectId)?.name ?? projectId],
366
+ ["Server", offer.title ?? shortId(offer.offering_id)],
367
+ ["Location", [offer.location_city, offer.location_country].filter(Boolean).join(", ") || undefined],
368
+ ["Hostname", hostname],
369
+ ["Install profile", installProfile ?? "None — hand off as-is"],
370
+ ["SSH", sshKeyId ? shortId(sshKeyId) : sshPublicKey ? "(pasted key)" : undefined],
371
+ ["Payment", payment.summary],
372
+ ["Monthly cost", `$${estimatedCost.toFixed(2)}/mo`],
373
+ ["Setup fee", offer.setup_fee ? `$${setupFee.toFixed(2)}` : undefined],
374
+ // The figure the confirm below actually charges: monthly + setup,
375
+ // with tax — never confirm money that differs from the charge.
376
+ ...buildTaxedTotalRows(taxPreview, estimatedCost + setupFee),
377
+ ];
378
+ this.log("");
379
+ this.log(summary("New bare metal server", lines));
380
+ this.log("");
381
+ if (!flags.yes) {
382
+ const go = await confirmAction("Submit order?", false);
383
+ if (!go)
384
+ this.error("Cancelled.", { exit: 1 });
385
+ }
386
+ return { spec, payment, projectId };
387
+ }
388
+ }
389
+ export function isGpuOffer(o) {
390
+ const caps = o.capabilities;
391
+ const hw = o.hardware;
392
+ return Boolean((caps?.gpu?.count ?? 0) > 0 || hw?.summary?.gpu);
393
+ }
394
+ //# sourceMappingURL=order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order.js","sourceRoot":"","sources":["../../../src/commands/baremetal/order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from "../../base/command.js";
2
+ import type { BaremetalPowerAction } from "../../api/types.js";
3
+ export declare const ACTION_MAP: Record<string, BaremetalPowerAction>;
4
+ export default class BaremetalPower extends BaseCommand {
5
+ static description: string;
6
+ static apiKeyScope: string;
7
+ static examples: string[];
8
+ static args: {
9
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
10
+ action: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
11
+ };
12
+ static flags: {
13
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ wait: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
@@ -0,0 +1,168 @@
1
+ import { Args, Flags } from "@oclif/core";
2
+ import { BaseCommand } from "../../base/command.js";
3
+ import { resolveBaremetalRef, labelFor } from "../../ui/baremetal-resolve.js";
4
+ import { waitFor } from "../../ui/wait.js";
5
+ import { ok } from "../../ui/glyphs.js";
6
+ import { confirmDestructive, yesRequiredMessage } from "../../ui/confirm.js";
7
+ import { isInteractive, panel } from "../../ui/wizard.js";
8
+ import { statusColor } from "../../ui/glyphs.js";
9
+ // ILA's customer-facing power vocabulary. Shutdown arrived with ILA 2026.8:
10
+ // "shutdown"/"off" is the graceful ACPI halt (graceful_off); "hard-off" is
11
+ // the BMC power cut (off). The graceful one is the default spelling so a
12
+ // user typing the obvious word never gets the destructive variant by
13
+ // surprise. "restart" is the CLI's spelling of ILA's graceful_restart.
14
+ export const ACTION_MAP = {
15
+ on: "on",
16
+ start: "on",
17
+ off: "graceful_off",
18
+ shutdown: "graceful_off",
19
+ "graceful-off": "graceful_off",
20
+ graceful_off: "graceful_off",
21
+ "hard-off": "off",
22
+ "power-off": "off",
23
+ restart: "graceful_restart",
24
+ "graceful-restart": "graceful_restart",
25
+ graceful_restart: "graceful_restart",
26
+ cycle: "cycle",
27
+ "power-cycle": "cycle",
28
+ reset: "reset",
29
+ };
30
+ const CONFIRM_VERB = {
31
+ on: "Power on",
32
+ graceful_off: "Shut down",
33
+ off: "Hard power off (no OS shutdown)",
34
+ graceful_restart: "Restart",
35
+ cycle: "Power-cycle",
36
+ reset: "Reset",
37
+ };
38
+ export default class BaremetalPower extends BaseCommand {
39
+ static description = [
40
+ "Power a bare metal server on, shut it down, restart, cycle, or reset. With no action, shows live power state.",
41
+ "",
42
+ "`shutdown`/`off` is a graceful OS halt; `hard-off` cuts power at the BMC.",
43
+ "Actions other than `on` are disruptive and ask for confirmation on a TTY",
44
+ "(default No). When stdout is piped, pass --yes or the command exits 1",
45
+ "without acting.",
46
+ ].join("\n");
47
+ static apiKeyScope = "write:baremetal:power";
48
+ static examples = [
49
+ "<%= config.bin %> baremetal power 019e... # show live power state (BMC)",
50
+ "<%= config.bin %> baremetal power 019e... on",
51
+ "<%= config.bin %> baremetal power 019e... restart --yes # graceful restart, no prompt",
52
+ "<%= config.bin %> baremetal power 019e... cycle --yes --wait # hard cycle; block until the job finishes",
53
+ "<%= config.bin %> baremetal power 019e... reset --yes -o json",
54
+ ];
55
+ static args = {
56
+ id: Args.string({
57
+ description: "Server id (full or the short id from `baremetal list`), hostname, reference, or IP.",
58
+ required: true,
59
+ }),
60
+ action: Args.string({
61
+ description: "on | shutdown | hard-off | restart | cycle | reset. Omit to just show live power state.",
62
+ }),
63
+ };
64
+ static flags = {
65
+ yes: Flags.boolean({
66
+ char: "y",
67
+ description: "Skip the confirmation prompt for disruptive actions (restart, cycle, reset). Required when stdout is not a TTY. `on` never prompts.",
68
+ }),
69
+ wait: Flags.boolean({
70
+ description: "Poll the ILA job until it reaches a terminal state (Completed/Failed/Cancelled/Replaced/Timed out). Exit 3 on timeout, or when the job ended without doing its work (failed, cancelled, or replaced by a newer operation).",
71
+ }),
72
+ timeout: Flags.integer({
73
+ description: "Seconds to wait before giving up (default 300). Only with --wait.",
74
+ default: 300,
75
+ min: 5,
76
+ }),
77
+ };
78
+ async run() {
79
+ await this.initClients();
80
+ const { args, flags } = await this.parse(BaremetalPower);
81
+ try {
82
+ const server = await resolveBaremetalRef(this.clients.api, args.id);
83
+ if (!args.action) {
84
+ const state = await this.clients.api.baremetal.powerState(server.id);
85
+ this.emit(state, () => {
86
+ this.log(panel(labelFor(server), [
87
+ ["Power state", state.power_state ? statusColor(state.power_state) : "unknown"],
88
+ [
89
+ "BMC reachable",
90
+ state.bmc_reachable === null
91
+ ? "unknown"
92
+ : state.bmc_reachable
93
+ ? statusColor("reachable")
94
+ : statusColor("unreachable"),
95
+ ],
96
+ ["Active job", state.active_job_id ?? "(none)"],
97
+ ]));
98
+ });
99
+ return;
100
+ }
101
+ const action = ACTION_MAP[args.action.toLowerCase()];
102
+ if (!action) {
103
+ this.error(`Unknown action "${args.action}". Use on, restart, cycle, or reset.`, {
104
+ exit: 1,
105
+ });
106
+ }
107
+ if (action !== "on" && !flags.yes) {
108
+ if (!(isInteractive() && this.outputFormat === "table")) {
109
+ const cmd = (this.id ?? "baremetal power").replaceAll(":", " ");
110
+ this.error(yesRequiredMessage(`\`${cmd} ${args.action}\``), { exit: 1 });
111
+ }
112
+ const outcome = await confirmDestructive({
113
+ message: `${CONFIRM_VERB[action]} ${labelFor(server)}?`,
114
+ });
115
+ if (outcome !== "confirmed") {
116
+ this.log("Aborted - no power action sent.");
117
+ return;
118
+ }
119
+ }
120
+ const result = await this.clients.api.baremetal.power(server.id, action);
121
+ if (!flags.wait) {
122
+ this.emit(result, () => {
123
+ this.log(`Job ${result.job_id ?? "(unknown)"} (${action}) — ${result.state ?? "queued"}`);
124
+ });
125
+ return;
126
+ }
127
+ if (this.outputFormat === "table") {
128
+ this.log(`Job ${result.job_id ?? "(unknown)"} (${action}) — ${result.state ?? "queued"}`);
129
+ }
130
+ if (!result.job_id) {
131
+ this.error("No job id returned — cannot poll with --wait.", { exit: 3 });
132
+ }
133
+ const onStatus = this.outputFormat === "json"
134
+ ? (line) => process.stderr.write(line + "\n")
135
+ : (line) => this.log(` ${line}`);
136
+ const classify = (jobs) => {
137
+ const job = jobs.jobs.find((j) => j.id === result.job_id);
138
+ if (!job)
139
+ return { state: "pending", label: "waiting for job to appear" };
140
+ if (job.failed) {
141
+ return { state: "failure", label: job.state ?? "failed", reason: `Job ended in state "${job.state}"` };
142
+ }
143
+ if (!job.active)
144
+ return { state: "success", label: job.state ?? "completed" };
145
+ return { state: "pending", label: job.state ?? "running" };
146
+ };
147
+ const wr = await waitFor({
148
+ timeoutSeconds: flags.timeout,
149
+ poll: () => this.clients.api.baremetal.jobs(server.id),
150
+ classify,
151
+ onStatus,
152
+ });
153
+ if (wr.outcome === "timeout") {
154
+ this.error(`Timed out after ${flags.timeout}s waiting for the ${action} job on ${labelFor(server)} (last status: ${wr.lastLabel ?? "unknown"}).`, { exit: 3 });
155
+ }
156
+ if (wr.outcome === "failure") {
157
+ this.error(wr.reason, { exit: 3 });
158
+ }
159
+ this.emit(wr.value, () => {
160
+ this.log(ok(`${labelFor(server)}: ${action} finished (${wr.elapsedSeconds}s).`));
161
+ });
162
+ }
163
+ catch (err) {
164
+ this.fail(err);
165
+ }
166
+ }
167
+ }
168
+ //# sourceMappingURL=power.js.map