@synteq/cli 0.1.5 → 0.1.6

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 (201) hide show
  1. package/dist/api/client.d.ts +28 -37
  2. package/dist/api/client.js +42 -49
  3. package/dist/api/client.js.map +1 -1
  4. package/dist/api/types.d.ts +10 -22
  5. package/dist/commands/api.js +4 -4
  6. package/dist/commands/api.js.map +1 -1
  7. package/dist/commands/catalog.js +1 -1
  8. package/dist/commands/catalog.js.map +1 -1
  9. package/dist/commands/config/set-api-url.js +37 -2
  10. package/dist/commands/config/set-api-url.js.map +1 -1
  11. package/dist/commands/gpu/activity.d.ts +1 -0
  12. package/dist/commands/gpu/activity.js +6 -0
  13. package/dist/commands/gpu/activity.js.map +1 -1
  14. package/dist/commands/gpu/bandwidth.d.ts +1 -0
  15. package/dist/commands/gpu/bandwidth.js +4 -0
  16. package/dist/commands/gpu/bandwidth.js.map +1 -1
  17. package/dist/commands/gpu/boot-order.d.ts +1 -0
  18. package/dist/commands/gpu/boot-order.js +5 -0
  19. package/dist/commands/gpu/boot-order.js.map +1 -1
  20. package/dist/commands/gpu/console.d.ts +1 -0
  21. package/dist/commands/gpu/console.js +5 -0
  22. package/dist/commands/gpu/console.js.map +1 -1
  23. package/dist/commands/gpu/details.d.ts +2 -0
  24. package/dist/commands/gpu/details.js +9 -0
  25. package/dist/commands/gpu/details.js.map +1 -1
  26. package/dist/commands/gpu/ip/add.d.ts +1 -0
  27. package/dist/commands/gpu/ip/add.js +6 -0
  28. package/dist/commands/gpu/ip/add.js.map +1 -1
  29. package/dist/commands/gpu/ip/list.d.ts +1 -0
  30. package/dist/commands/gpu/ip/list.js +4 -0
  31. package/dist/commands/gpu/ip/list.js.map +1 -1
  32. package/dist/commands/gpu/order.js +2 -0
  33. package/dist/commands/gpu/order.js.map +1 -1
  34. package/dist/commands/gpu/power.d.ts +1 -0
  35. package/dist/commands/gpu/power.js +6 -0
  36. package/dist/commands/gpu/power.js.map +1 -1
  37. package/dist/commands/gpu/reinstall.d.ts +1 -0
  38. package/dist/commands/gpu/reinstall.js +7 -0
  39. package/dist/commands/gpu/reinstall.js.map +1 -1
  40. package/dist/commands/gpu/resize.d.ts +1 -0
  41. package/dist/commands/gpu/resize.js +6 -0
  42. package/dist/commands/gpu/resize.js.map +1 -1
  43. package/dist/commands/gpu/stats.d.ts +1 -0
  44. package/dist/commands/gpu/stats.js +5 -0
  45. package/dist/commands/gpu/stats.js.map +1 -1
  46. package/dist/commands/instant-metal/activity.d.ts +1 -0
  47. package/dist/commands/instant-metal/activity.js +6 -0
  48. package/dist/commands/instant-metal/activity.js.map +1 -1
  49. package/dist/commands/instant-metal/bandwidth.d.ts +1 -0
  50. package/dist/commands/instant-metal/bandwidth.js +4 -0
  51. package/dist/commands/instant-metal/bandwidth.js.map +1 -1
  52. package/dist/commands/instant-metal/boot-order.d.ts +1 -0
  53. package/dist/commands/instant-metal/boot-order.js +5 -0
  54. package/dist/commands/instant-metal/boot-order.js.map +1 -1
  55. package/dist/commands/instant-metal/console.d.ts +1 -0
  56. package/dist/commands/instant-metal/console.js +5 -0
  57. package/dist/commands/instant-metal/console.js.map +1 -1
  58. package/dist/commands/instant-metal/details.d.ts +2 -0
  59. package/dist/commands/instant-metal/details.js +9 -0
  60. package/dist/commands/instant-metal/details.js.map +1 -1
  61. package/dist/commands/instant-metal/ip/add.d.ts +1 -0
  62. package/dist/commands/instant-metal/ip/add.js +6 -0
  63. package/dist/commands/instant-metal/ip/add.js.map +1 -1
  64. package/dist/commands/instant-metal/ip/list.d.ts +1 -0
  65. package/dist/commands/instant-metal/ip/list.js +4 -0
  66. package/dist/commands/instant-metal/ip/list.js.map +1 -1
  67. package/dist/commands/instant-metal/order.js +2 -0
  68. package/dist/commands/instant-metal/order.js.map +1 -1
  69. package/dist/commands/instant-metal/power.d.ts +1 -0
  70. package/dist/commands/instant-metal/power.js +6 -0
  71. package/dist/commands/instant-metal/power.js.map +1 -1
  72. package/dist/commands/instant-metal/reinstall.d.ts +1 -0
  73. package/dist/commands/instant-metal/reinstall.js +7 -0
  74. package/dist/commands/instant-metal/reinstall.js.map +1 -1
  75. package/dist/commands/instant-metal/resize.d.ts +1 -0
  76. package/dist/commands/instant-metal/resize.js +6 -0
  77. package/dist/commands/instant-metal/resize.js.map +1 -1
  78. package/dist/commands/instant-metal/stats.d.ts +1 -0
  79. package/dist/commands/instant-metal/stats.js +5 -0
  80. package/dist/commands/instant-metal/stats.js.map +1 -1
  81. package/dist/commands/order/gpu.js +2 -0
  82. package/dist/commands/order/gpu.js.map +1 -1
  83. package/dist/commands/order/instant-metal.js +2 -0
  84. package/dist/commands/order/instant-metal.js.map +1 -1
  85. package/dist/commands/order/storage.js +1 -1
  86. package/dist/commands/order/storage.js.map +1 -1
  87. package/dist/commands/order/vps.js +2 -0
  88. package/dist/commands/order/vps.js.map +1 -1
  89. package/dist/commands/os-images.js +1 -1
  90. package/dist/commands/os-images.js.map +1 -1
  91. package/dist/commands/resources.js +22 -21
  92. package/dist/commands/resources.js.map +1 -1
  93. package/dist/commands/storage/attach.d.ts +1 -1
  94. package/dist/commands/storage/attach.js +11 -11
  95. package/dist/commands/storage/attach.js.map +1 -1
  96. package/dist/commands/storage/detach.js +2 -2
  97. package/dist/commands/storage/detach.js.map +1 -1
  98. package/dist/commands/storage/list.js +1 -1
  99. package/dist/commands/storage/list.js.map +1 -1
  100. package/dist/commands/storage/order.d.ts +1 -1
  101. package/dist/commands/storage/order.js +10 -10
  102. package/dist/commands/storage/order.js.map +1 -1
  103. package/dist/commands/vds/activity.d.ts +1 -0
  104. package/dist/commands/vds/activity.js +6 -0
  105. package/dist/commands/vds/activity.js.map +1 -1
  106. package/dist/commands/vds/bandwidth.d.ts +1 -0
  107. package/dist/commands/vds/bandwidth.js +4 -0
  108. package/dist/commands/vds/bandwidth.js.map +1 -1
  109. package/dist/commands/vds/boot-order.d.ts +1 -0
  110. package/dist/commands/vds/boot-order.js +5 -0
  111. package/dist/commands/vds/boot-order.js.map +1 -1
  112. package/dist/commands/vds/console.d.ts +1 -0
  113. package/dist/commands/vds/console.js +5 -0
  114. package/dist/commands/vds/console.js.map +1 -1
  115. package/dist/commands/vds/details.d.ts +2 -0
  116. package/dist/commands/vds/details.js +9 -0
  117. package/dist/commands/vds/details.js.map +1 -1
  118. package/dist/commands/vds/ip/add.d.ts +1 -0
  119. package/dist/commands/vds/ip/add.js +6 -0
  120. package/dist/commands/vds/ip/add.js.map +1 -1
  121. package/dist/commands/vds/ip/list.d.ts +1 -0
  122. package/dist/commands/vds/ip/list.js +4 -0
  123. package/dist/commands/vds/ip/list.js.map +1 -1
  124. package/dist/commands/vds/order.d.ts +1 -0
  125. package/dist/commands/vds/order.js +11 -3
  126. package/dist/commands/vds/order.js.map +1 -1
  127. package/dist/commands/vds/power.d.ts +1 -0
  128. package/dist/commands/vds/power.js +6 -0
  129. package/dist/commands/vds/power.js.map +1 -1
  130. package/dist/commands/vds/reinstall.d.ts +1 -0
  131. package/dist/commands/vds/reinstall.js +7 -0
  132. package/dist/commands/vds/reinstall.js.map +1 -1
  133. package/dist/commands/vds/resize.d.ts +1 -0
  134. package/dist/commands/vds/resize.js +6 -0
  135. package/dist/commands/vds/resize.js.map +1 -1
  136. package/dist/commands/vds/stats.d.ts +1 -0
  137. package/dist/commands/vds/stats.js +5 -0
  138. package/dist/commands/vds/stats.js.map +1 -1
  139. package/dist/commands/vps/activity.js +4 -4
  140. package/dist/commands/vps/activity.js.map +1 -1
  141. package/dist/commands/vps/bandwidth.js +5 -5
  142. package/dist/commands/vps/bandwidth.js.map +1 -1
  143. package/dist/commands/vps/boot-order.js +5 -5
  144. package/dist/commands/vps/boot-order.js.map +1 -1
  145. package/dist/commands/vps/console.js +9 -9
  146. package/dist/commands/vps/console.js.map +1 -1
  147. package/dist/commands/vps/details.d.ts +4 -0
  148. package/dist/commands/vps/details.js +20 -9
  149. package/dist/commands/vps/details.js.map +1 -1
  150. package/dist/commands/vps/ip/add.js +10 -9
  151. package/dist/commands/vps/ip/add.js.map +1 -1
  152. package/dist/commands/vps/ip/list.js +6 -6
  153. package/dist/commands/vps/ip/list.js.map +1 -1
  154. package/dist/commands/vps/list.js +4 -4
  155. package/dist/commands/vps/list.js.map +1 -1
  156. package/dist/commands/vps/order.d.ts +3 -2
  157. package/dist/commands/vps/order.js +25 -16
  158. package/dist/commands/vps/order.js.map +1 -1
  159. package/dist/commands/vps/power.js +14 -13
  160. package/dist/commands/vps/power.js.map +1 -1
  161. package/dist/commands/vps/reinstall.js +14 -14
  162. package/dist/commands/vps/reinstall.js.map +1 -1
  163. package/dist/commands/vps/resize.js +10 -9
  164. package/dist/commands/vps/resize.js.map +1 -1
  165. package/dist/commands/vps/stats.js +7 -7
  166. package/dist/commands/vps/stats.js.map +1 -1
  167. package/dist/help.js +0 -1
  168. package/dist/help.js.map +1 -1
  169. package/dist/tui/screens/Dashboard.js +1 -1
  170. package/dist/tui/screens/Dashboard.js.map +1 -1
  171. package/dist/tui/screens/Order.js +307 -78
  172. package/dist/tui/screens/Order.js.map +1 -1
  173. package/dist/tui/screens/Resources.js +31 -60
  174. package/dist/tui/screens/Resources.js.map +1 -1
  175. package/dist/ui/image-resolve.js +1 -1
  176. package/dist/ui/image-resolve.js.map +1 -1
  177. package/dist/ui/payment.d.ts +1 -1
  178. package/dist/ui/resource-detail.d.ts +3 -0
  179. package/dist/ui/{vps-detail.js → resource-detail.js} +8 -8
  180. package/dist/ui/resource-detail.js.map +1 -0
  181. package/dist/ui/resource-resolve.d.ts +4 -0
  182. package/dist/ui/resource-resolve.js +24 -0
  183. package/dist/ui/resource-resolve.js.map +1 -0
  184. package/dist/ui/wait.d.ts +1 -1
  185. package/dist/ui/wait.js +4 -4
  186. package/dist/ui/wait.js.map +1 -1
  187. package/package.json +1 -4
  188. package/dist/commands/bare-metal/index.d.ts +0 -4
  189. package/dist/commands/bare-metal/index.js +0 -5
  190. package/dist/commands/bare-metal/index.js.map +0 -1
  191. package/dist/commands/bare-metal/list.d.ts +0 -9
  192. package/dist/commands/bare-metal/list.js +0 -38
  193. package/dist/commands/bare-metal/list.js.map +0 -1
  194. package/dist/commands/bare-metal/order.d.ts +0 -6
  195. package/dist/commands/bare-metal/order.js +0 -27
  196. package/dist/commands/bare-metal/order.js.map +0 -1
  197. package/dist/ui/vps-detail.d.ts +0 -3
  198. package/dist/ui/vps-detail.js.map +0 -1
  199. package/dist/ui/vps-resolve.d.ts +0 -4
  200. package/dist/ui/vps-resolve.js +0 -24
  201. package/dist/ui/vps-resolve.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { Args, Flags } from "@oclif/core";
2
2
  import { BaseCommand } from "../../base/command.js";
3
- import { resolveVpsId } from "../../ui/vps-resolve.js";
3
+ import { resolveResourceId } from "../../ui/resource-resolve.js";
4
4
  import { panel } from "../../ui/wizard.js";
5
5
  import { statusColor } from "../../ui/glyphs.js";
6
6
  import { sparkline } from "../../ui/sparkline.js";
@@ -19,7 +19,7 @@ export default class ResourceStats extends BaseCommand {
19
19
  ];
20
20
  static args = {
21
21
  id: Args.string({
22
- description: "VPS id (full or the short id from `vps list`), hostname, or IP.",
22
+ description: "Resource id (full or the short id from `vps list` / `vds list` / `gpu list` / `instant-metal list`), hostname, or IP.",
23
23
  required: true,
24
24
  }),
25
25
  };
@@ -35,11 +35,11 @@ export default class ResourceStats extends BaseCommand {
35
35
  const { args, flags } = await this.parse(this.ctor);
36
36
  const timeframe = flags.timeframe;
37
37
  try {
38
- const vpsId = await resolveVpsId(this.clients.api, args.id);
38
+ const resourceId = await resolveResourceId(this.clients.api, args.id);
39
39
  const [statsRaw, rrd] = await Promise.all([
40
- this.clients.api.vps.stats(vpsId, timeframe),
41
- this.clients.api.vps
42
- .rrd(vpsId, timeframe)
40
+ this.clients.api.virtualized.stats(resourceId, timeframe),
41
+ this.clients.api.virtualized
42
+ .rrd(resourceId, timeframe)
43
43
  .catch(() => ({ points: [] })),
44
44
  ]);
45
45
  if (this.outputFormat === "json") {
@@ -49,7 +49,7 @@ export default class ResourceStats extends BaseCommand {
49
49
  const point = pickLatestPoint(statsRaw);
50
50
  const points = asPoints(statsRaw);
51
51
  const status = point?.status ?? "";
52
- this.log(panel(`VPS ${vpsId} — current`, [
52
+ this.log(panel(`${resourceId} — current`, [
53
53
  ["Status", status ? statusColor(status) : ""],
54
54
  ["CPU", formatCpu(point?.cpu)],
55
55
  ["Memory", formatUsagePair(point?.mem, point?.maxmem)],
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/commands/vps/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/commands/vps/stats.ts"],"names":[],"mappings":"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"}
package/dist/help.js CHANGED
@@ -8,7 +8,6 @@ const ROOT_ORDER = [
8
8
  "gpu",
9
9
  "vds",
10
10
  "instant-metal",
11
- "bare-metal",
12
11
  "storage",
13
12
  "transit",
14
13
  "resources",
package/dist/help.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ const items = [
16
16
  {
17
17
  value: "resources",
18
18
  label: "Resources",
19
- hint: "VPS, GPU, metal, storage",
19
+ hint: "VPS, VDS, GPU, Instant Metal, storage",
20
20
  keybind: "ctrl+r",
21
21
  },
22
22
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../../src/tui/screens/Dashboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../../src/tui/screens/Dashboard.tsx"],"names":[],"mappings":"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"}
@@ -39,8 +39,7 @@ const emptyDraft = {
39
39
  const PROGRESS_STEPS = [
40
40
  "kind",
41
41
  "project",
42
- "plan",
43
- "location",
42
+ "plan-location",
44
43
  "image",
45
44
  "hostname",
46
45
  "auth",
@@ -52,17 +51,15 @@ function stepsForKind(kind) {
52
51
  if (kind === "vps") {
53
52
  base.push("vps-spec", "image", "hostname", "auth", "payment", "summary");
54
53
  }
55
- else if (kind === "gpu" || kind === "dedicated") {
56
- base.push("plan", "location", "image", "hostname", "auth", "payment", "summary");
54
+ else if (kind === "gpu" || kind === "dedicated" || kind === "vds") {
55
+ // Split plan/tier picker + location picker into one step so we can probe
56
+ // per-location availability live (server-side /public/order/validate) and
57
+ // offer notify-me when the chosen location is out of stock.
58
+ base.push("plan-location", "image", "hostname", "auth", "payment", "summary");
57
59
  }
58
60
  else if (kind === "storage") {
59
61
  base.push("size", "location", "hostname", "payment", "summary");
60
62
  }
61
- else if (kind === "vds") {
62
- // VDS: pick a tier from the ladder, then the standard trailing steps.
63
- // Server resolves cpu/ram/disk/price from tier_category_slug + tier_index.
64
- base.push("vds-tier", "location", "image", "hostname", "auth", "payment", "summary");
65
- }
66
63
  else {
67
64
  return PROGRESS_STEPS;
68
65
  }
@@ -92,7 +89,7 @@ export function Order() {
92
89
  (async () => {
93
90
  try {
94
91
  const [orderCatalog, storageCatalog, projects, methods, balance] = await Promise.all([
95
- api.vpsOrders.catalog().catch(() => null),
92
+ api.orders.catalog().catch(() => null),
96
93
  api.storage.catalog().catch(() => null),
97
94
  api.projects.list().catch(() => []),
98
95
  api.payments.methods().catch(() => []),
@@ -242,7 +239,7 @@ export function Order() {
242
239
  ? draft.sshKeyId
243
240
  : undefined,
244
241
  };
245
- const out = await api.vpsOrders.create(body);
242
+ const out = await api.orders.create(body);
246
243
  setResult({
247
244
  ok: true,
248
245
  orderId: out.order_id,
@@ -297,12 +294,10 @@ function StepRouter(props) {
297
294
  return React.createElement(KindStep, { draft: draft, setDraft: setDraft, goNext: goNext });
298
295
  case "project":
299
296
  return React.createElement(ProjectStep, { projects: cat.projects, draft: draft, setDraft: setDraft, goNext: goNext });
300
- case "plan":
301
- return (React.createElement(PlanStep, { catalog: cat.orderCatalog, draft: draft, setDraft: setDraft, goNext: goNext }));
297
+ case "plan-location":
298
+ return (React.createElement(PlanLocationStep, { catalog: cat.orderCatalog, userEmail: props.userEmail, draft: draft, setDraft: setDraft, goNext: goNext }));
302
299
  case "vps-spec":
303
300
  return (React.createElement(VpsSpecStep, { customConfig: cat.orderCatalog?.custom_config ?? null, locations: cat.orderCatalog?.locations ?? [], userEmail: props.userEmail, draft: draft, setDraft: setDraft, goNext: goNext }));
304
- case "vds-tier":
305
- return (React.createElement(VdsTierStep, { catalog: cat.orderCatalog, draft: draft, setDraft: setDraft, goNext: goNext }));
306
301
  case "size":
307
302
  return (React.createElement(SizeStep, { catalog: cat.storageCatalog, draft: draft, setDraft: setDraft, goNext: goNext }));
308
303
  case "location":
@@ -334,7 +329,7 @@ function KindStep({ draft, setDraft, goNext, }) {
334
329
  { value: "vds", label: "VDS", hint: "tier-based performance servers (order via web for now)" },
335
330
  { value: "gpu", label: "GPU", hint: "preset GPU-bearing plans" },
336
331
  { value: "dedicated", label: "Instant Metal", hint: "whole physical hosts" },
337
- { value: "storage", label: "Storage", hint: "block volume (attach to a VPS later)" },
332
+ { value: "storage", label: "Storage", hint: "block volume (attach to a resource later)" },
338
333
  ];
339
334
  return (React.createElement(Panel, { title: "What are you ordering?", paddingX: 3, paddingY: 1, width: 80 },
340
335
  React.createElement(Menu, { items: items, initialIndex: Math.max(0, items.findIndex((i) => i.value === draft.kind)), onSelect: (v) => {
@@ -375,33 +370,6 @@ function ProjectStep({ projects, draft, setDraft, goNext, }) {
375
370
  goNext();
376
371
  } })));
377
372
  }
378
- function PlanStep({ catalog, draft, setDraft, goNext, }) {
379
- if (!catalog) {
380
- return (React.createElement(Panel, { title: "Catalog unavailable", paddingX: 3, paddingY: 1, width: 80 },
381
- React.createElement(Text, { color: colors.error }, "Couldn't load the order catalog. Try again later.")));
382
- }
383
- const category = draft.kind === "gpu" ? "gpu_cloud" : "dedicated";
384
- const filtered = catalog.plans.filter((p) => p.category === category || p.category.replace("_", "-") === draft.kind);
385
- const plans = filtered.length ? filtered : catalog.plans;
386
- if (plans.length === 0) {
387
- return (React.createElement(Panel, { title: "No plans in catalog", paddingX: 3, paddingY: 1, width: 80 },
388
- React.createElement(Text, { color: colors.warning },
389
- "No ",
390
- draft.kind,
391
- " plans are currently offered. Try a different resource type.")));
392
- }
393
- const items = plans.map((p) => ({
394
- value: p.id,
395
- label: planRowLabel(p),
396
- hint: planRowHint(p),
397
- disabled: p.in_stock ? undefined : "out of stock",
398
- }));
399
- return (React.createElement(Panel, { title: `Pick a ${draft.kind === "gpu" ? "GPU" : "Instant Metal"} plan`, paddingX: 3, paddingY: 1, width: 80 },
400
- React.createElement(Menu, { items: items, initialIndex: Math.max(0, items.findIndex((i) => i.value === draft.planId)), onSelect: (v) => {
401
- setDraft((d) => ({ ...d, planId: v, locationId: null }));
402
- goNext();
403
- } })));
404
- }
405
373
  function planRowLabel(p) {
406
374
  return `${p.name} $${p.monthly_price}/mo`;
407
375
  }
@@ -412,44 +380,303 @@ function planRowHint(p) {
412
380
  const extra = p.gpu_model ? ` · ${p.gpu_model}` : "";
413
381
  return `${cores} ${ram} ${disk}${extra}`;
414
382
  }
415
- // VDS-specific tier picker. Reads catalog.categories[slug].slider_config.tiers
416
- // (the same ladder the server enforces at order time) and submits the pick
417
- // as tier_category_slug + tier_index. Different shape from PlanStep (plans)
418
- // and VpsSpecStep (custom sliders) — VDS is a third product family.
419
- function VdsTierStep({ catalog, draft, setDraft, goNext, }) {
383
+ // Combined plan/tier + location picker for VDS, GPU Cloud, and Instant Metal.
384
+ // Mirrors what the VPS custom-spec step does: probe /public/order/validate
385
+ // per-location so the user sees which locations can actually fit the pick,
386
+ // and offer marketing.notifyStock when the chosen location is out of stock.
387
+ //
388
+ // The VPS custom-spec flow lives in its own step (VpsSpecStep) because the
389
+ // left pane is a slider grid rather than a plan/tier list — different shape,
390
+ // same idea.
391
+ function PlanLocationStep({ catalog, userEmail, draft, setDraft, goNext, }) {
392
+ const api = useApi();
420
393
  if (!catalog) {
421
394
  return (React.createElement(Panel, { title: "Catalog unavailable", paddingX: 3, paddingY: 1, width: 80 },
422
395
  React.createElement(Text, { color: colors.error }, "Couldn't load the order catalog. Try again later.")));
423
396
  }
424
- // Find an enabled VDS category with a non-empty ladder. Usually
425
- // exactly one (vds_performance); multiple would need a category
426
- // picker step first — not shipped, we take the first enabled.
427
- const vdsCats = (catalog.categories ?? []).filter((c) => c.slug.startsWith("vds") &&
428
- c.slider_config?.enabled &&
429
- (c.slider_config.tiers?.length ?? 0) > 0);
430
- if (vdsCats.length === 0) {
431
- return (React.createElement(Panel, { title: "No VDS tiers configured", paddingX: 3, paddingY: 1, width: 80 },
432
- React.createElement(Text, { color: colors.warning }, "No VDS tier ladders are enabled on this deployment. Pick a different resource kind or order VDS from the web console.")));
397
+ const isVds = draft.kind === "vds";
398
+ const isDedicated = draft.kind === "dedicated";
399
+ let picks = [];
400
+ let leftTitle = "Pick a plan";
401
+ const validateKind = isVds ? "vds" : isDedicated ? "instant_metal" : "gpu_cloud";
402
+ if (isVds) {
403
+ // Find an enabled VDS category with a non-empty ladder. Usually
404
+ // exactly one (vds_performance); we take the first enabled.
405
+ const vdsCats = (catalog.categories ?? []).filter((c) => c.slug.startsWith("vds") &&
406
+ c.slider_config?.enabled &&
407
+ (c.slider_config.tiers?.length ?? 0) > 0);
408
+ if (vdsCats.length === 0) {
409
+ return (React.createElement(Panel, { title: "No VDS tiers configured", paddingX: 3, paddingY: 1, width: 80 },
410
+ React.createElement(Text, { color: colors.warning }, "No VDS tier ladders are enabled on this deployment. Pick a different resource kind or order VDS from the web console.")));
411
+ }
412
+ const cat = vdsCats[0];
413
+ leftTitle = `Pick a VDS tier (${cat.name ?? cat.slug})`;
414
+ const tiers = cat.slider_config?.tiers ?? [];
415
+ picks = tiers.map((t, i) => ({
416
+ key: `${cat.slug}#${i}`,
417
+ label: `Tier ${i} $${t.monthly_price}/mo`,
418
+ hint: `${t.cpu}c · ${t.ram_gb}GB RAM · ${t.disk_gb}GB disk · ${t.bandwidth_tb}TB BW`,
419
+ cpu_cores: t.cpu,
420
+ ram_gb: t.ram_gb,
421
+ disk_gb: t.disk_gb,
422
+ monthly_price: t.monthly_price,
423
+ in_stock: true, // VDS ladders don't carry a coarse in-stock flag; rely on per-loc probe below.
424
+ tierCategorySlug: cat.slug,
425
+ tierIndex: i,
426
+ dedicated: false,
427
+ }));
433
428
  }
434
- const cat = vdsCats[0];
435
- const tiers = cat.slider_config?.tiers ?? [];
436
- const items = tiers.map((t, i) => ({
437
- value: i,
438
- label: `Tier ${i} $${t.monthly_price}/mo`,
439
- hint: `${t.cpu}c · ${t.ram_gb}GB RAM · ${t.disk_gb}GB disk · ${t.bandwidth_tb}TB BW`,
440
- }));
441
- return (React.createElement(Panel, { title: `Pick a VDS tier (${cat.name ?? cat.slug})`, paddingX: 3, paddingY: 1, width: 80 },
442
- React.createElement(Menu, { items: items, initialIndex: Math.max(0, items.findIndex((i) => i.value === draft.tierIndex)), onSelect: (v) => {
443
- setDraft((d) => ({
444
- ...d,
445
- tierCategorySlug: cat.slug,
446
- tierIndex: v,
447
- // Reset downstream location so the next step re-picks based
448
- // on where this tier is actually available.
449
- locationId: null,
450
- }));
451
- goNext();
452
- } })));
429
+ else {
430
+ const category = isDedicated ? "dedicated" : "gpu_cloud";
431
+ const filtered = catalog.plans.filter((p) => p.category === category || p.category.replace("_", "-") === draft.kind);
432
+ const plans = filtered.length ? filtered : catalog.plans;
433
+ if (plans.length === 0) {
434
+ return (React.createElement(Panel, { title: "No plans in catalog", paddingX: 3, paddingY: 1, width: 80 },
435
+ React.createElement(Text, { color: colors.warning },
436
+ "No ",
437
+ draft.kind,
438
+ " plans are currently offered. Try a different resource type.")));
439
+ }
440
+ leftTitle = `Pick a ${isDedicated ? "Instant Metal" : "GPU"} plan`;
441
+ picks = plans.map((p) => ({
442
+ key: p.id,
443
+ label: planRowLabel(p),
444
+ hint: planRowHint(p),
445
+ cpu_cores: p.cpu_cores,
446
+ ram_gb: p.ram_gb,
447
+ disk_gb: p.disk_gb,
448
+ monthly_price: p.monthly_price,
449
+ in_stock: p.in_stock,
450
+ planId: p.id,
451
+ dedicated: isDedicated,
452
+ }));
453
+ }
454
+ const locations = catalog.locations;
455
+ const hasLocations = locations.length > 0;
456
+ // Initial cursor: last-picked selection if present, else the first
457
+ // in-stock (plan-level) row; falls back to 0.
458
+ const initialPickIdx = (() => {
459
+ if (isVds && draft.tierIndex != null && draft.tierCategorySlug) {
460
+ const idx = picks.findIndex((p) => p.tierCategorySlug === draft.tierCategorySlug &&
461
+ p.tierIndex === draft.tierIndex);
462
+ if (idx >= 0)
463
+ return idx;
464
+ }
465
+ if (!isVds && draft.planId) {
466
+ const idx = picks.findIndex((p) => p.planId === draft.planId);
467
+ if (idx >= 0)
468
+ return idx;
469
+ }
470
+ const firstInStock = picks.findIndex((p) => p.in_stock);
471
+ return firstInStock >= 0 ? firstInStock : 0;
472
+ })();
473
+ const [pickCursor, setPickCursor] = useState(initialPickIdx);
474
+ const [locCursor, setLocCursor] = useState(() => {
475
+ const idx = locations.findIndex((l) => l.id === draft.locationId);
476
+ return idx >= 0 ? idx : 0;
477
+ });
478
+ const [pane, setPane] = useState("pick");
479
+ const [notifyState, setNotifyState] = useState("idle");
480
+ // Availability probe keyed on (pickCursor, location). Cleared whenever
481
+ // the pick changes so a stale in-stock badge can't survive a tier switch.
482
+ const [stockByLoc, setStockByLoc] = useState({});
483
+ const currentPick = picks[pickCursor];
484
+ useEffect(() => {
485
+ // Reset probe results when the pick changes — a Tier 2 might fit where
486
+ // Tier 3 does not (and vice versa), so old flags would lie.
487
+ setStockByLoc({});
488
+ setNotifyState("idle");
489
+ }, [pickCursor]);
490
+ useEffect(() => {
491
+ if (!hasLocations || !currentPick)
492
+ return;
493
+ if (!currentPick.in_stock)
494
+ return; // Plan globally OOS — nothing to probe.
495
+ let cancelled = false;
496
+ // Small debounce so switching picks quickly doesn't fire N * K validate
497
+ // calls.
498
+ const t = setTimeout(() => {
499
+ for (const loc of locations) {
500
+ api.orders
501
+ .validate({
502
+ cpu_cores: currentPick.cpu_cores,
503
+ ram_gb: currentPick.ram_gb,
504
+ disk_gb: currentPick.disk_gb,
505
+ location_id: loc.id,
506
+ dedicated: currentPick.dedicated,
507
+ kind: validateKind,
508
+ })
509
+ .then((res) => {
510
+ if (cancelled)
511
+ return;
512
+ setStockByLoc((m) => ({ ...m, [loc.id]: res.available }));
513
+ })
514
+ .catch(() => {
515
+ // Swallow — the location just stays unmarked; the server will
516
+ // fail the order if the spec truly can't fit, and we've already
517
+ // let the user see the pick.
518
+ });
519
+ }
520
+ }, 250);
521
+ return () => {
522
+ cancelled = true;
523
+ clearTimeout(t);
524
+ };
525
+ // Re-run whenever the pick's specs, the location list, or the kind changes.
526
+ // eslint-disable-next-line react-hooks/exhaustive-deps
527
+ }, [
528
+ hasLocations,
529
+ currentPick?.cpu_cores,
530
+ currentPick?.ram_gb,
531
+ currentPick?.disk_gb,
532
+ currentPick?.dedicated,
533
+ validateKind,
534
+ locations,
535
+ ]);
536
+ const selLoc = hasLocations ? locations[locCursor] ?? null : null;
537
+ const planLevelOOS = Boolean(currentPick && !currentPick.in_stock);
538
+ const locStockKnown = selLoc ? stockByLoc[selLoc.id] !== undefined : false;
539
+ const selInStock = !hasLocations ||
540
+ (!planLevelOOS && (!locStockKnown || stockByLoc[selLoc?.id ?? ""] !== false));
541
+ const canContinue = Boolean(currentPick) && Boolean(selLoc) && selInStock;
542
+ const commit = () => {
543
+ if (!currentPick || !selLoc)
544
+ return;
545
+ setDraft((d) => ({
546
+ ...d,
547
+ planId: currentPick.planId ?? null,
548
+ tierCategorySlug: currentPick.tierCategorySlug ?? null,
549
+ tierIndex: currentPick.tierIndex ?? null,
550
+ locationId: selLoc.id,
551
+ }));
552
+ goNext();
553
+ };
554
+ const requestNotify = async () => {
555
+ if (!selLoc || !currentPick)
556
+ return;
557
+ if (notifyState === "sending" || notifyState === "sent")
558
+ return;
559
+ if (!userEmail) {
560
+ setNotifyState("error");
561
+ return;
562
+ }
563
+ setNotifyState("sending");
564
+ try {
565
+ await api.marketing.notifyStock({
566
+ email: userEmail,
567
+ location_id: selLoc.id,
568
+ plan_id: currentPick.planId ?? null,
569
+ note: `CLI order wizard — ${draft.kind}`,
570
+ config_json: {
571
+ cpu_cores: currentPick.cpu_cores,
572
+ ram_gb: currentPick.ram_gb,
573
+ disk_gb: currentPick.disk_gb,
574
+ dedicated: currentPick.dedicated,
575
+ kind: validateKind,
576
+ tier_category_slug: currentPick.tierCategorySlug ?? null,
577
+ tier_index: currentPick.tierIndex ?? null,
578
+ },
579
+ });
580
+ setNotifyState("sent");
581
+ }
582
+ catch {
583
+ setNotifyState("error");
584
+ }
585
+ };
586
+ useInput((input, key) => {
587
+ if (key.tab) {
588
+ if (hasLocations)
589
+ setPane((p) => (p === "pick" ? "loc" : "pick"));
590
+ return;
591
+ }
592
+ if (pane === "pick") {
593
+ if (key.upArrow) {
594
+ setPickCursor((c) => (c === 0 ? picks.length - 1 : c - 1));
595
+ }
596
+ else if (key.downArrow) {
597
+ setPickCursor((c) => (c === picks.length - 1 ? 0 : c + 1));
598
+ }
599
+ else if (key.return || key.rightArrow) {
600
+ if (hasLocations)
601
+ setPane("loc");
602
+ else
603
+ commit();
604
+ }
605
+ return;
606
+ }
607
+ // pane === "loc"
608
+ if (key.upArrow) {
609
+ setLocCursor((c) => (c === 0 ? locations.length - 1 : c - 1));
610
+ }
611
+ else if (key.downArrow) {
612
+ setLocCursor((c) => (c === locations.length - 1 ? 0 : c + 1));
613
+ }
614
+ else if (key.leftArrow) {
615
+ setPane("pick");
616
+ }
617
+ else if (key.return) {
618
+ if (canContinue)
619
+ commit();
620
+ else
621
+ void requestNotify();
622
+ }
623
+ });
624
+ const buttonLabel = canContinue
625
+ ? "Continue"
626
+ : notifyState === "sent"
627
+ ? "Requested ✓"
628
+ : notifyState === "sending"
629
+ ? "Sending…"
630
+ : "Notify me";
631
+ const pickPanel = (React.createElement(Panel, { title: leftTitle, paddingX: 2, paddingY: 1, width: hasLocations ? 50 : 80, borderColor: pane === "pick" ? colors.accent : undefined },
632
+ React.createElement(Box, { flexDirection: "column" },
633
+ picks.map((p, i) => {
634
+ const isCursor = i === pickCursor;
635
+ const disabled = !p.in_stock;
636
+ return (React.createElement(Box, { key: p.key },
637
+ React.createElement(Text, { color: isCursor
638
+ ? pane === "pick"
639
+ ? colors.accent
640
+ : colors.text
641
+ : colors.dim }, isCursor ? `${glyphs.chevronRight} ` : " "),
642
+ React.createElement(Text, { bold: isCursor, color: disabled
643
+ ? colors.dim
644
+ : isCursor && pane === "pick"
645
+ ? colors.accent
646
+ : colors.text }, p.label),
647
+ React.createElement(Text, { color: colors.dim }, ` ${p.hint}`),
648
+ disabled ? (React.createElement(Text, { color: colors.dim }, " out of stock")) : null));
649
+ }),
650
+ React.createElement(Box, { marginTop: 1 },
651
+ React.createElement(ActionButton, { keybind: "\u21B5", label: buttonLabel, onPress: () => (canContinue ? commit() : void requestNotify()), focused: pane === "pick" && !hasLocations })),
652
+ selLoc && !canContinue && currentPick ? (React.createElement(Box, null,
653
+ React.createElement(Text, { color: notifyState === "sent" ? colors.dim : colors.warning }, notifyState === "sent"
654
+ ? `We'll email you when ${selLoc.city ?? selLoc.name} has capacity for this ${isVds ? "tier" : "plan"}.`
655
+ : `${selLoc.city ?? selLoc.name} can't fit this ${isVds ? "tier" : "plan"} right now — we can email you when it can.`))) : null,
656
+ notifyState === "error" ? (React.createElement(Box, null,
657
+ React.createElement(Text, { color: colors.error }, "Couldn't save the notification \u2014 try again."))) : null)));
658
+ if (!hasLocations)
659
+ return pickPanel;
660
+ return (React.createElement(Box, { flexDirection: "row", width: 80 },
661
+ pickPanel,
662
+ React.createElement(Panel, { title: "Location", paddingX: 1, paddingY: 1, width: 30, borderColor: pane === "loc" ? colors.accent : undefined },
663
+ React.createElement(Box, { flexDirection: "column" }, locations.map((l, i) => {
664
+ const isCursor = i === locCursor;
665
+ const known = stockByLoc[l.id];
666
+ const oos = planLevelOOS || known === false;
667
+ const name = [l.city ?? l.name, l.country ?? ""]
668
+ .filter(Boolean)
669
+ .join(", ");
670
+ return (React.createElement(Box, { key: l.id, flexDirection: "column" },
671
+ React.createElement(Box, null,
672
+ React.createElement(Text, { color: isCursor
673
+ ? pane === "loc"
674
+ ? colors.accent
675
+ : colors.text
676
+ : colors.dim }, isCursor ? `${glyphs.chevronRight} ` : " "),
677
+ React.createElement(Text, { wrap: "truncate-end", bold: isCursor, dimColor: oos, color: oos ? colors.dim : isCursor ? colors.accent : colors.text }, name)),
678
+ oos ? (React.createElement(Text, { color: colors.dim }, " out of stock")) : known === undefined ? (React.createElement(Text, { color: colors.dim }, ` ${l.code ?? "checking…"}`)) : l.code ? (React.createElement(Text, { color: colors.dim }, ` ${l.code}`)) : null));
679
+ })))));
453
680
  }
454
681
  function VpsSpecStep({ customConfig, locations, userEmail, draft, setDraft, goNext, }) {
455
682
  if (!customConfig?.enabled) {
@@ -492,8 +719,8 @@ function VpsSpecFieldsStep({ customConfig, locations, userEmail, draft, setDraft
492
719
  let cancelled = false;
493
720
  const t = setTimeout(() => {
494
721
  for (const loc of locations) {
495
- api.vpsOrders
496
- .customAvailability({
722
+ api.orders
723
+ .validate({
497
724
  cpu_cores: cpuN,
498
725
  ram_gb: ramN,
499
726
  disk_gb: diskN,
@@ -1148,6 +1375,8 @@ function tipForStep(step, draft, cancelConfirm) {
1148
1375
  return "↑↓ to choose, Enter to select. Esc to cancel.";
1149
1376
  case "vps-spec":
1150
1377
  return "Tab location/spec · ↑↓ move · Enter continue · Esc back.";
1378
+ case "plan-location":
1379
+ return "Tab pick/location · ↑↓ move · Enter continue (or Notify me if OOS) · Esc back.";
1151
1380
  case "hostname":
1152
1381
  return "Type a hostname (5–253 chars). Enter to confirm · Esc back.";
1153
1382
  case "auth":