@synteq/cli 0.2.0 → 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 (433) hide show
  1. package/dist/api/client.d.ts +362 -5
  2. package/dist/api/client.js +559 -44
  3. package/dist/api/client.js.map +1 -1
  4. package/dist/api/factory.js +5 -2
  5. package/dist/api/factory.js.map +1 -1
  6. package/dist/api/types.d.ts +892 -3
  7. package/dist/apps-support/deploy.d.ts +197 -0
  8. package/dist/apps-support/deploy.js +639 -0
  9. package/dist/apps-support/deploy.js.map +1 -0
  10. package/dist/apps-support/dotenv.d.ts +67 -0
  11. package/dist/apps-support/dotenv.js +136 -0
  12. package/dist/apps-support/dotenv.js.map +1 -0
  13. package/dist/apps-support/env-rollout.d.ts +18 -0
  14. package/dist/apps-support/env-rollout.js +52 -0
  15. package/dist/apps-support/env-rollout.js.map +1 -0
  16. package/dist/apps-support/git.d.ts +14 -0
  17. package/dist/apps-support/git.js +25 -0
  18. package/dist/apps-support/git.js.map +1 -0
  19. package/dist/apps-support/link.d.ts +25 -0
  20. package/dist/apps-support/link.js +39 -0
  21. package/dist/apps-support/link.js.map +1 -0
  22. package/dist/apps-support/log-stream.d.ts +25 -0
  23. package/dist/apps-support/log-stream.js +85 -0
  24. package/dist/apps-support/log-stream.js.map +1 -0
  25. package/dist/apps-support/paid-app.d.ts +64 -0
  26. package/dist/apps-support/paid-app.js +195 -0
  27. package/dist/apps-support/paid-app.js.map +1 -0
  28. package/dist/apps-support/plans.d.ts +44 -0
  29. package/dist/apps-support/plans.js +43 -0
  30. package/dist/apps-support/plans.js.map +1 -0
  31. package/dist/apps-support/resolve.d.ts +10 -0
  32. package/dist/apps-support/resolve.js +53 -0
  33. package/dist/apps-support/resolve.js.map +1 -0
  34. package/dist/apps-support/time.d.ts +20 -0
  35. package/dist/apps-support/time.js +82 -0
  36. package/dist/apps-support/time.js.map +1 -0
  37. package/dist/auth/scope.js +4 -0
  38. package/dist/auth/scope.js.map +1 -1
  39. package/dist/auth/tokens.d.ts +3 -0
  40. package/dist/auth/tokens.js +6 -4
  41. package/dist/auth/tokens.js.map +1 -1
  42. package/dist/base/command.d.ts +35 -0
  43. package/dist/base/command.js +87 -4
  44. package/dist/base/command.js.map +1 -1
  45. package/dist/commands/agents.d.ts +10 -0
  46. package/dist/commands/agents.js +53 -0
  47. package/dist/commands/agents.js.map +1 -0
  48. package/dist/commands/api.d.ts +0 -1
  49. package/dist/commands/api.js +6 -5
  50. package/dist/commands/api.js.map +1 -1
  51. package/dist/commands/app/deployment/list.d.ts +14 -0
  52. package/dist/commands/app/deployment/list.js +45 -0
  53. package/dist/commands/app/deployment/list.js.map +1 -0
  54. package/dist/commands/app/deployment/rollback.d.ts +18 -0
  55. package/dist/commands/app/deployment/rollback.js +57 -0
  56. package/dist/commands/app/deployment/rollback.js.map +1 -0
  57. package/dist/commands/app/deployment/show.d.ts +26 -0
  58. package/dist/commands/app/deployment/show.js +98 -0
  59. package/dist/commands/app/deployment/show.js.map +1 -0
  60. package/dist/commands/app/domain/add.d.ts +17 -0
  61. package/dist/commands/app/domain/add.js +59 -0
  62. package/dist/commands/app/domain/add.js.map +1 -0
  63. package/dist/commands/app/domain/list.d.ts +14 -0
  64. package/dist/commands/app/domain/list.js +42 -0
  65. package/dist/commands/app/domain/list.js.map +1 -0
  66. package/dist/commands/app/domain/remove.d.ts +16 -0
  67. package/dist/commands/app/domain/remove.js +51 -0
  68. package/dist/commands/app/domain/remove.js.map +1 -0
  69. package/dist/commands/app/domain/verify.d.ts +15 -0
  70. package/dist/commands/app/domain/verify.js +39 -0
  71. package/dist/commands/app/domain/verify.js.map +1 -0
  72. package/dist/commands/app/env/add.d.ts +22 -0
  73. package/dist/commands/app/env/add.js +103 -0
  74. package/dist/commands/app/env/add.js.map +1 -0
  75. package/dist/commands/app/env/list.d.ts +17 -0
  76. package/dist/commands/app/env/list.js +40 -0
  77. package/dist/commands/app/env/list.js.map +1 -0
  78. package/dist/commands/app/env/reveal.d.ts +17 -0
  79. package/dist/commands/app/env/reveal.js +40 -0
  80. package/dist/commands/app/env/reveal.js.map +1 -0
  81. package/dist/commands/app/env/rm.d.ts +16 -0
  82. package/dist/commands/app/env/rm.js +48 -0
  83. package/dist/commands/app/env/rm.js.map +1 -0
  84. package/dist/commands/app/health.d.ts +14 -0
  85. package/dist/commands/app/health.js +40 -0
  86. package/dist/commands/app/health.js.map +1 -0
  87. package/dist/commands/app/index.d.ts +6 -0
  88. package/dist/commands/app/index.js +7 -0
  89. package/dist/commands/app/index.js.map +1 -0
  90. package/dist/commands/app/link.d.ts +22 -0
  91. package/dist/commands/app/link.js +31 -0
  92. package/dist/commands/app/link.js.map +1 -0
  93. package/dist/commands/app/logs.d.ts +25 -0
  94. package/dist/commands/app/logs.js +121 -0
  95. package/dist/commands/app/logs.js.map +1 -0
  96. package/dist/commands/app/metrics.d.ts +21 -0
  97. package/dist/commands/app/metrics.js +123 -0
  98. package/dist/commands/app/metrics.js.map +1 -0
  99. package/dist/commands/app/plan/change.d.ts +18 -0
  100. package/dist/commands/app/plan/change.js +79 -0
  101. package/dist/commands/app/plan/change.js.map +1 -0
  102. package/dist/commands/app/plan/show.d.ts +14 -0
  103. package/dist/commands/app/plan/show.js +40 -0
  104. package/dist/commands/app/plan/show.js.map +1 -0
  105. package/dist/commands/app/settings/set.d.ts +25 -0
  106. package/dist/commands/app/settings/set.js +96 -0
  107. package/dist/commands/app/settings/set.js.map +1 -0
  108. package/dist/commands/app/settings/show.d.ts +14 -0
  109. package/dist/commands/app/settings/show.js +48 -0
  110. package/dist/commands/app/settings/show.js.map +1 -0
  111. package/dist/commands/app/unlink.d.ts +8 -0
  112. package/dist/commands/app/unlink.js +25 -0
  113. package/dist/commands/app/unlink.js.map +1 -0
  114. package/dist/commands/apps/create.d.ts +26 -0
  115. package/dist/commands/apps/create.js +91 -0
  116. package/dist/commands/apps/create.js.map +1 -0
  117. package/dist/commands/apps/list.d.ts +16 -0
  118. package/dist/commands/apps/list.js +54 -0
  119. package/dist/commands/apps/list.js.map +1 -0
  120. package/dist/commands/baremetal/activity.d.ts +14 -0
  121. package/dist/commands/baremetal/activity.js +53 -0
  122. package/dist/commands/baremetal/activity.js.map +1 -0
  123. package/dist/commands/baremetal/bandwidth.d.ts +10 -0
  124. package/dist/commands/baremetal/bandwidth.js +86 -0
  125. package/dist/commands/baremetal/bandwidth.js.map +1 -0
  126. package/dist/commands/baremetal/console.d.ts +20 -0
  127. package/dist/commands/baremetal/console.js +72 -0
  128. package/dist/commands/baremetal/console.js.map +1 -0
  129. package/dist/commands/baremetal/details.d.ts +11 -0
  130. package/dist/commands/baremetal/details.js +116 -0
  131. package/dist/commands/baremetal/details.js.map +1 -0
  132. package/dist/commands/baremetal/index.d.ts +5 -0
  133. package/dist/commands/baremetal/index.js +6 -0
  134. package/dist/commands/baremetal/index.js.map +1 -0
  135. package/dist/commands/baremetal/install-password.d.ts +14 -0
  136. package/dist/commands/baremetal/install-password.js +80 -0
  137. package/dist/commands/baremetal/install-password.js.map +1 -0
  138. package/dist/commands/baremetal/list.d.ts +11 -0
  139. package/dist/commands/baremetal/list.js +59 -0
  140. package/dist/commands/baremetal/list.js.map +1 -0
  141. package/dist/commands/baremetal/order.d.ts +34 -0
  142. package/dist/commands/baremetal/order.js +394 -0
  143. package/dist/commands/baremetal/order.js.map +1 -0
  144. package/dist/commands/baremetal/power.d.ts +18 -0
  145. package/dist/commands/baremetal/power.js +168 -0
  146. package/dist/commands/baremetal/power.js.map +1 -0
  147. package/dist/commands/baremetal/reinstall.d.ts +21 -0
  148. package/dist/commands/baremetal/reinstall.js +168 -0
  149. package/dist/commands/baremetal/reinstall.js.map +1 -0
  150. package/dist/commands/config/profile/add.d.ts +11 -0
  151. package/dist/commands/config/profile/add.js +51 -0
  152. package/dist/commands/config/profile/add.js.map +1 -0
  153. package/dist/commands/config/profile/list.d.ts +7 -0
  154. package/dist/commands/config/profile/list.js +29 -0
  155. package/dist/commands/config/profile/list.js.map +1 -0
  156. package/dist/commands/config/profile/remove.d.ts +11 -0
  157. package/dist/commands/config/profile/remove.js +35 -0
  158. package/dist/commands/config/profile/remove.js.map +1 -0
  159. package/dist/commands/config/profile/use.d.ts +10 -0
  160. package/dist/commands/config/profile/use.js +44 -0
  161. package/dist/commands/config/profile/use.js.map +1 -0
  162. package/dist/commands/config/show.js +4 -1
  163. package/dist/commands/config/show.js.map +1 -1
  164. package/dist/commands/credits/add.js +2 -2
  165. package/dist/commands/credits/add.js.map +1 -1
  166. package/dist/commands/credits/index.js +5 -1
  167. package/dist/commands/credits/index.js.map +1 -1
  168. package/dist/commands/deploy.d.ts +51 -0
  169. package/dist/commands/deploy.js +515 -0
  170. package/dist/commands/deploy.js.map +1 -0
  171. package/dist/commands/function/create.d.ts +29 -0
  172. package/dist/commands/function/create.js +113 -0
  173. package/dist/commands/function/create.js.map +1 -0
  174. package/dist/commands/function/credits/add.d.ts +29 -0
  175. package/dist/commands/function/credits/add.js +209 -0
  176. package/dist/commands/function/credits/add.js.map +1 -0
  177. package/dist/commands/function/credits/auto-reload.d.ts +27 -0
  178. package/dist/commands/function/credits/auto-reload.js +107 -0
  179. package/dist/commands/function/credits/auto-reload.js.map +1 -0
  180. package/dist/commands/function/credits/index.d.ts +22 -0
  181. package/dist/commands/function/credits/index.js +80 -0
  182. package/dist/commands/function/credits/index.js.map +1 -0
  183. package/dist/commands/function/cron/add.d.ts +19 -0
  184. package/dist/commands/function/cron/add.js +74 -0
  185. package/dist/commands/function/cron/add.js.map +1 -0
  186. package/dist/commands/function/cron/list.d.ts +12 -0
  187. package/dist/commands/function/cron/list.js +55 -0
  188. package/dist/commands/function/cron/list.js.map +1 -0
  189. package/dist/commands/function/cron/rm.d.ts +17 -0
  190. package/dist/commands/function/cron/rm.js +73 -0
  191. package/dist/commands/function/cron/rm.js.map +1 -0
  192. package/dist/commands/function/cron/run.d.ts +16 -0
  193. package/dist/commands/function/cron/run.js +59 -0
  194. package/dist/commands/function/cron/run.js.map +1 -0
  195. package/dist/commands/function/cron/update.d.ts +21 -0
  196. package/dist/commands/function/cron/update.js +87 -0
  197. package/dist/commands/function/cron/update.js.map +1 -0
  198. package/dist/commands/function/delete.d.ts +23 -0
  199. package/dist/commands/function/delete.js +90 -0
  200. package/dist/commands/function/delete.js.map +1 -0
  201. package/dist/commands/function/deploy.d.ts +64 -0
  202. package/dist/commands/function/deploy.js +608 -0
  203. package/dist/commands/function/deploy.js.map +1 -0
  204. package/dist/commands/function/env/list.d.ts +12 -0
  205. package/dist/commands/function/env/list.js +46 -0
  206. package/dist/commands/function/env/list.js.map +1 -0
  207. package/dist/commands/function/env/reveal.d.ts +21 -0
  208. package/dist/commands/function/env/reveal.js +54 -0
  209. package/dist/commands/function/env/reveal.js.map +1 -0
  210. package/dist/commands/function/env/rm.d.ts +17 -0
  211. package/dist/commands/function/env/rm.js +62 -0
  212. package/dist/commands/function/env/rm.js.map +1 -0
  213. package/dist/commands/function/env/set.d.ts +28 -0
  214. package/dist/commands/function/env/set.js +124 -0
  215. package/dist/commands/function/env/set.js.map +1 -0
  216. package/dist/commands/function/index.d.ts +14 -0
  217. package/dist/commands/function/index.js +11 -0
  218. package/dist/commands/function/index.js.map +1 -0
  219. package/dist/commands/function/init.d.ts +47 -0
  220. package/dist/commands/function/init.js +269 -0
  221. package/dist/commands/function/init.js.map +1 -0
  222. package/dist/commands/function/invoke.d.ts +29 -0
  223. package/dist/commands/function/invoke.js +138 -0
  224. package/dist/commands/function/invoke.js.map +1 -0
  225. package/dist/commands/function/link.d.ts +23 -0
  226. package/dist/commands/function/link.js +80 -0
  227. package/dist/commands/function/link.js.map +1 -0
  228. package/dist/commands/function/list.d.ts +16 -0
  229. package/dist/commands/function/list.js +55 -0
  230. package/dist/commands/function/list.js.map +1 -0
  231. package/dist/commands/function/logs.d.ts +29 -0
  232. package/dist/commands/function/logs.js +171 -0
  233. package/dist/commands/function/logs.js.map +1 -0
  234. package/dist/commands/function/pause.d.ts +19 -0
  235. package/dist/commands/function/pause.js +50 -0
  236. package/dist/commands/function/pause.js.map +1 -0
  237. package/dist/commands/function/releases.d.ts +15 -0
  238. package/dist/commands/function/releases.js +62 -0
  239. package/dist/commands/function/releases.js.map +1 -0
  240. package/dist/commands/function/resume.d.ts +16 -0
  241. package/dist/commands/function/resume.js +47 -0
  242. package/dist/commands/function/resume.js.map +1 -0
  243. package/dist/commands/function/rollback.d.ts +18 -0
  244. package/dist/commands/function/rollback.js +69 -0
  245. package/dist/commands/function/rollback.js.map +1 -0
  246. package/dist/commands/function/settings/set.d.ts +23 -0
  247. package/dist/commands/function/settings/set.js +119 -0
  248. package/dist/commands/function/settings/set.js.map +1 -0
  249. package/dist/commands/function/show.d.ts +15 -0
  250. package/dist/commands/function/show.js +80 -0
  251. package/dist/commands/function/show.js.map +1 -0
  252. package/dist/commands/function/unlink.d.ts +9 -0
  253. package/dist/commands/function/unlink.js +34 -0
  254. package/dist/commands/function/unlink.js.map +1 -0
  255. package/dist/commands/link.d.ts +77 -0
  256. package/dist/commands/link.js +530 -0
  257. package/dist/commands/link.js.map +1 -0
  258. package/dist/commands/login.js +9 -0
  259. package/dist/commands/login.js.map +1 -1
  260. package/dist/commands/order.js +3 -1
  261. package/dist/commands/order.js.map +1 -1
  262. package/dist/commands/payments/methods/delete.js +2 -2
  263. package/dist/commands/payments/methods/delete.js.map +1 -1
  264. package/dist/commands/resources.js +50 -7
  265. package/dist/commands/resources.js.map +1 -1
  266. package/dist/commands/status.d.ts +12 -0
  267. package/dist/commands/status.js +71 -0
  268. package/dist/commands/status.js.map +1 -0
  269. package/dist/commands/storage/detach.js +1 -1
  270. package/dist/commands/storage/detach.js.map +1 -1
  271. package/dist/commands/storage/list.js +6 -2
  272. package/dist/commands/storage/list.js.map +1 -1
  273. package/dist/commands/storage/order.d.ts +2 -0
  274. package/dist/commands/storage/order.js +100 -18
  275. package/dist/commands/storage/order.js.map +1 -1
  276. package/dist/commands/storage/resize.js +19 -6
  277. package/dist/commands/storage/resize.js.map +1 -1
  278. package/dist/commands/tickets/create.d.ts +2 -0
  279. package/dist/commands/tickets/create.js +40 -1
  280. package/dist/commands/tickets/create.js.map +1 -1
  281. package/dist/commands/tickets/download.d.ts +18 -0
  282. package/dist/commands/tickets/download.js +138 -0
  283. package/dist/commands/tickets/download.js.map +1 -0
  284. package/dist/commands/tickets/list.js +13 -7
  285. package/dist/commands/tickets/list.js.map +1 -1
  286. package/dist/commands/tickets/reply.d.ts +2 -0
  287. package/dist/commands/tickets/reply.js +33 -4
  288. package/dist/commands/tickets/reply.js.map +1 -1
  289. package/dist/commands/vds/order.js +72 -7
  290. package/dist/commands/vds/order.js.map +1 -1
  291. package/dist/commands/vps/console.js +14 -6
  292. package/dist/commands/vps/console.js.map +1 -1
  293. package/dist/commands/vps/details.js +7 -1
  294. package/dist/commands/vps/details.js.map +1 -1
  295. package/dist/commands/vps/ip/add.js +76 -9
  296. package/dist/commands/vps/ip/add.js.map +1 -1
  297. package/dist/commands/vps/list.js +13 -4
  298. package/dist/commands/vps/list.js.map +1 -1
  299. package/dist/commands/vps/order.d.ts +19 -0
  300. package/dist/commands/vps/order.js +179 -23
  301. package/dist/commands/vps/order.js.map +1 -1
  302. package/dist/commands/vps/power.js +2 -2
  303. package/dist/commands/vps/power.js.map +1 -1
  304. package/dist/commands/vps/reinstall.js +2 -2
  305. package/dist/commands/vps/reinstall.js.map +1 -1
  306. package/dist/commands/vps/resize.js +36 -13
  307. package/dist/commands/vps/resize.js.map +1 -1
  308. package/dist/commands/whoami.d.ts +5 -0
  309. package/dist/commands/whoami.js +8 -3
  310. package/dist/commands/whoami.js.map +1 -1
  311. package/dist/config/paths.d.ts +1 -1
  312. package/dist/config/paths.js +6 -1
  313. package/dist/config/paths.js.map +1 -1
  314. package/dist/config/store.d.ts +58 -0
  315. package/dist/config/store.js +84 -2
  316. package/dist/config/store.js.map +1 -1
  317. package/dist/functions-support/credits.d.ts +64 -0
  318. package/dist/functions-support/credits.js +181 -0
  319. package/dist/functions-support/credits.js.map +1 -0
  320. package/dist/functions-support/cron.d.ts +17 -0
  321. package/dist/functions-support/cron.js +99 -0
  322. package/dist/functions-support/cron.js.map +1 -0
  323. package/dist/functions-support/env.d.ts +23 -0
  324. package/dist/functions-support/env.js +44 -0
  325. package/dist/functions-support/env.js.map +1 -0
  326. package/dist/functions-support/link.d.ts +25 -0
  327. package/dist/functions-support/link.js +51 -0
  328. package/dist/functions-support/link.js.map +1 -0
  329. package/dist/functions-support/poll.d.ts +40 -0
  330. package/dist/functions-support/poll.js +109 -0
  331. package/dist/functions-support/poll.js.map +1 -0
  332. package/dist/functions-support/resolve.d.ts +3 -0
  333. package/dist/functions-support/resolve.js +31 -0
  334. package/dist/functions-support/resolve.js.map +1 -0
  335. package/dist/functions-support/runtime.d.ts +30 -0
  336. package/dist/functions-support/runtime.js +52 -0
  337. package/dist/functions-support/runtime.js.map +1 -0
  338. package/dist/functions-support/source.d.ts +92 -0
  339. package/dist/functions-support/source.js +343 -0
  340. package/dist/functions-support/source.js.map +1 -0
  341. package/dist/help/scope-aware-help.js +10 -1
  342. package/dist/help/scope-aware-help.js.map +1 -1
  343. package/dist/tui/App.js +10 -25
  344. package/dist/tui/App.js.map +1 -1
  345. package/dist/tui/components/Menu.d.ts +3 -1
  346. package/dist/tui/components/Menu.js +7 -3
  347. package/dist/tui/components/Menu.js.map +1 -1
  348. package/dist/tui/router.d.ts +1 -1
  349. package/dist/tui/router.js.map +1 -1
  350. package/dist/tui/screens/Billing.js +56 -4
  351. package/dist/tui/screens/Billing.js.map +1 -1
  352. package/dist/tui/screens/Dashboard.js +8 -7
  353. package/dist/tui/screens/Dashboard.js.map +1 -1
  354. package/dist/tui/screens/Deploy.d.ts +2 -0
  355. package/dist/tui/screens/Deploy.js +912 -0
  356. package/dist/tui/screens/Deploy.js.map +1 -0
  357. package/dist/tui/screens/Order.js +359 -26
  358. package/dist/tui/screens/Order.js.map +1 -1
  359. package/dist/tui/screens/Resources.js +273 -31
  360. package/dist/tui/screens/Resources.js.map +1 -1
  361. package/dist/tui/screens/Tickets.js +18 -6
  362. package/dist/tui/screens/Tickets.js.map +1 -1
  363. package/dist/tui/screens/deployPreset.d.ts +20 -0
  364. package/dist/tui/screens/deployPreset.js +11 -0
  365. package/dist/tui/screens/deployPreset.js.map +1 -0
  366. package/dist/tui/screens/resources/AppDetail.d.ts +7 -0
  367. package/dist/tui/screens/resources/AppDetail.js +810 -0
  368. package/dist/tui/screens/resources/AppDetail.js.map +1 -0
  369. package/dist/tui/screens/resources/FunctionDetail.d.ts +7 -0
  370. package/dist/tui/screens/resources/FunctionDetail.js +751 -0
  371. package/dist/tui/screens/resources/FunctionDetail.js.map +1 -0
  372. package/dist/ui/attach.d.ts +15 -0
  373. package/dist/ui/attach.js +63 -0
  374. package/dist/ui/attach.js.map +1 -0
  375. package/dist/ui/baremetal-resolve.d.ts +10 -0
  376. package/dist/ui/baremetal-resolve.js +50 -0
  377. package/dist/ui/baremetal-resolve.js.map +1 -0
  378. package/dist/ui/confirm.js +1 -1
  379. package/dist/ui/confirm.js.map +1 -1
  380. package/dist/ui/cycle.d.ts +66 -0
  381. package/dist/ui/cycle.js +96 -0
  382. package/dist/ui/cycle.js.map +1 -0
  383. package/dist/ui/deploy-ui.d.ts +75 -0
  384. package/dist/ui/deploy-ui.js +243 -0
  385. package/dist/ui/deploy-ui.js.map +1 -0
  386. package/dist/ui/order-result.d.ts +4 -0
  387. package/dist/ui/order-result.js +32 -0
  388. package/dist/ui/order-result.js.map +1 -0
  389. package/dist/ui/payment-gate.d.ts +26 -0
  390. package/dist/ui/payment-gate.js +70 -0
  391. package/dist/ui/payment-gate.js.map +1 -0
  392. package/dist/ui/payment.js +10 -3
  393. package/dist/ui/payment.js.map +1 -1
  394. package/dist/ui/portal.d.ts +1 -1
  395. package/dist/ui/portal.js +7 -2
  396. package/dist/ui/portal.js.map +1 -1
  397. package/dist/ui/project-resolve.d.ts +25 -0
  398. package/dist/ui/project-resolve.js +31 -0
  399. package/dist/ui/project-resolve.js.map +1 -0
  400. package/dist/ui/render-mode.d.ts +5 -0
  401. package/dist/ui/render-mode.js +1 -1
  402. package/dist/ui/render-mode.js.map +1 -1
  403. package/dist/ui/resource-detail.js +0 -3
  404. package/dist/ui/resource-detail.js.map +1 -1
  405. package/dist/ui/resource-resolve.d.ts +9 -2
  406. package/dist/ui/resource-resolve.js +11 -4
  407. package/dist/ui/resource-resolve.js.map +1 -1
  408. package/dist/ui/spinner.d.ts +10 -1
  409. package/dist/ui/spinner.js +12 -3
  410. package/dist/ui/spinner.js.map +1 -1
  411. package/dist/ui/table.d.ts +7 -0
  412. package/dist/ui/table.js +11 -0
  413. package/dist/ui/table.js.map +1 -1
  414. package/dist/ui/tax.d.ts +10 -0
  415. package/dist/ui/tax.js +31 -0
  416. package/dist/ui/tax.js.map +1 -0
  417. package/dist/ui/ticket-resolve.d.ts +9 -1
  418. package/dist/ui/ticket-resolve.js +13 -2
  419. package/dist/ui/ticket-resolve.js.map +1 -1
  420. package/dist/ui/volume-resolve.js +4 -1
  421. package/dist/ui/volume-resolve.js.map +1 -1
  422. package/dist/ui/wait.d.ts +4 -0
  423. package/dist/ui/wait.js +7 -2
  424. package/dist/ui/wait.js.map +1 -1
  425. package/dist/ui/wizard.d.ts +2 -1
  426. package/dist/ui/wizard.js +1 -1
  427. package/dist/ui/wizard.js.map +1 -1
  428. package/dist/version-check-bin.js +2 -2
  429. package/dist/version-check-bin.js.map +1 -1
  430. package/dist/version-check.d.ts +5 -0
  431. package/dist/version-check.js +6 -1
  432. package/dist/version-check.js.map +1 -1
  433. package/package.json +53 -6
@@ -0,0 +1,25 @@
1
+ import { BaseCommand } from "../../../base/command.js";
2
+ /** `synteq app settings set` — patch one or more build/deploy settings. Only
3
+ * the flags you pass are changed; the rest are left as they are. */
4
+ export default class SettingsSet extends BaseCommand {
5
+ static apiKeyScope: string;
6
+ static description: string;
7
+ static examples: string[];
8
+ static args: {
9
+ target: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
10
+ };
11
+ static flags: {
12
+ app: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ "root-directory": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ "dockerfile-path": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ "build-context": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ "docker-command": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ "pre-deploy-command": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ "auto-deploy": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ "health-check-path": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ "build-filter-included": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ "build-filter-ignored": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ port: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ };
24
+ run(): Promise<void>;
25
+ }
@@ -0,0 +1,96 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { BaseCommand, appTargetArg } from "../../../base/command.js";
3
+ import { withSpinner } from "../../../ui/spinner.js";
4
+ import { ok, dim } from "../../../ui/glyphs.js";
5
+ /** A build filter is a list of globs; the flag takes them comma-separated, the
6
+ * way the portal's field does — a repeatable flag would swallow a positional
7
+ * app name that follows it. `''` is the "clear it" value, mirroring
8
+ * `--port 0 → null` below: `[]` is what the API takes to mean "no filter". */
9
+ const globs = (v) => v
10
+ .split(",")
11
+ .map((g) => g.trim())
12
+ .filter(Boolean);
13
+ /** `synteq app settings set` — patch one or more build/deploy settings. Only
14
+ * the flags you pass are changed; the rest are left as they are. */
15
+ export default class SettingsSet extends BaseCommand {
16
+ static apiKeyScope = "none";
17
+ static description = "Change an app's build/deploy settings. Only the flags you pass are updated; omit a flag to leave it unchanged.";
18
+ static examples = [
19
+ "<%= config.bin %> app settings set --auto-deploy off",
20
+ "<%= config.bin %> app settings set --root-directory backend --dockerfile-path backend/Dockerfile --app my-api",
21
+ "<%= config.bin %> app settings set --health-check-path /healthz --app my-api -o json",
22
+ "<%= config.bin %> app settings set --port 5230 --app my-memos",
23
+ "<%= config.bin %> app settings set --port 0 --app my-memos",
24
+ "<%= config.bin %> app settings set my-api --build-filter-included 'backend/**,shared/**' --build-filter-ignored '**/*.md'",
25
+ "<%= config.bin %> app settings set --build-filter-included '' --app my-api # clear the included filter",
26
+ ];
27
+ static args = { ...appTargetArg };
28
+ static flags = {
29
+ app: Flags.string({ description: "App slug (or uuid) (default: the directory's linked app)." }),
30
+ "root-directory": Flags.string({ description: "Subdirectory to build from (default: repo root)." }),
31
+ "dockerfile-path": Flags.string({ description: "Path to the Dockerfile, relative to the build context." }),
32
+ "build-context": Flags.string({ description: "Docker build context directory." }),
33
+ "docker-command": Flags.string({ description: "Override the container start command." }),
34
+ "pre-deploy-command": Flags.string({ description: "Command run once before each deploy (migrations etc.)." }),
35
+ "auto-deploy": Flags.string({
36
+ options: ["on_commit", "off"],
37
+ description: "Deploy automatically on every push (on_commit) or only manually (off).",
38
+ }),
39
+ "health-check-path": Flags.string({ description: "HTTP path polled to gate a deploy healthy (e.g. /healthz)." }),
40
+ "build-filter-included": Flags.string({
41
+ description: "Comma-separated path globs whose changes trigger a build. A push touching none of them is skipped; with no filter any change builds. Pass '' to clear.",
42
+ }),
43
+ "build-filter-ignored": Flags.string({
44
+ description: "Comma-separated path globs to ignore when deciding to build. A push touching only these won't build. Pass '' to clear.",
45
+ }),
46
+ port: Flags.integer({
47
+ description: "Port the app listens on (1-65535). The health check and traffic both go here. Pass 0 to clear it and let the runtime detect the port.",
48
+ }),
49
+ };
50
+ async run() {
51
+ await this.initClients();
52
+ const { args, flags } = await this.parse(SettingsSet);
53
+ try {
54
+ const patch = {};
55
+ if (flags["root-directory"] !== undefined)
56
+ patch.rootDirectory = flags["root-directory"];
57
+ if (flags["dockerfile-path"] !== undefined)
58
+ patch.dockerfilePath = flags["dockerfile-path"];
59
+ if (flags["build-context"] !== undefined)
60
+ patch.buildContext = flags["build-context"];
61
+ if (flags["docker-command"] !== undefined)
62
+ patch.dockerCommand = flags["docker-command"];
63
+ if (flags["pre-deploy-command"] !== undefined)
64
+ patch.preDeployCommand = flags["pre-deploy-command"];
65
+ if (flags["auto-deploy"] !== undefined)
66
+ patch.autoDeploy = flags["auto-deploy"];
67
+ if (flags["health-check-path"] !== undefined)
68
+ patch.healthCheckPath = flags["health-check-path"];
69
+ if (flags["build-filter-included"] !== undefined)
70
+ patch.buildFilterIncluded = globs(flags["build-filter-included"]);
71
+ if (flags["build-filter-ignored"] !== undefined)
72
+ patch.buildFilterIgnored = globs(flags["build-filter-ignored"]);
73
+ if (flags.port !== undefined) {
74
+ // 0 is the CLI's "clear it" sentinel: the API takes `null` to mean
75
+ // "no override, detect the port", but a flag cannot carry null, and 0
76
+ // is not a port anything can listen on so it is free to repurpose.
77
+ // Every other out-of-range value is left to the API's own 422 rather
78
+ // than duplicating the bounds here.
79
+ patch.port = flags.port === 0 ? null : flags.port;
80
+ }
81
+ if (Object.keys(patch).length === 0) {
82
+ this.error("Nothing to change — pass at least one setting flag (see --help).", { exit: 1 });
83
+ }
84
+ const app = await this.resolveLinkedApp(flags, args.target);
85
+ const s = await withSpinner("Saving settings", () => this.clients.api.apps.patchSettings(app.id, patch));
86
+ this.emit(s, () => {
87
+ this.log(ok(`Updated ${Object.keys(patch).length} setting(s) on ${app.slug}.`));
88
+ this.log(dim("Run `synteq app settings show` to see the full config."));
89
+ });
90
+ }
91
+ catch (err) {
92
+ this.fail(err);
93
+ }
94
+ }
95
+ }
96
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../../src/commands/app/settings/set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from "../../../base/command.js";
2
+ /** `synteq app settings show` — build/deploy settings for an app. */
3
+ export default class SettingsShow extends BaseCommand {
4
+ static apiKeyScope: string;
5
+ static description: string;
6
+ static examples: string[];
7
+ static args: {
8
+ target: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
9
+ };
10
+ static flags: {
11
+ app: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,48 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { BaseCommand, appTargetArg } from "../../../base/command.js";
3
+ import { withSpinner } from "../../../ui/spinner.js";
4
+ import { panel } from "../../../ui/wizard.js";
5
+ import { dim } from "../../../ui/glyphs.js";
6
+ /** `synteq app settings show` — build/deploy settings for an app. */
7
+ export default class SettingsShow extends BaseCommand {
8
+ static apiKeyScope = "none";
9
+ static description = "Show an app's build and deploy settings (root dir, Dockerfile path, commands, auto-deploy, health check).";
10
+ static examples = [
11
+ "<%= config.bin %> app settings show # bare: linked app",
12
+ "<%= config.bin %> app settings show --app my-api -o json",
13
+ ];
14
+ static args = { ...appTargetArg };
15
+ static flags = {
16
+ app: Flags.string({ description: "App slug (or uuid) (default: the directory's linked app)." }),
17
+ };
18
+ async run() {
19
+ await this.initClients();
20
+ const { args, flags } = await this.parse(SettingsShow);
21
+ try {
22
+ const app = await this.resolveLinkedApp(flags, args.target);
23
+ const s = await withSpinner("Loading settings", () => this.clients.api.apps.settings(app.id));
24
+ this.emit(s, () => {
25
+ this.log(panel(`${app.slug} settings`, [
26
+ ["Root directory", s.rootDirectory ?? dim("(repo root)")],
27
+ ["Dockerfile path", s.dockerfilePath ?? dim("(auto)")],
28
+ ["Build context", s.buildContext ?? dim("(auto)")],
29
+ ["Docker command", s.dockerCommand ?? dim("(image default)")],
30
+ ["Pre-deploy command", s.preDeployCommand ?? dim("(none)")],
31
+ ["Auto-deploy", s.autoDeploy],
32
+ ["Health check path", s.healthCheckPath ?? dim("(none)")],
33
+ // An unset port is not "(none)" — the app IS being probed on
34
+ // something, so show what, and say it was not chosen by hand.
35
+ ["Port", s.port != null ? String(s.port) : dim(`${s.effectivePort} (detected)`)],
36
+ ]));
37
+ if (s.buildFilterIncluded?.length)
38
+ this.log(dim(`\nBuild filter — included: ${s.buildFilterIncluded.join(", ")}`));
39
+ if (s.buildFilterIgnored?.length)
40
+ this.log(dim(`Build filter — ignored: ${s.buildFilterIgnored.join(", ")}`));
41
+ });
42
+ }
43
+ catch (err) {
44
+ this.fail(err);
45
+ }
46
+ }
47
+ }
48
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../../src/commands/app/settings/show.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { BaseCommand } from "../../base/command.js";
2
+ /** `synteq app unlink` — forget this directory's `synteq link`. */
3
+ export default class AppUnlink extends BaseCommand {
4
+ static apiKeyScope: string;
5
+ static description: string;
6
+ static examples: string[];
7
+ run(): Promise<void>;
8
+ }
@@ -0,0 +1,25 @@
1
+ import { BaseCommand } from "../../base/command.js";
2
+ import { ok } from "../../ui/glyphs.js";
3
+ /** `synteq app unlink` — forget this directory's `synteq link`. */
4
+ export default class AppUnlink extends BaseCommand {
5
+ static apiKeyScope = "none";
6
+ static description = "Unlink the current directory from its app (forgets the saved `synteq link`).";
7
+ static examples = [
8
+ "<%= config.bin %> app unlink",
9
+ "<%= config.bin %> app unlink -o json",
10
+ ];
11
+ async run() {
12
+ await this.initClients();
13
+ try {
14
+ const cwd = process.cwd();
15
+ const removed = this.clients.config.removeLink(cwd);
16
+ this.emit({ directory: cwd, removed }, () => {
17
+ this.log(removed ? ok(`Unlinked ${cwd}.`) : `No link stored for ${cwd}.`);
18
+ });
19
+ }
20
+ catch (err) {
21
+ this.fail(err);
22
+ }
23
+ }
24
+ }
25
+ //# sourceMappingURL=unlink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unlink.js","sourceRoot":"","sources":["../../../src/commands/app/unlink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,mEAAmE;AACnE,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,WAAW,GAAG,8EAA8E,CAAC;IACpG,MAAM,CAAC,QAAQ,GAAG;QAChB,8BAA8B;QAC9B,sCAAsC;KACvC,CAAC;IACF,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE;gBAC1C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,GAAG,GAAG,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { BaseCommand } from "../../base/command.js";
2
+ /**
3
+ * `synteq apps create` — create a managed-container app in the active project.
4
+ *
5
+ * Goes through the SAME `createApp` seam `synteq deploy --create` and the link
6
+ * walkthrough use: a free tier is a bare `POST /apps` behind the saved-card
7
+ * gate; a paid tier is an ORDER (first-month quote → card → confirm → charge →
8
+ * the app is provisioned off the settled order). Calling `POST /apps` directly
9
+ * for a paid tier only ever earned the backend's 402 ("Paid plans are created
10
+ * through an order"), which is what this command did until 2026-09-25.
11
+ */
12
+ export default class AppsCreate extends BaseCommand {
13
+ static apiKeyScope: string;
14
+ static description: string;
15
+ static examples: string[];
16
+ static flags: {
17
+ slug: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
18
+ plan: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ region: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ "payment-method": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ "apply-credits": import("@oclif/core/interfaces").BooleanFlag<boolean>;
23
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
24
+ };
25
+ run(): Promise<void>;
26
+ }
@@ -0,0 +1,91 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { BaseCommand } from "../../base/command.js";
3
+ import { statusColor } from "../../ui/glyphs.js";
4
+ import { isInteractive, panel } from "../../ui/wizard.js";
5
+ import { PaymentMethodRequired } from "../../ui/payment-gate.js";
6
+ import { createApp, resolveAppRegion } from "../link.js";
7
+ /**
8
+ * `synteq apps create` — create a managed-container app in the active project.
9
+ *
10
+ * Goes through the SAME `createApp` seam `synteq deploy --create` and the link
11
+ * walkthrough use: a free tier is a bare `POST /apps` behind the saved-card
12
+ * gate; a paid tier is an ORDER (first-month quote → card → confirm → charge →
13
+ * the app is provisioned off the settled order). Calling `POST /apps` directly
14
+ * for a paid tier only ever earned the backend's 402 ("Paid plans are created
15
+ * through an order"), which is what this command did until 2026-09-25.
16
+ */
17
+ export default class AppsCreate extends BaseCommand {
18
+ static apiKeyScope = "none";
19
+ static description = "Create a managed-container app in the active project.";
20
+ static examples = [
21
+ "<%= config.bin %> apps create --slug my-api",
22
+ "<%= config.bin %> apps create --slug my-api --plan hobby --region dfw-primary --yes",
23
+ "<%= config.bin %> apps create --slug my-api -o json # scriptable: prints the App row",
24
+ ];
25
+ static flags = {
26
+ slug: Flags.string({
27
+ required: true,
28
+ description: "App name/slug — unique within the project (1..63 chars).",
29
+ }),
30
+ plan: Flags.string({
31
+ description: "Plan tier slug, e.g. free or starter (default: free, same as `deploy --create`). A paid tier charges the first month now.",
32
+ }),
33
+ region: Flags.string({
34
+ description: "Region to deploy in (default: the only placeable location, else asks).",
35
+ }),
36
+ project: Flags.string({
37
+ description: "Project id to create in (defaults to the active project).",
38
+ }),
39
+ "payment-method": Flags.string({
40
+ description: "For a paid --plan: saved payment method id to charge (default: the team's default, or asks).",
41
+ }),
42
+ "apply-credits": Flags.boolean({
43
+ description: "For a paid --plan: apply the team's credit balance to the first month first.",
44
+ default: false,
45
+ }),
46
+ yes: Flags.boolean({
47
+ char: "y",
48
+ description: "Confirm the first-month charge of a paid --plan without asking (scripts must pass this).",
49
+ default: false,
50
+ }),
51
+ };
52
+ async run() {
53
+ await this.initClients();
54
+ const { flags } = await this.parse(AppsCreate);
55
+ const interactive = isInteractive() && this.outputFormat === "table";
56
+ try {
57
+ const region = await resolveAppRegion(this.clients, flags.region, async (locations) => {
58
+ if (!interactive) {
59
+ throw new Error(`Several locations can place this app — pass --region (${locations.map((l) => l.code).join(", ")}).`);
60
+ }
61
+ const { pickFromCatalog } = await import("../../ui/wizard.js");
62
+ return pickFromCatalog("Location", locations.map((l) => ({ value: l.region, name: l.city, description: l.code })));
63
+ });
64
+ const app = await createApp(this.clients, { slug: flags.slug, planTier: flags.plan ?? "free", region, projectId: flags.project }, {
65
+ interactive,
66
+ log: (line) => this.info(line),
67
+ paymentMethodId: flags["payment-method"],
68
+ applyCredits: flags["apply-credits"],
69
+ yes: flags.yes,
70
+ });
71
+ this.emit(app, () => {
72
+ this.log(panel("App created", [
73
+ ["Slug", app.slug],
74
+ ["ID", app.id],
75
+ ["Status", statusColor(app.status)],
76
+ ["Plan", app.planTier],
77
+ ["Region", app.region],
78
+ ["Hostname", app.hostname],
79
+ ]));
80
+ this.log("");
81
+ this.log(`Deploy it: synteq deploy --app ${app.slug} (from the app's directory, or --image <ref>)`);
82
+ });
83
+ }
84
+ catch (err) {
85
+ if (err instanceof PaymentMethodRequired)
86
+ this.error(err.message, { exit: 1 });
87
+ this.fail(err);
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/apps/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { BaseCommand } from "../../base/command.js";
2
+ /**
3
+ * `synteq apps list` — managed-container apps in the active project.
4
+ *
5
+ * Backend: GET /apps. Scoping matches `vps list` — the server resolves the
6
+ * active project from the `X-Project-Id` header, so `--project` overrides it.
7
+ */
8
+ export default class AppsList extends BaseCommand {
9
+ static apiKeyScope: string;
10
+ static description: string;
11
+ static examples: string[];
12
+ static flags: {
13
+ project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
@@ -0,0 +1,54 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { BaseCommand } from "../../base/command.js";
3
+ import { renderTable, shortId, truncationNote } from "../../ui/table.js";
4
+ import { statusColor } from "../../ui/glyphs.js";
5
+ /**
6
+ * `synteq apps list` — managed-container apps in the active project.
7
+ *
8
+ * Backend: GET /apps. Scoping matches `vps list` — the server resolves the
9
+ * active project from the `X-Project-Id` header, so `--project` overrides it.
10
+ */
11
+ export default class AppsList extends BaseCommand {
12
+ static apiKeyScope = "none";
13
+ static description = "List managed-container apps in the active project.";
14
+ static examples = [
15
+ "<%= config.bin %> apps list",
16
+ "<%= config.bin %> apps list --project 019e... # scope to a specific project",
17
+ "<%= config.bin %> apps list -o json",
18
+ ];
19
+ static flags = {
20
+ project: Flags.string({
21
+ description: "Project id to scope to (defaults to the active project).",
22
+ }),
23
+ };
24
+ async run() {
25
+ await this.initClients();
26
+ const { flags } = await this.parse(AppsList);
27
+ try {
28
+ const page = await this.clients.api.apps.listPage(flags.project);
29
+ const apps = page.items;
30
+ const note = truncationNote(apps.length, page.total, "--project");
31
+ this.emit(apps, () => {
32
+ if (apps.length === 0) {
33
+ this.log("No apps. Create one with `synteq apps create --slug <name>`.");
34
+ return;
35
+ }
36
+ this.log(renderTable(["ID", "SLUG", "STATUS", "PLAN", "REGION", "REL", "HOSTNAME"], apps.map((a) => [
37
+ shortId(a.id),
38
+ a.slug,
39
+ statusColor(a.status),
40
+ a.planTier,
41
+ a.region,
42
+ String(a.activeRelease),
43
+ a.hostname,
44
+ ])));
45
+ });
46
+ if (note)
47
+ this.info(note);
48
+ }
49
+ catch (err) {
50
+ this.fail(err);
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/apps/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,WAAW,GAAG,oDAAoD,CAAC;IAC1E,MAAM,CAAC,QAAQ,GAAG;QAChB,6BAA6B;QAC7B,+EAA+E;QAC/E,qCAAqC;KACtC,CAAC;IACF,MAAM,CAAC,KAAK,GAAG;QACb,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,0DAA0D;SACxE,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;gBACnB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;oBACzE,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,GAAG,CACN,WAAW,CACT,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,EAC7D,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACd,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACb,CAAC,CAAC,IAAI;oBACN,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;oBACrB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,MAAM;oBACR,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;oBACvB,CAAC,CAAC,QAAQ;iBACX,CAAC,CACH,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from "../../base/command.js";
2
+ export default class BaremetalActivity extends BaseCommand {
3
+ static description: string;
4
+ static apiKeyScope: string;
5
+ static examples: string[];
6
+ static args: {
7
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
11
+ offset: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<void>;
14
+ }
@@ -0,0 +1,53 @@
1
+ import { Args, Flags } from "@oclif/core";
2
+ import { BaseCommand } from "../../base/command.js";
3
+ import { resolveBaremetalId } from "../../ui/baremetal-resolve.js";
4
+ import { renderTable } from "../../ui/table.js";
5
+ import { dim } from "../../ui/glyphs.js";
6
+ export default class BaremetalActivity extends BaseCommand {
7
+ static description = "Show recent activity for a bare metal server.";
8
+ // GET /baremetal/{id}/activity resolves to read:baremetal via the backend's
9
+ // broad bare-metal read rule (2026-08-24 audit wave).
10
+ static apiKeyScope = "read:baremetal";
11
+ static examples = [
12
+ "<%= config.bin %> baremetal activity 019e...",
13
+ "<%= config.bin %> baremetal activity 019e... --limit 50",
14
+ "<%= config.bin %> baremetal activity 019e... --limit 25 --offset 25",
15
+ "<%= config.bin %> baremetal activity 019e... -o json",
16
+ ];
17
+ static args = {
18
+ id: Args.string({
19
+ description: "Server id (full or the short id from `baremetal list`), hostname, reference, or IP.",
20
+ required: true,
21
+ }),
22
+ };
23
+ static flags = {
24
+ limit: Flags.integer({ default: 25, description: "Max rows (1..100)." }),
25
+ offset: Flags.integer({ default: 0, description: "Pagination offset." }),
26
+ };
27
+ async run() {
28
+ await this.initClients();
29
+ const { args, flags } = await this.parse(BaremetalActivity);
30
+ try {
31
+ const serviceId = await resolveBaremetalId(this.clients.api, args.id);
32
+ const log = await this.clients.api.baremetal.activity(serviceId, flags.limit, flags.offset);
33
+ this.emit(log, () => {
34
+ if (log.items.length === 0) {
35
+ this.log("No activity entries.");
36
+ return;
37
+ }
38
+ this.log(renderTable(["WHEN", "ACTOR", "ACTION", "DETAIL"], log.items.map((e) => [
39
+ e.created_at.slice(0, 19).replace("T", " "),
40
+ e.actor?.email ?? "system",
41
+ e.action,
42
+ e.detail ?? "",
43
+ ])));
44
+ this.log("");
45
+ this.log(dim(`Showing ${log.items.length} of ${log.total} entries.`));
46
+ });
47
+ }
48
+ catch (err) {
49
+ this.fail(err);
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/commands/baremetal/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IACxD,MAAM,CAAC,WAAW,GAAG,+CAA+C,CAAC;IACrE,4EAA4E;IAC5E,sDAAsD;IACtD,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC;IACtC,MAAM,CAAC,QAAQ,GAAG;QAChB,8CAA8C;QAC9C,yDAAyD;QACzD,qEAAqE;QACrE,sDAAsD;KACvD,CAAC;IACF,MAAM,CAAC,IAAI,GAAG;QACZ,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,qFAAqF;YAClG,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IACF,MAAM,CAAC,KAAK,GAAG;QACb,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;QACxE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;KACzE,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5F,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;gBAClB,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;oBACjC,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,GAAG,CACN,WAAW,CACT,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,EACrC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBACnB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;oBAC3C,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,QAAQ;oBAC1B,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,MAAM,IAAI,EAAE;iBACf,CAAC,CACH,CACF,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC,MAAM,OAAO,GAAG,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { BaseCommand } from "../../base/command.js";
2
+ export default class BaremetalBandwidth extends BaseCommand {
3
+ static description: string;
4
+ static apiKeyScope: string;
5
+ static examples: string[];
6
+ static args: {
7
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ run(): Promise<void>;
10
+ }
@@ -0,0 +1,86 @@
1
+ import { Args } from "@oclif/core";
2
+ import { BaseCommand } from "../../base/command.js";
3
+ import { resolveBaremetalId } from "../../ui/baremetal-resolve.js";
4
+ import { panel } from "../../ui/wizard.js";
5
+ import { renderTable } from "../../ui/table.js";
6
+ import { statusColor } from "../../ui/glyphs.js";
7
+ export default class BaremetalBandwidth extends BaseCommand {
8
+ static description = [
9
+ "Show a bare metal server's bandwidth usage: current month-to-date, plan allowance, and overage.",
10
+ "",
11
+ "Read-only. Includes up to 12 months of history. `-o json` returns",
12
+ "the full summary (current period + history + rates).",
13
+ ].join("\n");
14
+ static apiKeyScope = "read:baremetal";
15
+ static examples = [
16
+ "<%= config.bin %> baremetal bandwidth 019e...",
17
+ "<%= config.bin %> baremetal bandwidth 019e... -o json # full summary for scripting",
18
+ ];
19
+ static args = {
20
+ id: Args.string({
21
+ description: "Server id (full or the short id from `baremetal list`), hostname, reference, or IP.",
22
+ required: true,
23
+ }),
24
+ };
25
+ async run() {
26
+ await this.initClients();
27
+ const { args } = await this.parse(BaremetalBandwidth);
28
+ try {
29
+ const serviceId = await resolveBaremetalId(this.clients.api, args.id);
30
+ const summary = await this.clients.api.baremetal.bandwidth(serviceId);
31
+ this.emit(summary, () => {
32
+ const includedTb = summary.included_tb != null ? `${summary.included_tb} TB` : "unmetered";
33
+ const overage = summary.overage_per_tb != null ? `$${summary.overage_per_tb.toFixed(2)}/TB` : "—";
34
+ const cur = summary.current;
35
+ const usedTb = cur ? cur.used_tb : 0;
36
+ const overTb = summary.included_tb != null ? Math.max(0, usedTb - summary.included_tb) : 0;
37
+ const overageCost = summary.overage_per_tb != null && overTb > 0
38
+ ? `$${(overTb * summary.overage_per_tb).toFixed(2)}`
39
+ : null;
40
+ this.log(panel(`Bandwidth — ${serviceId}`, [
41
+ ["Period", cur ? `${cur.period_start.slice(0, 10)} → ${cur.period_end.slice(0, 10)}` : "no open period"],
42
+ ["Used", `${usedTb.toFixed(4)} TB`],
43
+ ["Included", includedTb],
44
+ ["Overage rate", overage],
45
+ [
46
+ "Est. overage",
47
+ summary.included_tb != null
48
+ ? overTb > 0
49
+ ? `${overTb.toFixed(4)} TB${overageCost ? ` (${overageCost})` : ""}`
50
+ : "none"
51
+ : "",
52
+ ],
53
+ [
54
+ "Last polled",
55
+ cur?.last_polled_at ? cur.last_polled_at.slice(0, 19).replace("T", " ") : "",
56
+ ],
57
+ [
58
+ "Overage invoiced",
59
+ cur?.overage_invoiced_at ? statusColor("invoiced") : cur ? "not yet" : "",
60
+ ],
61
+ ]));
62
+ if (summary.history.length > 0) {
63
+ this.log("");
64
+ this.log("History:");
65
+ this.log(renderTable(["PERIOD", "USED (TB)", "IN", "OUT", "OVERAGE"], summary.history.map((p) => [
66
+ p.period_start.slice(0, 7),
67
+ p.used_tb.toFixed(4),
68
+ fmtGB(p.bytes_in),
69
+ fmtGB(p.bytes_out),
70
+ p.overage_invoiced_at ? "invoiced" : "",
71
+ ])));
72
+ }
73
+ });
74
+ }
75
+ catch (err) {
76
+ this.fail(err);
77
+ }
78
+ }
79
+ }
80
+ function fmtGB(bytes) {
81
+ const gb = bytes / 1e9;
82
+ if (gb >= 1000)
83
+ return `${(gb / 1000).toFixed(2)} TB`;
84
+ return `${gb.toFixed(2)} GB`;
85
+ }
86
+ //# sourceMappingURL=bandwidth.js.map