@synteq/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/run.js +10 -0
- package/dist/api/client.d.ts +167 -0
- package/dist/api/client.js +367 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/errors.d.ts +16 -0
- package/dist/api/errors.js +76 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/factory.d.ts +12 -0
- package/dist/api/factory.js +18 -0
- package/dist/api/factory.js.map +1 -0
- package/dist/api/types.d.ts +738 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth/device-flow.d.ts +8 -0
- package/dist/auth/device-flow.js +36 -0
- package/dist/auth/device-flow.js.map +1 -0
- package/dist/auth/keychain.d.ts +3 -0
- package/dist/auth/keychain.js +34 -0
- package/dist/auth/keychain.js.map +1 -0
- package/dist/auth/logout.d.ts +4 -0
- package/dist/auth/logout.js +17 -0
- package/dist/auth/logout.js.map +1 -0
- package/dist/auth/tokens.d.ts +19 -0
- package/dist/auth/tokens.js +56 -0
- package/dist/auth/tokens.js.map +1 -0
- package/dist/base/command.d.ts +17 -0
- package/dist/base/command.js +89 -0
- package/dist/base/command.js.map +1 -0
- package/dist/commands/account/index.d.ts +5 -0
- package/dist/commands/account/index.js +9 -0
- package/dist/commands/account/index.js.map +1 -0
- package/dist/commands/account/show.d.ts +9 -0
- package/dist/commands/account/show.js +75 -0
- package/dist/commands/account/show.js.map +1 -0
- package/dist/commands/api.d.ts +17 -0
- package/dist/commands/api.js +144 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/bare-metal/index.d.ts +4 -0
- package/dist/commands/bare-metal/index.js +5 -0
- package/dist/commands/bare-metal/index.js.map +1 -0
- package/dist/commands/bare-metal/list.d.ts +9 -0
- package/dist/commands/bare-metal/list.js +38 -0
- package/dist/commands/bare-metal/list.js.map +1 -0
- package/dist/commands/bare-metal/order.d.ts +6 -0
- package/dist/commands/bare-metal/order.js +27 -0
- package/dist/commands/bare-metal/order.js.map +1 -0
- package/dist/commands/catalog.d.ts +11 -0
- package/dist/commands/catalog.js +115 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/config/index.d.ts +5 -0
- package/dist/commands/config/index.js +9 -0
- package/dist/commands/config/index.js.map +1 -0
- package/dist/commands/config/set-api-url.d.ts +10 -0
- package/dist/commands/config/set-api-url.js +43 -0
- package/dist/commands/config/set-api-url.js.map +1 -0
- package/dist/commands/config/show.d.ts +9 -0
- package/dist/commands/config/show.js +75 -0
- package/dist/commands/config/show.js.map +1 -0
- package/dist/commands/credits/add.d.ts +14 -0
- package/dist/commands/credits/add.js +117 -0
- package/dist/commands/credits/add.js.map +1 -0
- package/dist/commands/credits/index.d.ts +5 -0
- package/dist/commands/credits/index.js +9 -0
- package/dist/commands/credits/index.js.map +1 -0
- package/dist/commands/credits/list.d.ts +6 -0
- package/dist/commands/credits/list.js +43 -0
- package/dist/commands/credits/list.js.map +1 -0
- package/dist/commands/gpu/activity.d.ts +15 -0
- package/dist/commands/gpu/activity.js +8 -0
- package/dist/commands/gpu/activity.js.map +1 -0
- package/dist/commands/gpu/bandwidth.d.ts +14 -0
- package/dist/commands/gpu/bandwidth.js +8 -0
- package/dist/commands/gpu/bandwidth.js.map +1 -0
- package/dist/commands/gpu/boot-order.d.ts +15 -0
- package/dist/commands/gpu/boot-order.js +8 -0
- package/dist/commands/gpu/boot-order.js.map +1 -0
- package/dist/commands/gpu/console.d.ts +14 -0
- package/dist/commands/gpu/console.js +8 -0
- package/dist/commands/gpu/console.js.map +1 -0
- package/dist/commands/gpu/details.d.ts +15 -0
- package/dist/commands/gpu/details.js +8 -0
- package/dist/commands/gpu/details.js.map +1 -0
- package/dist/commands/gpu/index.d.ts +4 -0
- package/dist/commands/gpu/index.js +5 -0
- package/dist/commands/gpu/index.js.map +1 -0
- package/dist/commands/gpu/ip/add.d.ts +18 -0
- package/dist/commands/gpu/ip/add.js +8 -0
- package/dist/commands/gpu/ip/add.js.map +1 -0
- package/dist/commands/gpu/ip/list.d.ts +14 -0
- package/dist/commands/gpu/ip/list.js +8 -0
- package/dist/commands/gpu/ip/list.js.map +1 -0
- package/dist/commands/gpu/list.d.ts +6 -0
- package/dist/commands/gpu/list.js +13 -0
- package/dist/commands/gpu/list.js.map +1 -0
- package/dist/commands/gpu/order.d.ts +6 -0
- package/dist/commands/gpu/order.js +13 -0
- package/dist/commands/gpu/order.js.map +1 -0
- package/dist/commands/gpu/power.d.ts +17 -0
- package/dist/commands/gpu/power.js +8 -0
- package/dist/commands/gpu/power.js.map +1 -0
- package/dist/commands/gpu/reinstall.d.ts +22 -0
- package/dist/commands/gpu/reinstall.js +8 -0
- package/dist/commands/gpu/reinstall.js.map +1 -0
- package/dist/commands/gpu/resize.d.ts +22 -0
- package/dist/commands/gpu/resize.js +8 -0
- package/dist/commands/gpu/resize.js.map +1 -0
- package/dist/commands/gpu/stats.d.ts +14 -0
- package/dist/commands/gpu/stats.js +8 -0
- package/dist/commands/gpu/stats.js.map +1 -0
- package/dist/commands/help.d.ts +9 -0
- package/dist/commands/help.js +19 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/instant-metal/activity.d.ts +15 -0
- package/dist/commands/instant-metal/activity.js +8 -0
- package/dist/commands/instant-metal/activity.js.map +1 -0
- package/dist/commands/instant-metal/bandwidth.d.ts +14 -0
- package/dist/commands/instant-metal/bandwidth.js +8 -0
- package/dist/commands/instant-metal/bandwidth.js.map +1 -0
- package/dist/commands/instant-metal/boot-order.d.ts +15 -0
- package/dist/commands/instant-metal/boot-order.js +8 -0
- package/dist/commands/instant-metal/boot-order.js.map +1 -0
- package/dist/commands/instant-metal/console.d.ts +14 -0
- package/dist/commands/instant-metal/console.js +8 -0
- package/dist/commands/instant-metal/console.js.map +1 -0
- package/dist/commands/instant-metal/details.d.ts +15 -0
- package/dist/commands/instant-metal/details.js +8 -0
- package/dist/commands/instant-metal/details.js.map +1 -0
- package/dist/commands/instant-metal/index.d.ts +4 -0
- package/dist/commands/instant-metal/index.js +5 -0
- package/dist/commands/instant-metal/index.js.map +1 -0
- package/dist/commands/instant-metal/ip/add.d.ts +18 -0
- package/dist/commands/instant-metal/ip/add.js +8 -0
- package/dist/commands/instant-metal/ip/add.js.map +1 -0
- package/dist/commands/instant-metal/ip/list.d.ts +14 -0
- package/dist/commands/instant-metal/ip/list.js +8 -0
- package/dist/commands/instant-metal/ip/list.js.map +1 -0
- package/dist/commands/instant-metal/list.d.ts +6 -0
- package/dist/commands/instant-metal/list.js +13 -0
- package/dist/commands/instant-metal/list.js.map +1 -0
- package/dist/commands/instant-metal/order.d.ts +6 -0
- package/dist/commands/instant-metal/order.js +13 -0
- package/dist/commands/instant-metal/order.js.map +1 -0
- package/dist/commands/instant-metal/power.d.ts +17 -0
- package/dist/commands/instant-metal/power.js +8 -0
- package/dist/commands/instant-metal/power.js.map +1 -0
- package/dist/commands/instant-metal/reinstall.d.ts +22 -0
- package/dist/commands/instant-metal/reinstall.js +8 -0
- package/dist/commands/instant-metal/reinstall.js.map +1 -0
- package/dist/commands/instant-metal/resize.d.ts +22 -0
- package/dist/commands/instant-metal/resize.js +8 -0
- package/dist/commands/instant-metal/resize.js.map +1 -0
- package/dist/commands/instant-metal/stats.d.ts +14 -0
- package/dist/commands/instant-metal/stats.js +8 -0
- package/dist/commands/instant-metal/stats.js.map +1 -0
- package/dist/commands/login.d.ts +10 -0
- package/dist/commands/login.js +98 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +6 -0
- package/dist/commands/logout.js +20 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/order/gpu.d.ts +6 -0
- package/dist/commands/order/gpu.js +13 -0
- package/dist/commands/order/gpu.js.map +1 -0
- package/dist/commands/order/instant-metal.d.ts +7 -0
- package/dist/commands/order/instant-metal.js +14 -0
- package/dist/commands/order/instant-metal.js.map +1 -0
- package/dist/commands/order/storage.d.ts +6 -0
- package/dist/commands/order/storage.js +11 -0
- package/dist/commands/order/storage.js.map +1 -0
- package/dist/commands/order/vps.d.ts +7 -0
- package/dist/commands/order/vps.js +14 -0
- package/dist/commands/order/vps.js.map +1 -0
- package/dist/commands/order.d.ts +6 -0
- package/dist/commands/order.js +46 -0
- package/dist/commands/order.js.map +1 -0
- package/dist/commands/payments/index.d.ts +5 -0
- package/dist/commands/payments/index.js +10 -0
- package/dist/commands/payments/index.js.map +1 -0
- package/dist/commands/payments/methods/add.d.ts +9 -0
- package/dist/commands/payments/methods/add.js +30 -0
- package/dist/commands/payments/methods/add.js.map +1 -0
- package/dist/commands/payments/methods/delete.d.ts +12 -0
- package/dist/commands/payments/methods/delete.js +58 -0
- package/dist/commands/payments/methods/delete.js.map +1 -0
- package/dist/commands/payments/methods/index.d.ts +5 -0
- package/dist/commands/payments/methods/index.js +9 -0
- package/dist/commands/payments/methods/index.js.map +1 -0
- package/dist/commands/payments/methods/list.d.ts +6 -0
- package/dist/commands/payments/methods/list.js +33 -0
- package/dist/commands/payments/methods/list.js.map +1 -0
- package/dist/commands/payments/methods/set-default.d.ts +9 -0
- package/dist/commands/payments/methods/set-default.js +31 -0
- package/dist/commands/payments/methods/set-default.js.map +1 -0
- package/dist/commands/projects/index.d.ts +5 -0
- package/dist/commands/projects/index.js +9 -0
- package/dist/commands/projects/index.js.map +1 -0
- package/dist/commands/projects/list.d.ts +6 -0
- package/dist/commands/projects/list.js +31 -0
- package/dist/commands/projects/list.js.map +1 -0
- package/dist/commands/resources.d.ts +11 -0
- package/dist/commands/resources.js +93 -0
- package/dist/commands/resources.js.map +1 -0
- package/dist/commands/settings/index.d.ts +6 -0
- package/dist/commands/settings/index.js +57 -0
- package/dist/commands/settings/index.js.map +1 -0
- package/dist/commands/settings/render-mode.d.ts +10 -0
- package/dist/commands/settings/render-mode.js +76 -0
- package/dist/commands/settings/render-mode.js.map +1 -0
- package/dist/commands/ssh-key/add.d.ts +11 -0
- package/dist/commands/ssh-key/add.js +89 -0
- package/dist/commands/ssh-key/add.js.map +1 -0
- package/dist/commands/ssh-key/delete.d.ts +12 -0
- package/dist/commands/ssh-key/delete.js +43 -0
- package/dist/commands/ssh-key/delete.js.map +1 -0
- package/dist/commands/ssh-key/list.d.ts +7 -0
- package/dist/commands/ssh-key/list.js +47 -0
- package/dist/commands/ssh-key/list.js.map +1 -0
- package/dist/commands/storage/attach.d.ts +12 -0
- package/dist/commands/storage/attach.js +48 -0
- package/dist/commands/storage/attach.js.map +1 -0
- package/dist/commands/storage/detach.d.ts +12 -0
- package/dist/commands/storage/detach.js +60 -0
- package/dist/commands/storage/detach.js.map +1 -0
- package/dist/commands/storage/list.d.ts +9 -0
- package/dist/commands/storage/list.js +41 -0
- package/dist/commands/storage/list.js.map +1 -0
- package/dist/commands/storage/order.d.ts +16 -0
- package/dist/commands/storage/order.js +223 -0
- package/dist/commands/storage/order.js.map +1 -0
- package/dist/commands/storage/resize.d.ts +16 -0
- package/dist/commands/storage/resize.js +129 -0
- package/dist/commands/storage/resize.js.map +1 -0
- package/dist/commands/team/details.d.ts +9 -0
- package/dist/commands/team/details.js +48 -0
- package/dist/commands/team/details.js.map +1 -0
- package/dist/commands/team/invite.d.ts +14 -0
- package/dist/commands/team/invite.js +65 -0
- package/dist/commands/team/invite.js.map +1 -0
- package/dist/commands/team.d.ts +15 -0
- package/dist/commands/team.js +123 -0
- package/dist/commands/team.js.map +1 -0
- package/dist/commands/tickets/close.d.ts +13 -0
- package/dist/commands/tickets/close.js +39 -0
- package/dist/commands/tickets/close.js.map +1 -0
- package/dist/commands/tickets/create.d.ts +16 -0
- package/dist/commands/tickets/create.js +111 -0
- package/dist/commands/tickets/create.js.map +1 -0
- package/dist/commands/tickets/departments.d.ts +7 -0
- package/dist/commands/tickets/departments.js +27 -0
- package/dist/commands/tickets/departments.js.map +1 -0
- package/dist/commands/tickets/list.d.ts +10 -0
- package/dist/commands/tickets/list.js +66 -0
- package/dist/commands/tickets/list.js.map +1 -0
- package/dist/commands/tickets/open.d.ts +10 -0
- package/dist/commands/tickets/open.js +70 -0
- package/dist/commands/tickets/open.js.map +1 -0
- package/dist/commands/tickets/reply.d.ts +13 -0
- package/dist/commands/tickets/reply.js +48 -0
- package/dist/commands/tickets/reply.js.map +1 -0
- package/dist/commands/transit.d.ts +9 -0
- package/dist/commands/transit.js +47 -0
- package/dist/commands/transit.js.map +1 -0
- package/dist/commands/tui/index.d.ts +7 -0
- package/dist/commands/tui/index.js +87 -0
- package/dist/commands/tui/index.js.map +1 -0
- package/dist/commands/vds/activity.d.ts +15 -0
- package/dist/commands/vds/activity.js +8 -0
- package/dist/commands/vds/activity.js.map +1 -0
- package/dist/commands/vds/bandwidth.d.ts +14 -0
- package/dist/commands/vds/bandwidth.js +8 -0
- package/dist/commands/vds/bandwidth.js.map +1 -0
- package/dist/commands/vds/boot-order.d.ts +15 -0
- package/dist/commands/vds/boot-order.js +8 -0
- package/dist/commands/vds/boot-order.js.map +1 -0
- package/dist/commands/vds/console.d.ts +14 -0
- package/dist/commands/vds/console.js +8 -0
- package/dist/commands/vds/console.js.map +1 -0
- package/dist/commands/vds/details.d.ts +15 -0
- package/dist/commands/vds/details.js +8 -0
- package/dist/commands/vds/details.js.map +1 -0
- package/dist/commands/vds/index.d.ts +4 -0
- package/dist/commands/vds/index.js +5 -0
- package/dist/commands/vds/index.js.map +1 -0
- package/dist/commands/vds/ip/add.d.ts +18 -0
- package/dist/commands/vds/ip/add.js +8 -0
- package/dist/commands/vds/ip/add.js.map +1 -0
- package/dist/commands/vds/ip/list.d.ts +14 -0
- package/dist/commands/vds/ip/list.js +8 -0
- package/dist/commands/vds/ip/list.js.map +1 -0
- package/dist/commands/vds/list.d.ts +6 -0
- package/dist/commands/vds/list.js +13 -0
- package/dist/commands/vds/list.js.map +1 -0
- package/dist/commands/vds/order.d.ts +6 -0
- package/dist/commands/vds/order.js +13 -0
- package/dist/commands/vds/order.js.map +1 -0
- package/dist/commands/vds/power.d.ts +17 -0
- package/dist/commands/vds/power.js +8 -0
- package/dist/commands/vds/power.js.map +1 -0
- package/dist/commands/vds/reinstall.d.ts +22 -0
- package/dist/commands/vds/reinstall.js +8 -0
- package/dist/commands/vds/reinstall.js.map +1 -0
- package/dist/commands/vds/resize.d.ts +22 -0
- package/dist/commands/vds/resize.js +8 -0
- package/dist/commands/vds/resize.js.map +1 -0
- package/dist/commands/vds/stats.d.ts +14 -0
- package/dist/commands/vds/stats.js +8 -0
- package/dist/commands/vds/stats.js.map +1 -0
- package/dist/commands/vps/activity.d.ts +13 -0
- package/dist/commands/vps/activity.js +50 -0
- package/dist/commands/vps/activity.js.map +1 -0
- package/dist/commands/vps/bandwidth.d.ts +9 -0
- package/dist/commands/vps/bandwidth.js +91 -0
- package/dist/commands/vps/bandwidth.js.map +1 -0
- package/dist/commands/vps/boot-order.d.ts +10 -0
- package/dist/commands/vps/boot-order.js +51 -0
- package/dist/commands/vps/boot-order.js.map +1 -0
- package/dist/commands/vps/console.d.ts +15 -0
- package/dist/commands/vps/console.js +198 -0
- package/dist/commands/vps/console.js.map +1 -0
- package/dist/commands/vps/details.d.ts +15 -0
- package/dist/commands/vps/details.js +78 -0
- package/dist/commands/vps/details.js.map +1 -0
- package/dist/commands/vps/ip/add.d.ts +17 -0
- package/dist/commands/vps/ip/add.js +212 -0
- package/dist/commands/vps/ip/add.js.map +1 -0
- package/dist/commands/vps/ip/list.d.ts +9 -0
- package/dist/commands/vps/ip/list.js +102 -0
- package/dist/commands/vps/ip/list.js.map +1 -0
- package/dist/commands/vps/list.d.ts +12 -0
- package/dist/commands/vps/list.js +55 -0
- package/dist/commands/vps/list.js.map +1 -0
- package/dist/commands/vps/order.d.ts +30 -0
- package/dist/commands/vps/order.js +497 -0
- package/dist/commands/vps/order.js.map +1 -0
- package/dist/commands/vps/power.d.ts +15 -0
- package/dist/commands/vps/power.js +123 -0
- package/dist/commands/vps/power.js.map +1 -0
- package/dist/commands/vps/reinstall.d.ts +20 -0
- package/dist/commands/vps/reinstall.js +166 -0
- package/dist/commands/vps/reinstall.js.map +1 -0
- package/dist/commands/vps/resize.d.ts +22 -0
- package/dist/commands/vps/resize.js +205 -0
- package/dist/commands/vps/resize.js.map +1 -0
- package/dist/commands/vps/stats.d.ts +12 -0
- package/dist/commands/vps/stats.js +83 -0
- package/dist/commands/vps/stats.js.map +1 -0
- package/dist/commands/whoami.d.ts +9 -0
- package/dist/commands/whoami.js +70 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config/paths.d.ts +3 -0
- package/dist/config/paths.js +17 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/store.d.ts +15 -0
- package/dist/config/store.js +38 -0
- package/dist/config/store.js.map +1 -0
- package/dist/help.d.ts +9 -0
- package/dist/help.js +119 -0
- package/dist/help.js.map +1 -0
- package/dist/tui/App.d.ts +9 -0
- package/dist/tui/App.js +93 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/ActionButton.d.ts +9 -0
- package/dist/tui/components/ActionButton.js +52 -0
- package/dist/tui/components/ActionButton.js.map +1 -0
- package/dist/tui/components/AppHeader.d.ts +6 -0
- package/dist/tui/components/AppHeader.js +18 -0
- package/dist/tui/components/AppHeader.js.map +1 -0
- package/dist/tui/components/BackButton.d.ts +6 -0
- package/dist/tui/components/BackButton.js +15 -0
- package/dist/tui/components/BackButton.js.map +1 -0
- package/dist/tui/components/CenteredFrame.d.ts +8 -0
- package/dist/tui/components/CenteredFrame.js +14 -0
- package/dist/tui/components/CenteredFrame.js.map +1 -0
- package/dist/tui/components/Clickable.d.ts +9 -0
- package/dist/tui/components/Clickable.js +48 -0
- package/dist/tui/components/Clickable.js.map +1 -0
- package/dist/tui/components/ConfirmModal.d.ts +8 -0
- package/dist/tui/components/ConfirmModal.js +22 -0
- package/dist/tui/components/ConfirmModal.js.map +1 -0
- package/dist/tui/components/DataTable.d.ts +14 -0
- package/dist/tui/components/DataTable.js +26 -0
- package/dist/tui/components/DataTable.js.map +1 -0
- package/dist/tui/components/InputBar.d.ts +9 -0
- package/dist/tui/components/InputBar.js +10 -0
- package/dist/tui/components/InputBar.js.map +1 -0
- package/dist/tui/components/Menu.d.ts +16 -0
- package/dist/tui/components/Menu.js +78 -0
- package/dist/tui/components/Menu.js.map +1 -0
- package/dist/tui/components/NumberInput.d.ts +13 -0
- package/dist/tui/components/NumberInput.js +55 -0
- package/dist/tui/components/NumberInput.js.map +1 -0
- package/dist/tui/components/Panel.d.ts +13 -0
- package/dist/tui/components/Panel.js +11 -0
- package/dist/tui/components/Panel.js.map +1 -0
- package/dist/tui/components/Sparkline.d.ts +11 -0
- package/dist/tui/components/Sparkline.js +40 -0
- package/dist/tui/components/Sparkline.js.map +1 -0
- package/dist/tui/components/Spinner.d.ts +4 -0
- package/dist/tui/components/Spinner.js +11 -0
- package/dist/tui/components/Spinner.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +6 -0
- package/dist/tui/components/StatusBar.js +9 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/Tip.d.ts +4 -0
- package/dist/tui/components/Tip.js +11 -0
- package/dist/tui/components/Tip.js.map +1 -0
- package/dist/tui/hooks/useApi.d.ts +12 -0
- package/dist/tui/hooks/useApi.js +15 -0
- package/dist/tui/hooks/useApi.js.map +1 -0
- package/dist/tui/hooks/useHeader.d.ts +18 -0
- package/dist/tui/hooks/useHeader.js +65 -0
- package/dist/tui/hooks/useHeader.js.map +1 -0
- package/dist/tui/hooks/useMouse.d.ts +27 -0
- package/dist/tui/hooks/useMouse.js +174 -0
- package/dist/tui/hooks/useMouse.js.map +1 -0
- package/dist/tui/hooks/useStdinCapture.d.ts +1 -0
- package/dist/tui/hooks/useStdinCapture.js +37 -0
- package/dist/tui/hooks/useStdinCapture.js.map +1 -0
- package/dist/tui/index.d.ts +12 -0
- package/dist/tui/index.js +19 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/router.d.ts +10 -0
- package/dist/tui/router.js +9 -0
- package/dist/tui/router.js.map +1 -0
- package/dist/tui/screens/Account.d.ts +2 -0
- package/dist/tui/screens/Account.js +212 -0
- package/dist/tui/screens/Account.js.map +1 -0
- package/dist/tui/screens/Billing.d.ts +2 -0
- package/dist/tui/screens/Billing.js +586 -0
- package/dist/tui/screens/Billing.js.map +1 -0
- package/dist/tui/screens/Dashboard.d.ts +2 -0
- package/dist/tui/screens/Dashboard.js +150 -0
- package/dist/tui/screens/Dashboard.js.map +1 -0
- package/dist/tui/screens/Order.d.ts +2 -0
- package/dist/tui/screens/Order.js +1169 -0
- package/dist/tui/screens/Order.js.map +1 -0
- package/dist/tui/screens/Resources.d.ts +2 -0
- package/dist/tui/screens/Resources.js +720 -0
- package/dist/tui/screens/Resources.js.map +1 -0
- package/dist/tui/screens/Tickets.d.ts +2 -0
- package/dist/tui/screens/Tickets.js +395 -0
- package/dist/tui/screens/Tickets.js.map +1 -0
- package/dist/tui/theme/colors.d.ts +12 -0
- package/dist/tui/theme/colors.js +29 -0
- package/dist/tui/theme/colors.js.map +1 -0
- package/dist/tui/theme/glyphs.d.ts +5 -0
- package/dist/tui/theme/glyphs.js +6 -0
- package/dist/tui/theme/glyphs.js.map +1 -0
- package/dist/ui/confirm.d.ts +7 -0
- package/dist/ui/confirm.js +18 -0
- package/dist/ui/confirm.js.map +1 -0
- package/dist/ui/glyphs.d.ts +18 -0
- package/dist/ui/glyphs.js +47 -0
- package/dist/ui/glyphs.js.map +1 -0
- package/dist/ui/payment.d.ts +33 -0
- package/dist/ui/payment.js +179 -0
- package/dist/ui/payment.js.map +1 -0
- package/dist/ui/pm-resolve.d.ts +3 -0
- package/dist/ui/pm-resolve.js +19 -0
- package/dist/ui/pm-resolve.js.map +1 -0
- package/dist/ui/portal.d.ts +1 -0
- package/dist/ui/portal.js +19 -0
- package/dist/ui/portal.js.map +1 -0
- package/dist/ui/render-mode.d.ts +10 -0
- package/dist/ui/render-mode.js +30 -0
- package/dist/ui/render-mode.js.map +1 -0
- package/dist/ui/sparkline.d.ts +6 -0
- package/dist/ui/sparkline.js +30 -0
- package/dist/ui/sparkline.js.map +1 -0
- package/dist/ui/spinner.d.ts +1 -0
- package/dist/ui/spinner.js +19 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/stats.d.ts +22 -0
- package/dist/ui/stats.js +71 -0
- package/dist/ui/stats.js.map +1 -0
- package/dist/ui/stdin.d.ts +1 -0
- package/dist/ui/stdin.js +8 -0
- package/dist/ui/stdin.js.map +1 -0
- package/dist/ui/table.d.ts +2 -0
- package/dist/ui/table.js +48 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/ticket-resolve.d.ts +2 -0
- package/dist/ui/ticket-resolve.js +17 -0
- package/dist/ui/ticket-resolve.js.map +1 -0
- package/dist/ui/volume-resolve.d.ts +3 -0
- package/dist/ui/volume-resolve.js +30 -0
- package/dist/ui/volume-resolve.js.map +1 -0
- package/dist/ui/vps-detail.d.ts +3 -0
- package/dist/ui/vps-detail.js +79 -0
- package/dist/ui/vps-detail.js.map +1 -0
- package/dist/ui/vps-resolve.d.ts +4 -0
- package/dist/ui/vps-resolve.js +24 -0
- package/dist/ui/vps-resolve.js.map +1 -0
- package/dist/ui/wait.d.ts +31 -0
- package/dist/ui/wait.js +66 -0
- package/dist/ui/wait.js.map +1 -0
- package/dist/ui/wizard.d.ts +33 -0
- package/dist/ui/wizard.js +168 -0
- package/dist/ui/wizard.js.map +1 -0
- package/package.json +142 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { BaseCommand } from "../../base/command.js";
|
|
3
|
+
import { waitFor, vpsStatusClassifier } from "../../ui/wait.js";
|
|
4
|
+
import { ok } from "../../ui/glyphs.js";
|
|
5
|
+
import { confirmDestructive, yesRequiredMessage } from "../../ui/confirm.js";
|
|
6
|
+
import { resolveVpsRef } from "../../ui/vps-resolve.js";
|
|
7
|
+
import { isInteractive } from "../../ui/wizard.js";
|
|
8
|
+
const ACTION_MAP = {
|
|
9
|
+
on: "start",
|
|
10
|
+
start: "start",
|
|
11
|
+
off: "stop",
|
|
12
|
+
stop: "stop",
|
|
13
|
+
shutdown: "shutdown",
|
|
14
|
+
reboot: "reboot",
|
|
15
|
+
reset: "reset",
|
|
16
|
+
cycle: "cycle",
|
|
17
|
+
"power-cycle": "cycle",
|
|
18
|
+
};
|
|
19
|
+
const CONFIRM_VERB = {
|
|
20
|
+
stop: "Stop",
|
|
21
|
+
shutdown: "Shut down",
|
|
22
|
+
reboot: "Reboot",
|
|
23
|
+
reset: "Reset",
|
|
24
|
+
cycle: "Power-cycle",
|
|
25
|
+
};
|
|
26
|
+
export default class VpsPower extends BaseCommand {
|
|
27
|
+
static description = [
|
|
28
|
+
"Power a VPS on/off, reboot, shutdown, or cycle.",
|
|
29
|
+
"",
|
|
30
|
+
"Actions other than `on` are disruptive and ask for confirmation on a",
|
|
31
|
+
"TTY (default No). When stdout is piped, pass --yes or the command",
|
|
32
|
+
"exits 1 without acting. `on` never prompts.",
|
|
33
|
+
].join("\n");
|
|
34
|
+
static examples = [
|
|
35
|
+
"<%= config.bin %> vps power 019e... on",
|
|
36
|
+
"<%= config.bin %> vps power 019e... shutdown --wait # block until stopped; prompts first",
|
|
37
|
+
"<%= config.bin %> vps power 019e... stop --yes # no prompt (required when piped)",
|
|
38
|
+
"<%= config.bin %> vps power 019e... cycle --yes --wait --timeout 300 -o json",
|
|
39
|
+
];
|
|
40
|
+
static args = {
|
|
41
|
+
id: Args.string({
|
|
42
|
+
description: "VPS id (full or the short id from `vps list`), hostname, or IP.",
|
|
43
|
+
required: true,
|
|
44
|
+
}),
|
|
45
|
+
action: Args.string({
|
|
46
|
+
description: "on | off | shutdown | reboot | reset | cycle",
|
|
47
|
+
required: true,
|
|
48
|
+
}),
|
|
49
|
+
};
|
|
50
|
+
static flags = {
|
|
51
|
+
yes: Flags.boolean({
|
|
52
|
+
char: "y",
|
|
53
|
+
description: "Skip the confirmation prompt for disruptive actions (off/stop, shutdown, reboot, reset, cycle). Required when stdout is not a TTY. `on` never prompts.",
|
|
54
|
+
}),
|
|
55
|
+
wait: Flags.boolean({
|
|
56
|
+
description: "Poll until the VPS reaches the action's target state (on → running, off/shutdown → stopped, reboot/reset/cycle → running). Exit 3 on timeout or an error state.",
|
|
57
|
+
}),
|
|
58
|
+
timeout: Flags.integer({
|
|
59
|
+
description: "Seconds to wait before giving up (default 120). Only with --wait.",
|
|
60
|
+
default: 120,
|
|
61
|
+
min: 5,
|
|
62
|
+
}),
|
|
63
|
+
};
|
|
64
|
+
async run() {
|
|
65
|
+
await this.initClients();
|
|
66
|
+
const { args, flags } = await this.parse(this.ctor);
|
|
67
|
+
const action = ACTION_MAP[args.action.toLowerCase()];
|
|
68
|
+
if (!action) {
|
|
69
|
+
this.error(`Unknown action "${args.action}". Use on, off, shutdown, reboot, reset, or cycle.`, { exit: 1 });
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
const vps = await resolveVpsRef(this.clients.api, args.id);
|
|
73
|
+
const vpsId = vps.id;
|
|
74
|
+
if (action !== "start" && !flags.yes) {
|
|
75
|
+
if (!isInteractive()) {
|
|
76
|
+
this.error(yesRequiredMessage(`\`vps power ${args.action}\``), { exit: 1 });
|
|
77
|
+
}
|
|
78
|
+
const outcome = await confirmDestructive({
|
|
79
|
+
message: `${CONFIRM_VERB[action]} ${vps.hostname}?`,
|
|
80
|
+
});
|
|
81
|
+
if (outcome !== "confirmed") {
|
|
82
|
+
this.log("Aborted — no power action sent.");
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const result = action === "cycle"
|
|
87
|
+
? await this.clients.api.vpsControl.powerCycle(vpsId)
|
|
88
|
+
: await this.clients.api.vpsControl.power(vpsId, action);
|
|
89
|
+
if (!flags.wait) {
|
|
90
|
+
this.emit(result, () => {
|
|
91
|
+
this.log(`Task ${result.task_id} (${result.action}) — ${result.status}`);
|
|
92
|
+
});
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (this.outputFormat === "table") {
|
|
96
|
+
this.log(`Task ${result.task_id} (${result.action}) — ${result.status}`);
|
|
97
|
+
}
|
|
98
|
+
const target = action === "stop" || action === "shutdown" ? "stopped" : "running";
|
|
99
|
+
const onStatus = this.outputFormat === "json"
|
|
100
|
+
? (line) => process.stderr.write(line + "\n")
|
|
101
|
+
: (line) => this.log(` ${line}`);
|
|
102
|
+
const wr = await waitFor({
|
|
103
|
+
timeoutSeconds: flags.timeout,
|
|
104
|
+
poll: () => this.clients.api.vps.get(vpsId),
|
|
105
|
+
classify: vpsStatusClassifier(target),
|
|
106
|
+
onStatus,
|
|
107
|
+
});
|
|
108
|
+
if (wr.outcome === "timeout") {
|
|
109
|
+
this.error(`Timed out after ${flags.timeout}s waiting for VPS ${vps.hostname} to reach ${target} (last status: ${wr.lastLabel ?? "unknown"}).`, { exit: 3 });
|
|
110
|
+
}
|
|
111
|
+
if (wr.outcome === "failure") {
|
|
112
|
+
this.error(wr.reason, { exit: 3 });
|
|
113
|
+
}
|
|
114
|
+
this.emit(wr.value, () => {
|
|
115
|
+
this.log(ok(`VPS ${vps.hostname} is ${target} (${wr.elapsedSeconds}s).`));
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
this.fail(err);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=power.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"power.js","sourceRoot":"","sources":["../../../src/commands/vps/power.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseCommand } from "../../base/command.js";
|
|
2
|
+
export default class VpsReinstall extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
image: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
password: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
"password-stdin": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
"ssh-key": import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
"ssh-public-key": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
ciuser: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
wait: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { BaseCommand } from "../../base/command.js";
|
|
3
|
+
import { resolveVpsRef } from "../../ui/vps-resolve.js";
|
|
4
|
+
import { isInteractive, promptSecret } from "../../ui/wizard.js";
|
|
5
|
+
import { readStdin } from "../../ui/stdin.js";
|
|
6
|
+
import { waitFor, vpsStatusClassifier } from "../../ui/wait.js";
|
|
7
|
+
import { ok } from "../../ui/glyphs.js";
|
|
8
|
+
import { confirmDestructive, yesRequiredMessage } from "../../ui/confirm.js";
|
|
9
|
+
export default class VpsReinstall extends BaseCommand {
|
|
10
|
+
static description = [
|
|
11
|
+
"Reinstall a VPS with a new OS image (erases all data on the VPS).",
|
|
12
|
+
"",
|
|
13
|
+
"Asks for confirmation on a TTY (default No). When stdout is piped,",
|
|
14
|
+
"pass --yes or the command exits 1 without acting.",
|
|
15
|
+
].join("\n");
|
|
16
|
+
static examples = [
|
|
17
|
+
"<%= config.bin %> vps reinstall 019e... --image 019f... # confirms, then prompts (masked) for a root password",
|
|
18
|
+
"cat pass.txt | <%= config.bin %> vps reinstall 019e... --image 019f... --password-stdin --yes",
|
|
19
|
+
"<%= config.bin %> vps reinstall 019e... --image 019f... --ssh-key 019g... --wait --yes",
|
|
20
|
+
"<%= config.bin %> vps reinstall 019e... --image 019f... --ssh-public-key 'ssh-ed25519 AAAA... user@host'",
|
|
21
|
+
"<%= config.bin %> vps reinstall 019e... --image 019f... --ssh-key 019g... --ciuser ubuntu",
|
|
22
|
+
];
|
|
23
|
+
static args = {
|
|
24
|
+
id: Args.string({
|
|
25
|
+
description: "VPS id (full or the short id from `vps list`), hostname, or IP.",
|
|
26
|
+
required: true,
|
|
27
|
+
}),
|
|
28
|
+
};
|
|
29
|
+
static flags = {
|
|
30
|
+
image: Flags.string({ description: "Image id to install.", required: true }),
|
|
31
|
+
yes: Flags.boolean({
|
|
32
|
+
char: "y",
|
|
33
|
+
description: "Skip the confirmation prompt. Required when stdout is not a TTY (including --password-stdin pipelines).",
|
|
34
|
+
}),
|
|
35
|
+
password: Flags.string({
|
|
36
|
+
description: "Root password (min 8 chars). WARNING: visible to other local processes (ps) and shell history — prefer --password-stdin or the interactive prompt.",
|
|
37
|
+
exclusive: ["password-stdin"],
|
|
38
|
+
}),
|
|
39
|
+
"password-stdin": Flags.boolean({
|
|
40
|
+
description: "Read the root password from stdin instead of argv (avoids ps/shell-history leaks).",
|
|
41
|
+
exclusive: ["password"],
|
|
42
|
+
}),
|
|
43
|
+
"ssh-key": Flags.string({
|
|
44
|
+
description: "Saved SSH key id to authorise. Repeatable.",
|
|
45
|
+
multiple: true,
|
|
46
|
+
}),
|
|
47
|
+
"ssh-public-key": Flags.string({
|
|
48
|
+
description: "Raw OpenSSH public key string (alternative to --ssh-key).",
|
|
49
|
+
}),
|
|
50
|
+
ciuser: Flags.string({ description: "cloud-init username (max 32 chars)." }),
|
|
51
|
+
wait: Flags.boolean({
|
|
52
|
+
description: "Poll the reinstall until it finishes and the VPS is running again. Exit 3 on timeout.",
|
|
53
|
+
}),
|
|
54
|
+
timeout: Flags.integer({
|
|
55
|
+
description: "Seconds to wait before giving up (default 900). Only with --wait.",
|
|
56
|
+
default: 900,
|
|
57
|
+
min: 30,
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
async run() {
|
|
61
|
+
await this.initClients();
|
|
62
|
+
const { args, flags } = await this.parse(this.ctor);
|
|
63
|
+
try {
|
|
64
|
+
const vps = await resolveVpsRef(this.clients.api, args.id);
|
|
65
|
+
const vpsId = vps.id;
|
|
66
|
+
if (!flags.yes) {
|
|
67
|
+
if (!isInteractive()) {
|
|
68
|
+
this.error(yesRequiredMessage("`vps reinstall` (erases all data on the VPS)"), {
|
|
69
|
+
exit: 1,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const outcome = await confirmDestructive({
|
|
73
|
+
message: `Reinstall ${vps.hostname}? All data on its disks will be erased.`,
|
|
74
|
+
});
|
|
75
|
+
if (outcome !== "confirmed") {
|
|
76
|
+
this.log("Aborted — VPS untouched.");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
let password = flags.password;
|
|
81
|
+
if (flags["password-stdin"]) {
|
|
82
|
+
password = (await readStdin()).replace(/\r?\n$/, "");
|
|
83
|
+
if (!password) {
|
|
84
|
+
this.error("No password on stdin (--password-stdin).", { exit: 1 });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const hasKeyAuth = Boolean(flags["ssh-key"]?.length || flags["ssh-public-key"]);
|
|
88
|
+
if (!password && !hasKeyAuth) {
|
|
89
|
+
if (isInteractive() && this.outputFormat === "table") {
|
|
90
|
+
password = await promptSecret("Root password (min 8 chars)");
|
|
91
|
+
if (password.length < 8) {
|
|
92
|
+
this.error("Password must be at least 8 characters.", { exit: 1 });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.error("Provide --password-stdin, --password, --ssh-key (one or more), or --ssh-public-key.", { exit: 1 });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const result = await this.clients.api.vpsControl.reinstall(vpsId, {
|
|
100
|
+
image_id: flags.image,
|
|
101
|
+
password,
|
|
102
|
+
ssh_key_ids: flags["ssh-key"]?.length ? flags["ssh-key"] : undefined,
|
|
103
|
+
ssh_public_key: flags["ssh-public-key"],
|
|
104
|
+
ciuser: flags.ciuser,
|
|
105
|
+
});
|
|
106
|
+
if (!flags.wait) {
|
|
107
|
+
this.emit(result, () => {
|
|
108
|
+
this.log(`Reinstall queued for ${vps.hostname}.`);
|
|
109
|
+
if (result && typeof result === "object")
|
|
110
|
+
this.log(JSON.stringify(result, null, 2));
|
|
111
|
+
});
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (this.outputFormat === "table")
|
|
115
|
+
this.log(`Reinstall queued for ${vps.hostname}.`);
|
|
116
|
+
const onStatus = this.outputFormat === "json"
|
|
117
|
+
? (line) => process.stderr.write(line + "\n")
|
|
118
|
+
: (line) => this.log(` ${line}`);
|
|
119
|
+
const stage1Started = Date.now();
|
|
120
|
+
let seenActive = false;
|
|
121
|
+
const classify = (st) => {
|
|
122
|
+
if (st.reinstalling) {
|
|
123
|
+
seenActive = true;
|
|
124
|
+
const pct = typeof st.progress_percent === "number" ? ` ${st.progress_percent}%` : "";
|
|
125
|
+
return { state: "pending", label: `${st.step ?? "reinstalling"}${pct}` };
|
|
126
|
+
}
|
|
127
|
+
if (seenActive || Date.now() - stage1Started > 60_000) {
|
|
128
|
+
return { state: "success", label: "reinstall finished" };
|
|
129
|
+
}
|
|
130
|
+
return { state: "pending", label: "waiting for reinstall to start" };
|
|
131
|
+
};
|
|
132
|
+
const stage1 = await waitFor({
|
|
133
|
+
timeoutSeconds: flags.timeout,
|
|
134
|
+
poll: () => this.clients.api.vpsControl.reinstallStatus(vpsId),
|
|
135
|
+
classify,
|
|
136
|
+
onStatus,
|
|
137
|
+
});
|
|
138
|
+
if (stage1.outcome === "timeout") {
|
|
139
|
+
this.error(`Timed out after ${flags.timeout}s waiting for the reinstall of ${vps.hostname} (last status: ${stage1.lastLabel ?? "unknown"}).`, { exit: 3 });
|
|
140
|
+
}
|
|
141
|
+
if (stage1.outcome === "failure") {
|
|
142
|
+
this.error(stage1.reason, { exit: 3 });
|
|
143
|
+
}
|
|
144
|
+
const remaining = Math.max(30, flags.timeout - stage1.elapsedSeconds);
|
|
145
|
+
const stage2 = await waitFor({
|
|
146
|
+
timeoutSeconds: remaining,
|
|
147
|
+
poll: () => this.clients.api.vps.get(vpsId),
|
|
148
|
+
classify: vpsStatusClassifier("running"),
|
|
149
|
+
onStatus,
|
|
150
|
+
});
|
|
151
|
+
if (stage2.outcome === "timeout") {
|
|
152
|
+
this.error(`Reinstall completed but VPS ${vps.hostname} didn't reach running within ${flags.timeout}s (last status: ${stage2.lastLabel ?? "unknown"}).`, { exit: 3 });
|
|
153
|
+
}
|
|
154
|
+
if (stage2.outcome === "failure") {
|
|
155
|
+
this.error(stage2.reason, { exit: 3 });
|
|
156
|
+
}
|
|
157
|
+
this.emit(stage2.value, () => {
|
|
158
|
+
this.log(ok(`Reinstall of ${vps.hostname} finished — VPS running (${stage1.elapsedSeconds + stage2.elapsedSeconds}s).`));
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
this.fail(err);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=reinstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reinstall.js","sourceRoot":"","sources":["../../../src/commands/vps/reinstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAA2B,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAC,WAAW,GAAG;QACnB,mEAAmE;QACnE,EAAE;QACF,oEAAoE;QACpE,mDAAmD;KACpD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,CAAC,QAAQ,GAAG;QAChB,4HAA4H;QAC5H,+FAA+F;QAC/F,wFAAwF;QACxF,0GAA0G;QAC1G,2FAA2F;KAC5F,CAAC;IACF,MAAM,CAAC,IAAI,GAAG;QACZ,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,iEAAiE;YAC9E,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IACF,MAAM,CAAC,KAAK,GAAG;QACb,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5E,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EACT,yGAAyG;SAC5G,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,WAAW,EACT,oJAAoJ;YACtJ,SAAS,EAAE,CAAC,gBAAgB,CAAC;SAC9B,CAAC;QACF,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC9B,WAAW,EACT,oFAAoF;YACtF,SAAS,EAAE,CAAC,UAAU,CAAC;SACxB,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC;YAC7B,WAAW,EAAE,2DAA2D;SACzE,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;QAC5E,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,WAAW,EACT,uFAAuF;SAC1F,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,WAAW,EAAE,mEAAmE;YAChF,OAAO,EAAE,GAAG;YACZ,GAAG,EAAE,EAAE;SACR,CAAC;KACH,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,IAAI,CAAC,IAA2B,CAAC,CAAC;QAE3E,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;YAErB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;oBACrB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,8CAA8C,CAAC,EAAE;wBAC7E,IAAI,EAAE,CAAC;qBACR,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC;oBACvC,OAAO,EAAE,aAAa,GAAG,CAAC,QAAQ,yCAAyC;iBAC5E,CAAC,CAAC;gBACH,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;oBACrC,OAAO;gBACT,CAAC;YACH,CAAC;YAED,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC9B,IAAI,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC5B,QAAQ,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,0CAA0C,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC7B,IAAI,aAAa,EAAE,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;oBACrD,QAAQ,GAAG,MAAM,YAAY,CAAC,6BAA6B,CAAC,CAAC;oBAC7D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxB,IAAI,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;oBACrE,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,KAAK,CACR,qFAAqF,EACrF,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE;gBAChE,QAAQ,EAAE,KAAK,CAAC,KAAK;gBACrB,QAAQ;gBACR,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;gBACpE,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC;gBACvC,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;oBACrB,IAAI,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;oBAClD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;wBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtF,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO;gBAAE,IAAI,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrF,MAAM,QAAQ,GACZ,IAAI,CAAC,YAAY,KAAK,MAAM;gBAC1B,CAAC,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBACrD,CAAC,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAE9C,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACjC,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,MAAM,QAAQ,GAAG,CAAC,EAAsB,EAAsB,EAAE;gBAC9D,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;oBACpB,UAAU,GAAG,IAAI,CAAC;oBAClB,MAAM,GAAG,GACP,OAAO,EAAE,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5E,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,cAAc,GAAG,GAAG,EAAE,EAAE,CAAC;gBAC3E,CAAC;gBACD,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC;oBACtD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;gBAC3D,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;YACvE,CAAC,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;gBAC3B,cAAc,EAAE,KAAK,CAAC,OAAO;gBAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC;gBAC9D,QAAQ;gBACR,QAAQ;aACT,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CACR,mBAAmB,KAAK,CAAC,OAAO,kCAAkC,GAAG,CAAC,QAAQ,kBAAkB,MAAM,CAAC,SAAS,IAAI,SAAS,IAAI,EACjI,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;gBAC3B,cAAc,EAAE,SAAS;gBACzB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3C,QAAQ,EAAE,mBAAmB,CAAC,SAAS,CAAC;gBACxC,QAAQ;aACT,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CACR,+BAA+B,GAAG,CAAC,QAAQ,gCAAgC,KAAK,CAAC,OAAO,mBAAmB,MAAM,CAAC,SAAS,IAAI,SAAS,IAAI,EAC5I,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC3B,IAAI,CAAC,GAAG,CACN,EAAE,CACA,gBAAgB,GAAG,CAAC,QAAQ,4BAA4B,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,KAAK,CAC3G,CACF,CAAC;YACJ,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,22 @@
|
|
|
1
|
+
import { BaseCommand } from "../../base/command.js";
|
|
2
|
+
export default class VpsResize extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
plan: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
cpu: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
ram: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
disk: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
bandwidth: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
dedicated: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
"payment-method": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
"apply-credits": import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<void>;
|
|
20
|
+
private buildTargetSpec;
|
|
21
|
+
private quoteRows;
|
|
22
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { Args, Flags } from "@oclif/core";
|
|
2
|
+
import { BaseCommand } from "../../base/command.js";
|
|
3
|
+
import { resolveVpsRef } from "../../ui/vps-resolve.js";
|
|
4
|
+
import { confirmDestructive, yesRequiredMessage } from "../../ui/confirm.js";
|
|
5
|
+
import { isInteractive, panel, summary } from "../../ui/wizard.js";
|
|
6
|
+
import { ok, statusColor } from "../../ui/glyphs.js";
|
|
7
|
+
import { pickPayment } from "../../ui/payment.js";
|
|
8
|
+
export default class VpsResize extends BaseCommand {
|
|
9
|
+
static description = [
|
|
10
|
+
"Resize a VPS (change CPU / RAM / disk / bandwidth in place).",
|
|
11
|
+
"",
|
|
12
|
+
"Shows a prorated quote first, then confirms before charging. Upsizes",
|
|
13
|
+
"charge the payment method immediately; downsizes issue a pro-rated",
|
|
14
|
+
"credit instead. Disk can only grow. On a TTY you get a y/N prompt;",
|
|
15
|
+
"when stdout is piped, pass --yes or the command exits 1 without acting.",
|
|
16
|
+
"Use `vps resize quote <id>` to preview the cost without charging.",
|
|
17
|
+
].join("\n");
|
|
18
|
+
static examples = [
|
|
19
|
+
"<%= config.bin %> vps resize 019e... --ram 8 --yes # bump RAM to 8 GB; keep CPU/disk",
|
|
20
|
+
"<%= config.bin %> vps resize 019e... --plan <planId> --payment-method <id> --yes",
|
|
21
|
+
"<%= config.bin %> vps resize 019e... --cpu 4 --ram 8 --disk 120 # TTY: quote + confirm interactively",
|
|
22
|
+
"<%= config.bin %> vps resize 019e... --disk 200 --apply-credits -o json",
|
|
23
|
+
];
|
|
24
|
+
static args = {
|
|
25
|
+
id: Args.string({
|
|
26
|
+
description: "VPS id (full or the short id from `vps list`), hostname, or IP.",
|
|
27
|
+
required: true,
|
|
28
|
+
}),
|
|
29
|
+
};
|
|
30
|
+
static flags = {
|
|
31
|
+
plan: Flags.string({
|
|
32
|
+
description: "Plan id from `synteq catalog` — seeds the target CPU/RAM/disk/bandwidth spec. Individual --cpu/--ram/--disk/--bandwidth flags override it.",
|
|
33
|
+
}),
|
|
34
|
+
cpu: Flags.integer({
|
|
35
|
+
description: "Target CPU cores (>=1). Defaults to the VPS's current cores.",
|
|
36
|
+
min: 1,
|
|
37
|
+
}),
|
|
38
|
+
ram: Flags.integer({
|
|
39
|
+
description: "Target RAM in GB (>=1). Defaults to the VPS's current RAM.",
|
|
40
|
+
min: 1,
|
|
41
|
+
}),
|
|
42
|
+
disk: Flags.integer({
|
|
43
|
+
description: "Target disk in GB (grow-only, >=1). Defaults to the current disk.",
|
|
44
|
+
min: 1,
|
|
45
|
+
}),
|
|
46
|
+
bandwidth: Flags.integer({
|
|
47
|
+
description: "Target monthly bandwidth allowance in TB (>=1). Defaults to the current allowance.",
|
|
48
|
+
min: 1,
|
|
49
|
+
}),
|
|
50
|
+
dedicated: Flags.boolean({
|
|
51
|
+
description: "Switch to dedicated (pinned) CPU cores. Use --no-dedicated for shared. Omit to keep the current tier.",
|
|
52
|
+
allowNo: true,
|
|
53
|
+
}),
|
|
54
|
+
"payment-method": Flags.string({
|
|
55
|
+
description: "Saved payment method id (upsizes only; downsizes never charge).",
|
|
56
|
+
}),
|
|
57
|
+
"apply-credits": Flags.boolean({
|
|
58
|
+
description: "Apply team credit balance first (upsizes only).",
|
|
59
|
+
}),
|
|
60
|
+
yes: Flags.boolean({
|
|
61
|
+
char: "y",
|
|
62
|
+
description: "Skip the confirmation prompt. Required when stdout is not a TTY (the quote is still shown to stderr first).",
|
|
63
|
+
}),
|
|
64
|
+
};
|
|
65
|
+
async run() {
|
|
66
|
+
await this.initClients();
|
|
67
|
+
const { args, flags } = await this.parse(this.ctor);
|
|
68
|
+
try {
|
|
69
|
+
const vps = await resolveVpsRef(this.clients.api, args.id);
|
|
70
|
+
const vpsId = vps.id;
|
|
71
|
+
const target = await this.buildTargetSpec(vps, flags);
|
|
72
|
+
const quote = await this.clients.api.vpsControl.resizeQuote(vpsId, {
|
|
73
|
+
cpu_cores: target.cpu_cores,
|
|
74
|
+
ram_mb: target.ram_mb,
|
|
75
|
+
disk_gb: target.disk_gb,
|
|
76
|
+
bandwidth_tb: target.bandwidth_tb,
|
|
77
|
+
dedicated: target.dedicated,
|
|
78
|
+
});
|
|
79
|
+
const quoteLines = this.quoteRows(vps, quote);
|
|
80
|
+
if (this.outputFormat === "table") {
|
|
81
|
+
this.log(summary(`Resize ${vps.hostname}`, quoteLines));
|
|
82
|
+
}
|
|
83
|
+
else if (!flags.yes) {
|
|
84
|
+
this.log(JSON.stringify({ quote }, null, 2));
|
|
85
|
+
}
|
|
86
|
+
if (!quote.can_resize) {
|
|
87
|
+
this.error(quote.message || "This resize is not allowed.", { exit: 1 });
|
|
88
|
+
}
|
|
89
|
+
const isUpsize = quote.action === "charge";
|
|
90
|
+
const isDownsize = quote.action === "credit" || quote.action === "defer";
|
|
91
|
+
const restartNote = quote.restart_required
|
|
92
|
+
? " This VPS is running and the change stages CPU/RAM until the next power-cycle."
|
|
93
|
+
: "";
|
|
94
|
+
let payment;
|
|
95
|
+
if (isUpsize) {
|
|
96
|
+
payment = await pickPayment({
|
|
97
|
+
api: this.clients.api,
|
|
98
|
+
tokens: this.clients.tokens,
|
|
99
|
+
config: this.clients.config,
|
|
100
|
+
flow: "vps_addon",
|
|
101
|
+
estimatedCost: quote.prorated_amount,
|
|
102
|
+
prefill: {
|
|
103
|
+
paymentMethodId: flags["payment-method"],
|
|
104
|
+
applyCredits: flags["apply-credits"],
|
|
105
|
+
},
|
|
106
|
+
noInteractive: !isInteractive() || flags.yes,
|
|
107
|
+
log: (msg) => this.log(msg),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
if (!flags.yes) {
|
|
111
|
+
if (!isInteractive()) {
|
|
112
|
+
this.error(yesRequiredMessage("`vps resize`"), { exit: 1 });
|
|
113
|
+
}
|
|
114
|
+
const priceLine = isUpsize
|
|
115
|
+
? `Charge ~$${Math.abs(quote.prorated_amount).toFixed(2)} now (new monthly $${quote.new_monthly_price.toFixed(2)})`
|
|
116
|
+
: isDownsize
|
|
117
|
+
? quote.action === "defer"
|
|
118
|
+
? `No charge now — the lower monthly $${quote.new_monthly_price.toFixed(2)} applies at renewal`
|
|
119
|
+
: `Issue ~$${Math.abs(quote.prorated_amount).toFixed(2)} credit (new monthly $${quote.new_monthly_price.toFixed(2)})`
|
|
120
|
+
: `No charge (spec/bandwidth tweak)`;
|
|
121
|
+
const outcome = await confirmDestructive({
|
|
122
|
+
message: `Resize ${vps.hostname}? ${priceLine}.${restartNote}`,
|
|
123
|
+
});
|
|
124
|
+
if (outcome !== "confirmed") {
|
|
125
|
+
this.log("Aborted — VPS left unchanged.");
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const body = {
|
|
130
|
+
cpu_cores: target.cpu_cores,
|
|
131
|
+
ram_mb: target.ram_mb,
|
|
132
|
+
disk_gb: target.disk_gb,
|
|
133
|
+
bandwidth_tb: target.bandwidth_tb,
|
|
134
|
+
dedicated: target.dedicated,
|
|
135
|
+
payment_method_id: payment?.payment_method_id,
|
|
136
|
+
apply_credits: payment?.apply_credits || undefined,
|
|
137
|
+
};
|
|
138
|
+
const result = await this.clients.api.vpsControl.resize(vpsId, body);
|
|
139
|
+
this.emit(result, () => {
|
|
140
|
+
this.log(panel("Resize submitted", [
|
|
141
|
+
["Status", statusColor(result.status)],
|
|
142
|
+
["Direction", result.direction],
|
|
143
|
+
["Charge id", result.charge_id ?? undefined],
|
|
144
|
+
["Credits applied", result.credits_applied],
|
|
145
|
+
["Checkout URL", result.checkout_url ?? undefined],
|
|
146
|
+
["Failure reason", result.failure_reason ?? undefined],
|
|
147
|
+
]));
|
|
148
|
+
if (result.status === "succeeded") {
|
|
149
|
+
this.log(ok(quote.restart_required
|
|
150
|
+
? "Resize applied — power-cycle the VPS to activate the new CPU/RAM."
|
|
151
|
+
: "Resize applied."));
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
this.fail(err);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async buildTargetSpec(vps, flags) {
|
|
160
|
+
let seedCpu = vps.plan?.cpu_cores ?? 0;
|
|
161
|
+
let seedRamMb = vps.plan?.ram_mb ?? 0;
|
|
162
|
+
let seedDisk = vps.plan?.disk_gb ?? 0;
|
|
163
|
+
if (flags.plan) {
|
|
164
|
+
const catalog = await this.clients.api.vpsOrders.catalog();
|
|
165
|
+
const plan = catalog.plans.find((p) => p.id === flags.plan);
|
|
166
|
+
if (!plan) {
|
|
167
|
+
this.error(`Plan ${flags.plan} not found in the catalog. Run \`synteq vps catalog\`.`, { exit: 1 });
|
|
168
|
+
}
|
|
169
|
+
seedCpu = plan.cpu_cores;
|
|
170
|
+
seedRamMb = plan.ram_mb;
|
|
171
|
+
seedDisk = plan.disk_gb;
|
|
172
|
+
}
|
|
173
|
+
const cpu = flags.cpu ?? seedCpu;
|
|
174
|
+
const ramMb = flags.ram !== undefined ? flags.ram * 1024 : seedRamMb;
|
|
175
|
+
const disk = flags.disk ?? seedDisk;
|
|
176
|
+
if (cpu < 1 || ramMb < 512 || disk < 1) {
|
|
177
|
+
this.error("Could not resolve a full target spec. Pass --plan or all of --cpu/--ram/--disk.", { exit: 1 });
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
cpu_cores: cpu,
|
|
181
|
+
ram_mb: ramMb,
|
|
182
|
+
disk_gb: disk,
|
|
183
|
+
bandwidth_tb: flags.bandwidth,
|
|
184
|
+
dedicated: flags.dedicated === undefined ? null : flags.dedicated,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
quoteRows(vps, q) {
|
|
188
|
+
const specStr = (s) => `${s.cpu_cores} vCPU · ${Math.round(s.ram_mb / 1024)} GB RAM · ${s.disk_gb} GB disk${s.dedicated ? " · dedicated" : ""}`;
|
|
189
|
+
return [
|
|
190
|
+
["VPS", `${vps.hostname} (${vps.status})`],
|
|
191
|
+
["Current", specStr(q.current_spec)],
|
|
192
|
+
["Requested", specStr(q.requested_spec)],
|
|
193
|
+
["Action", q.action],
|
|
194
|
+
["Current monthly", `$${q.current_monthly_price.toFixed(2)}`],
|
|
195
|
+
["New monthly", `$${q.new_monthly_price.toFixed(2)}`],
|
|
196
|
+
[
|
|
197
|
+
q.action === "credit" ? "Credit today" : "Charge today",
|
|
198
|
+
`$${Math.abs(q.prorated_amount).toFixed(2)}`,
|
|
199
|
+
],
|
|
200
|
+
["Restart required", q.restart_required ? "yes (power-cycle to apply CPU/RAM)" : undefined],
|
|
201
|
+
["In stock", q.in_stock ? undefined : `no — ${q.out_of_stock_reason ?? "capacity"}`],
|
|
202
|
+
];
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=resize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resize.js","sourceRoot":"","sources":["../../../src/commands/vps/resize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BaseCommand } from "../../base/command.js";
|
|
2
|
+
export default class VpsStats extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static args: {
|
|
6
|
+
id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
timeframe: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|