dominion-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.
Files changed (298) hide show
  1. package/README.md +304 -0
  2. package/dist/app.d.ts +15 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +36 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/cli.d.ts +9 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +369 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/account.d.ts +28 -0
  11. package/dist/commands/account.d.ts.map +1 -0
  12. package/dist/commands/account.js +133 -0
  13. package/dist/commands/account.js.map +1 -0
  14. package/dist/commands/billing.d.ts +16 -0
  15. package/dist/commands/billing.d.ts.map +1 -0
  16. package/dist/commands/billing.js +61 -0
  17. package/dist/commands/billing.js.map +1 -0
  18. package/dist/commands/buy.d.ts +27 -0
  19. package/dist/commands/buy.d.ts.map +1 -0
  20. package/dist/commands/buy.js +293 -0
  21. package/dist/commands/buy.js.map +1 -0
  22. package/dist/commands/cart/add.d.ts +17 -0
  23. package/dist/commands/cart/add.d.ts.map +1 -0
  24. package/dist/commands/cart/add.js +119 -0
  25. package/dist/commands/cart/add.js.map +1 -0
  26. package/dist/commands/cart/clear.d.ts +12 -0
  27. package/dist/commands/cart/clear.d.ts.map +1 -0
  28. package/dist/commands/cart/clear.js +49 -0
  29. package/dist/commands/cart/clear.js.map +1 -0
  30. package/dist/commands/cart/index.d.ts +8 -0
  31. package/dist/commands/cart/index.d.ts.map +1 -0
  32. package/dist/commands/cart/index.js +8 -0
  33. package/dist/commands/cart/index.js.map +1 -0
  34. package/dist/commands/cart/list.d.ts +14 -0
  35. package/dist/commands/cart/list.d.ts.map +1 -0
  36. package/dist/commands/cart/list.js +51 -0
  37. package/dist/commands/cart/list.js.map +1 -0
  38. package/dist/commands/cart/remove.d.ts +13 -0
  39. package/dist/commands/cart/remove.d.ts.map +1 -0
  40. package/dist/commands/cart/remove.js +24 -0
  41. package/dist/commands/cart/remove.js.map +1 -0
  42. package/dist/commands/credits.d.ts +10 -0
  43. package/dist/commands/credits.d.ts.map +1 -0
  44. package/dist/commands/credits.js +139 -0
  45. package/dist/commands/credits.js.map +1 -0
  46. package/dist/commands/dns/add.d.ts +30 -0
  47. package/dist/commands/dns/add.d.ts.map +1 -0
  48. package/dist/commands/dns/add.js +144 -0
  49. package/dist/commands/dns/add.js.map +1 -0
  50. package/dist/commands/dns/index.d.ts +7 -0
  51. package/dist/commands/dns/index.d.ts.map +1 -0
  52. package/dist/commands/dns/index.js +7 -0
  53. package/dist/commands/dns/index.js.map +1 -0
  54. package/dist/commands/dns/list.d.ts +24 -0
  55. package/dist/commands/dns/list.d.ts.map +1 -0
  56. package/dist/commands/dns/list.js +111 -0
  57. package/dist/commands/dns/list.js.map +1 -0
  58. package/dist/commands/dns/remove.d.ts +24 -0
  59. package/dist/commands/dns/remove.d.ts.map +1 -0
  60. package/dist/commands/dns/remove.js +137 -0
  61. package/dist/commands/dns/remove.js.map +1 -0
  62. package/dist/commands/domains/detail.d.ts +20 -0
  63. package/dist/commands/domains/detail.d.ts.map +1 -0
  64. package/dist/commands/domains/detail.js +112 -0
  65. package/dist/commands/domains/detail.js.map +1 -0
  66. package/dist/commands/domains/index.d.ts +6 -0
  67. package/dist/commands/domains/index.d.ts.map +1 -0
  68. package/dist/commands/domains/index.js +6 -0
  69. package/dist/commands/domains/index.js.map +1 -0
  70. package/dist/commands/domains/list.d.ts +21 -0
  71. package/dist/commands/domains/list.d.ts.map +1 -0
  72. package/dist/commands/domains/list.js +106 -0
  73. package/dist/commands/domains/list.js.map +1 -0
  74. package/dist/commands/hack.d.ts +9 -0
  75. package/dist/commands/hack.d.ts.map +1 -0
  76. package/dist/commands/hack.js +104 -0
  77. package/dist/commands/hack.js.map +1 -0
  78. package/dist/commands/integrations.d.ts +20 -0
  79. package/dist/commands/integrations.d.ts.map +1 -0
  80. package/dist/commands/integrations.js +92 -0
  81. package/dist/commands/integrations.js.map +1 -0
  82. package/dist/commands/login.d.ts +15 -0
  83. package/dist/commands/login.d.ts.map +1 -0
  84. package/dist/commands/login.js +95 -0
  85. package/dist/commands/login.js.map +1 -0
  86. package/dist/commands/logout.d.ts +13 -0
  87. package/dist/commands/logout.d.ts.map +1 -0
  88. package/dist/commands/logout.js +32 -0
  89. package/dist/commands/logout.js.map +1 -0
  90. package/dist/commands/search.d.ts +24 -0
  91. package/dist/commands/search.d.ts.map +1 -0
  92. package/dist/commands/search.js +162 -0
  93. package/dist/commands/search.js.map +1 -0
  94. package/dist/commands/settings/index.d.ts +6 -0
  95. package/dist/commands/settings/index.d.ts.map +1 -0
  96. package/dist/commands/settings/index.js +6 -0
  97. package/dist/commands/settings/index.js.map +1 -0
  98. package/dist/commands/settings/set.d.ts +25 -0
  99. package/dist/commands/settings/set.d.ts.map +1 -0
  100. package/dist/commands/settings/set.js +215 -0
  101. package/dist/commands/settings/set.js.map +1 -0
  102. package/dist/commands/settings/view.d.ts +17 -0
  103. package/dist/commands/settings/view.d.ts.map +1 -0
  104. package/dist/commands/settings/view.js +99 -0
  105. package/dist/commands/settings/view.js.map +1 -0
  106. package/dist/commands/team/add.d.ts +17 -0
  107. package/dist/commands/team/add.d.ts.map +1 -0
  108. package/dist/commands/team/add.js +64 -0
  109. package/dist/commands/team/add.js.map +1 -0
  110. package/dist/commands/team/index.d.ts +7 -0
  111. package/dist/commands/team/index.d.ts.map +1 -0
  112. package/dist/commands/team/index.js +7 -0
  113. package/dist/commands/team/index.js.map +1 -0
  114. package/dist/commands/team/list.d.ts +13 -0
  115. package/dist/commands/team/list.d.ts.map +1 -0
  116. package/dist/commands/team/list.js +51 -0
  117. package/dist/commands/team/list.js.map +1 -0
  118. package/dist/commands/team/remove.d.ts +14 -0
  119. package/dist/commands/team/remove.d.ts.map +1 -0
  120. package/dist/commands/team/remove.js +57 -0
  121. package/dist/commands/team/remove.js.map +1 -0
  122. package/dist/commands/vercel/index.d.ts +8 -0
  123. package/dist/commands/vercel/index.d.ts.map +1 -0
  124. package/dist/commands/vercel/index.js +8 -0
  125. package/dist/commands/vercel/index.js.map +1 -0
  126. package/dist/commands/vercel/link.d.ts +25 -0
  127. package/dist/commands/vercel/link.d.ts.map +1 -0
  128. package/dist/commands/vercel/link.js +176 -0
  129. package/dist/commands/vercel/link.js.map +1 -0
  130. package/dist/commands/vercel/setup.d.ts +13 -0
  131. package/dist/commands/vercel/setup.d.ts.map +1 -0
  132. package/dist/commands/vercel/setup.js +113 -0
  133. package/dist/commands/vercel/setup.js.map +1 -0
  134. package/dist/commands/vercel/status.d.ts +15 -0
  135. package/dist/commands/vercel/status.d.ts.map +1 -0
  136. package/dist/commands/vercel/status.js +103 -0
  137. package/dist/commands/vercel/status.js.map +1 -0
  138. package/dist/commands/vercel/unlink.d.ts +16 -0
  139. package/dist/commands/vercel/unlink.d.ts.map +1 -0
  140. package/dist/commands/vercel/unlink.js +118 -0
  141. package/dist/commands/vercel/unlink.js.map +1 -0
  142. package/dist/commands/webhooks/add.d.ts +16 -0
  143. package/dist/commands/webhooks/add.d.ts.map +1 -0
  144. package/dist/commands/webhooks/add.js +61 -0
  145. package/dist/commands/webhooks/add.js.map +1 -0
  146. package/dist/commands/webhooks/index.d.ts +7 -0
  147. package/dist/commands/webhooks/index.d.ts.map +1 -0
  148. package/dist/commands/webhooks/index.js +7 -0
  149. package/dist/commands/webhooks/index.js.map +1 -0
  150. package/dist/commands/webhooks/list.d.ts +14 -0
  151. package/dist/commands/webhooks/list.d.ts.map +1 -0
  152. package/dist/commands/webhooks/list.js +47 -0
  153. package/dist/commands/webhooks/list.js.map +1 -0
  154. package/dist/commands/webhooks/remove.d.ts +14 -0
  155. package/dist/commands/webhooks/remove.d.ts.map +1 -0
  156. package/dist/commands/webhooks/remove.js +57 -0
  157. package/dist/commands/webhooks/remove.js.map +1 -0
  158. package/dist/commands/whoami.d.ts +13 -0
  159. package/dist/commands/whoami.d.ts.map +1 -0
  160. package/dist/commands/whoami.js +33 -0
  161. package/dist/commands/whoami.js.map +1 -0
  162. package/dist/components/account-card.d.ts +17 -0
  163. package/dist/components/account-card.d.ts.map +1 -0
  164. package/dist/components/account-card.js +19 -0
  165. package/dist/components/account-card.js.map +1 -0
  166. package/dist/components/billing-table.d.ts +22 -0
  167. package/dist/components/billing-table.d.ts.map +1 -0
  168. package/dist/components/billing-table.js +53 -0
  169. package/dist/components/billing-table.js.map +1 -0
  170. package/dist/components/celebration.d.ts +21 -0
  171. package/dist/components/celebration.d.ts.map +1 -0
  172. package/dist/components/celebration.js +55 -0
  173. package/dist/components/celebration.js.map +1 -0
  174. package/dist/components/contact-form.d.ts +23 -0
  175. package/dist/components/contact-form.d.ts.map +1 -0
  176. package/dist/components/contact-form.js +109 -0
  177. package/dist/components/contact-form.js.map +1 -0
  178. package/dist/components/dns-table.d.ts +14 -0
  179. package/dist/components/dns-table.d.ts.map +1 -0
  180. package/dist/components/dns-table.js +71 -0
  181. package/dist/components/dns-table.js.map +1 -0
  182. package/dist/components/domain-card.d.ts +14 -0
  183. package/dist/components/domain-card.d.ts.map +1 -0
  184. package/dist/components/domain-card.js +41 -0
  185. package/dist/components/domain-card.js.map +1 -0
  186. package/dist/components/domain-table.d.ts +30 -0
  187. package/dist/components/domain-table.d.ts.map +1 -0
  188. package/dist/components/domain-table.js +87 -0
  189. package/dist/components/domain-table.js.map +1 -0
  190. package/dist/components/error-display.d.ts +25 -0
  191. package/dist/components/error-display.d.ts.map +1 -0
  192. package/dist/components/error-display.js +51 -0
  193. package/dist/components/error-display.js.map +1 -0
  194. package/dist/components/layout.d.ts +14 -0
  195. package/dist/components/layout.d.ts.map +1 -0
  196. package/dist/components/layout.js +21 -0
  197. package/dist/components/layout.js.map +1 -0
  198. package/dist/components/logo.d.ts +37 -0
  199. package/dist/components/logo.d.ts.map +1 -0
  200. package/dist/components/logo.js +70 -0
  201. package/dist/components/logo.js.map +1 -0
  202. package/dist/components/matrix-rain.d.ts +17 -0
  203. package/dist/components/matrix-rain.d.ts.map +1 -0
  204. package/dist/components/matrix-rain.js +105 -0
  205. package/dist/components/matrix-rain.js.map +1 -0
  206. package/dist/components/purchase-confirmation.d.ts +17 -0
  207. package/dist/components/purchase-confirmation.d.ts.map +1 -0
  208. package/dist/components/purchase-confirmation.js +17 -0
  209. package/dist/components/purchase-confirmation.js.map +1 -0
  210. package/dist/components/search-results.d.ts +30 -0
  211. package/dist/components/search-results.d.ts.map +1 -0
  212. package/dist/components/search-results.js +53 -0
  213. package/dist/components/search-results.js.map +1 -0
  214. package/dist/components/settings-card.d.ts +14 -0
  215. package/dist/components/settings-card.d.ts.map +1 -0
  216. package/dist/components/settings-card.js +40 -0
  217. package/dist/components/settings-card.js.map +1 -0
  218. package/dist/components/spinner-messages.d.ts +19 -0
  219. package/dist/components/spinner-messages.d.ts.map +1 -0
  220. package/dist/components/spinner-messages.js +55 -0
  221. package/dist/components/spinner-messages.js.map +1 -0
  222. package/dist/lib/achievements.d.ts +107 -0
  223. package/dist/lib/achievements.d.ts.map +1 -0
  224. package/dist/lib/achievements.js +341 -0
  225. package/dist/lib/achievements.js.map +1 -0
  226. package/dist/lib/auth.d.ts +45 -0
  227. package/dist/lib/auth.d.ts.map +1 -0
  228. package/dist/lib/auth.js +125 -0
  229. package/dist/lib/auth.js.map +1 -0
  230. package/dist/lib/cart.d.ts +69 -0
  231. package/dist/lib/cart.d.ts.map +1 -0
  232. package/dist/lib/cart.js +131 -0
  233. package/dist/lib/cart.js.map +1 -0
  234. package/dist/lib/config.d.ts +51 -0
  235. package/dist/lib/config.d.ts.map +1 -0
  236. package/dist/lib/config.js +116 -0
  237. package/dist/lib/config.js.map +1 -0
  238. package/dist/lib/dns-validation.d.ts +51 -0
  239. package/dist/lib/dns-validation.d.ts.map +1 -0
  240. package/dist/lib/dns-validation.js +185 -0
  241. package/dist/lib/dns-validation.js.map +1 -0
  242. package/dist/lib/easter-eggs.d.ts +21 -0
  243. package/dist/lib/easter-eggs.d.ts.map +1 -0
  244. package/dist/lib/easter-eggs.js +64 -0
  245. package/dist/lib/easter-eggs.js.map +1 -0
  246. package/dist/lib/error-personality.d.ts +35 -0
  247. package/dist/lib/error-personality.d.ts.map +1 -0
  248. package/dist/lib/error-personality.js +191 -0
  249. package/dist/lib/error-personality.js.map +1 -0
  250. package/dist/lib/errors.d.ts +8 -0
  251. package/dist/lib/errors.d.ts.map +1 -0
  252. package/dist/lib/errors.js +7 -0
  253. package/dist/lib/errors.js.map +1 -0
  254. package/dist/lib/konami.d.ts +51 -0
  255. package/dist/lib/konami.d.ts.map +1 -0
  256. package/dist/lib/konami.js +107 -0
  257. package/dist/lib/konami.js.map +1 -0
  258. package/dist/lib/loading-messages.d.ts +13 -0
  259. package/dist/lib/loading-messages.d.ts.map +1 -0
  260. package/dist/lib/loading-messages.js +13 -0
  261. package/dist/lib/loading-messages.js.map +1 -0
  262. package/dist/lib/namecom-client.d.ts +73 -0
  263. package/dist/lib/namecom-client.d.ts.map +1 -0
  264. package/dist/lib/namecom-client.js +260 -0
  265. package/dist/lib/namecom-client.js.map +1 -0
  266. package/dist/lib/nameserver-presets.d.ts +27 -0
  267. package/dist/lib/nameserver-presets.d.ts.map +1 -0
  268. package/dist/lib/nameserver-presets.js +45 -0
  269. package/dist/lib/nameserver-presets.js.map +1 -0
  270. package/dist/lib/purchase.d.ts +71 -0
  271. package/dist/lib/purchase.d.ts.map +1 -0
  272. package/dist/lib/purchase.js +160 -0
  273. package/dist/lib/purchase.js.map +1 -0
  274. package/dist/lib/schemas.d.ts +1968 -0
  275. package/dist/lib/schemas.d.ts.map +1 -0
  276. package/dist/lib/schemas.js +112 -0
  277. package/dist/lib/schemas.js.map +1 -0
  278. package/dist/lib/team.d.ts +71 -0
  279. package/dist/lib/team.d.ts.map +1 -0
  280. package/dist/lib/team.js +135 -0
  281. package/dist/lib/team.js.map +1 -0
  282. package/dist/lib/theme.d.ts +152 -0
  283. package/dist/lib/theme.d.ts.map +1 -0
  284. package/dist/lib/theme.js +185 -0
  285. package/dist/lib/theme.js.map +1 -0
  286. package/dist/lib/types.d.ts +136 -0
  287. package/dist/lib/types.d.ts.map +1 -0
  288. package/dist/lib/types.js +19 -0
  289. package/dist/lib/types.js.map +1 -0
  290. package/dist/lib/vercel-client.d.ts +110 -0
  291. package/dist/lib/vercel-client.d.ts.map +1 -0
  292. package/dist/lib/vercel-client.js +196 -0
  293. package/dist/lib/vercel-client.js.map +1 -0
  294. package/dist/lib/webhooks.d.ts +83 -0
  295. package/dist/lib/webhooks.d.ts.map +1 -0
  296. package/dist/lib/webhooks.js +195 -0
  297. package/dist/lib/webhooks.js.map +1 -0
  298. package/package.json +66 -0
package/dist/cli.js ADDED
@@ -0,0 +1,369 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Dominion CLI — premium domain management from the terminal.
4
+ *
5
+ * Entry point: uses Commander for arg parsing and command routing.
6
+ * Each command renders an Ink component for rich TUI output.
7
+ */
8
+ import { Command } from "commander";
9
+ import { render } from "ink";
10
+ import { createElement } from "react";
11
+ import { createRequire } from "node:module";
12
+ import { setNoColor, setQuiet } from "./lib/theme.js";
13
+ import { App } from "./app.js";
14
+ import { Login } from "./commands/login.js";
15
+ import { Logout } from "./commands/logout.js";
16
+ import { Whoami } from "./commands/whoami.js";
17
+ import { Search } from "./commands/search.js";
18
+ import { CartList, CartAdd, CartRemove, CartClear } from "./commands/cart/index.js";
19
+ import { Buy } from "./commands/buy.js";
20
+ import { DomainsList, DomainDetail } from "./commands/domains/index.js";
21
+ import { DnsList, DnsAdd, DnsRemove } from "./commands/dns/index.js";
22
+ import { SettingsView, SettingsSet } from "./commands/settings/index.js";
23
+ import { VercelStatus, VercelSetup, VercelLink, VercelUnlink } from "./commands/vercel/index.js";
24
+ import { Account, AccountSetContact, AccountSetEmail } from "./commands/account.js";
25
+ import { Billing } from "./commands/billing.js";
26
+ import { TeamList, TeamAdd, TeamRemove } from "./commands/team/index.js";
27
+ import { WebhooksList, WebhooksAdd, WebhooksRemove } from "./commands/webhooks/index.js";
28
+ import { Integrations } from "./commands/integrations.js";
29
+ import { Layout } from "./components/layout.js";
30
+ import { Hack } from "./commands/hack.js";
31
+ import { Credits } from "./commands/credits.js";
32
+ import { AchievementManager } from "./lib/achievements.js";
33
+ const require = createRequire(import.meta.url);
34
+ const pkg = require("../package.json");
35
+ const program = new Command();
36
+ program
37
+ .name("dominion")
38
+ .description(pkg.description)
39
+ .version(pkg.version, "-v, --version", "Print the current version")
40
+ .helpOption("-h, --help", "Display help for command")
41
+ .option("--no-color", "Disable all ANSI color output")
42
+ .option("--quiet", "Suppress decorative output (logos, animations) for scripting");
43
+ // ─── Apply global flags before any command runs ─────────────────────────────
44
+ program.hook("preAction", (thisCommand) => {
45
+ const opts = thisCommand.opts();
46
+ if (opts.color === false) {
47
+ setNoColor(true);
48
+ }
49
+ if (opts.quiet) {
50
+ setQuiet(true);
51
+ }
52
+ });
53
+ // ─── Top-level commands ─────────────────────────────────────────────────────
54
+ program
55
+ .command("login")
56
+ .description("Authenticate with your Name.com API credentials")
57
+ .option("--browser", "Open Name.com API keys page in browser")
58
+ .action((opts) => {
59
+ render(createElement(Layout, {}, createElement(Login, { browser: opts.browser })));
60
+ });
61
+ program
62
+ .command("logout")
63
+ .description("Clear stored credentials")
64
+ .action(() => {
65
+ render(createElement(Layout, {}, createElement(Logout)));
66
+ });
67
+ program
68
+ .command("whoami")
69
+ .description("Display authenticated user info")
70
+ .action(() => {
71
+ render(createElement(Layout, {}, createElement(Whoami)));
72
+ });
73
+ program
74
+ .command("search <query>")
75
+ .description("Search for available domains")
76
+ .option("--tld <tlds>", "Filter by TLDs (comma-separated)")
77
+ .option("--max-price <price>", "Maximum price in dollars", parseFloat)
78
+ .action((query, opts) => {
79
+ render(createElement(Layout, {}, createElement(Search, {
80
+ query,
81
+ tld: opts.tld,
82
+ maxPrice: opts.maxPrice,
83
+ })));
84
+ });
85
+ // ─── Cart commands ───────────────────────────────────────────────────────────
86
+ const cart = program
87
+ .command("cart")
88
+ .description("Manage your domain shopping cart");
89
+ cart
90
+ .command("list")
91
+ .description("View cart contents")
92
+ .action(() => {
93
+ render(createElement(Layout, {}, createElement(CartList)));
94
+ });
95
+ cart
96
+ .command("add <domain>")
97
+ .description("Add a domain to your cart")
98
+ .action((domain) => {
99
+ render(createElement(Layout, {}, createElement(CartAdd, { domain })));
100
+ });
101
+ cart
102
+ .command("remove <domain>")
103
+ .description("Remove a domain from your cart")
104
+ .action((domain) => {
105
+ render(createElement(Layout, {}, createElement(CartRemove, { domain })));
106
+ });
107
+ cart
108
+ .command("clear")
109
+ .description("Clear all items from your cart")
110
+ .action(() => {
111
+ render(createElement(Layout, {}, createElement(CartClear)));
112
+ });
113
+ // Default cart action (no subcommand → list)
114
+ cart.action(() => {
115
+ render(createElement(Layout, {}, createElement(CartList)));
116
+ });
117
+ // ─── Buy command ─────────────────────────────────────────────────────────────
118
+ program
119
+ .command("buy [domain]")
120
+ .description("Purchase domain(s) from cart or by name")
121
+ .option("--yes", "Skip confirmation prompt")
122
+ .action((domain, opts) => {
123
+ render(createElement(Layout, {}, createElement(Buy, { domain, yes: opts.yes })));
124
+ });
125
+ // ─── Domains commands ────────────────────────────────────────────────────────
126
+ program
127
+ .command("domains [domain]")
128
+ .alias("domains ls")
129
+ .description("List domains or view domain details")
130
+ .option("--json", "Output raw JSON")
131
+ .action((domain, opts) => {
132
+ if (domain) {
133
+ // Detail view for a specific domain
134
+ render(createElement(Layout, {}, createElement(DomainDetail, { domain, json: opts.json })));
135
+ }
136
+ else {
137
+ // List all domains
138
+ render(createElement(Layout, {}, createElement(DomainsList, { json: opts.json })));
139
+ }
140
+ });
141
+ // ─── DNS commands ────────────────────────────────────────────────────────────
142
+ const dns = program
143
+ .command("dns <domain>")
144
+ .description("Manage DNS records for a domain");
145
+ dns
146
+ .command("list")
147
+ .description("List DNS records")
148
+ .option("--json", "Output raw JSON")
149
+ .action((opts) => {
150
+ const domain = dns.args[0];
151
+ render(createElement(Layout, {}, createElement(DnsList, { domain, json: opts.json })));
152
+ });
153
+ dns
154
+ .command("add <type> <name> <value>")
155
+ .description("Add a DNS record")
156
+ .option("--ttl <seconds>", "TTL in seconds (default: 300)", parseInt)
157
+ .option("--priority <number>", "Priority for MX/SRV records", parseInt)
158
+ .option("--json", "Output raw JSON")
159
+ .action((type, name, value, opts) => {
160
+ const domain = dns.args[0];
161
+ render(createElement(Layout, {}, createElement(DnsAdd, {
162
+ domain,
163
+ type,
164
+ name,
165
+ value,
166
+ ttl: opts.ttl,
167
+ priority: opts.priority,
168
+ json: opts.json,
169
+ })));
170
+ });
171
+ dns
172
+ .command("remove <record-id>")
173
+ .description("Remove a DNS record")
174
+ .option("--json", "Output raw JSON")
175
+ .action((recordId, opts) => {
176
+ const domain = dns.args[0];
177
+ render(createElement(Layout, {}, createElement(DnsRemove, {
178
+ domain,
179
+ recordId: parseInt(recordId, 10),
180
+ json: opts.json,
181
+ })));
182
+ });
183
+ // Default dns action (no subcommand → list)
184
+ dns.action((domain) => {
185
+ render(createElement(Layout, {}, createElement(DnsList, { domain })));
186
+ });
187
+ // ─── Settings commands ───────────────────────────────────────────────────────
188
+ const settings = program
189
+ .command("settings <domain>")
190
+ .description("View or modify domain settings");
191
+ settings
192
+ .command("set <key> <value>")
193
+ .description("Update a domain setting (autorenew, lock, nameservers)")
194
+ .option("--preset <preset>", "Use a nameserver preset (vercel, namecom)")
195
+ .action((key, value, opts) => {
196
+ const domain = settings.args[0];
197
+ render(createElement(Layout, {}, createElement(SettingsSet, {
198
+ domain,
199
+ settingKey: key,
200
+ settingValue: value,
201
+ preset: opts.preset,
202
+ })));
203
+ });
204
+ // Default settings action (view)
205
+ settings.action((domain) => {
206
+ render(createElement(Layout, {}, createElement(SettingsView, { domain })));
207
+ });
208
+ // ─── Account & Billing ───────────────────────────────────────────────────────
209
+ const account = program
210
+ .command("account")
211
+ .description("View account details and manage contact info");
212
+ const accountSet = account
213
+ .command("set")
214
+ .description("Update account settings");
215
+ accountSet
216
+ .command("contact")
217
+ .description("Set or update WHOIS contact info interactively")
218
+ .action(() => {
219
+ render(createElement(Layout, {}, createElement(AccountSetContact)));
220
+ });
221
+ accountSet
222
+ .command("email <email>")
223
+ .description("Update the contact email address")
224
+ .action((email) => {
225
+ render(createElement(Layout, {}, createElement(AccountSetEmail, { email })));
226
+ });
227
+ // Default account action (view)
228
+ account.action(() => {
229
+ render(createElement(Layout, {}, createElement(Account)));
230
+ });
231
+ program
232
+ .command("billing")
233
+ .description("View domain billing summary")
234
+ .action(() => {
235
+ render(createElement(Layout, {}, createElement(Billing)));
236
+ });
237
+ // ─── Team commands ───────────────────────────────────────────────────────────
238
+ const team = program
239
+ .command("team")
240
+ .description("Manage team members");
241
+ team
242
+ .command("list")
243
+ .description("List team members")
244
+ .action(() => {
245
+ render(createElement(Layout, {}, createElement(TeamList)));
246
+ });
247
+ team
248
+ .command("add <email>")
249
+ .description("Add a team member")
250
+ .option("--role <role>", "Member role (admin, member, viewer)")
251
+ .option("--name <name>", "Member display name")
252
+ .action((email, opts) => {
253
+ render(createElement(Layout, {}, createElement(TeamAdd, { email, role: opts.role, name: opts.name })));
254
+ });
255
+ team
256
+ .command("remove <member>")
257
+ .description("Remove a team member")
258
+ .action((member) => {
259
+ render(createElement(Layout, {}, createElement(TeamRemove, { member })));
260
+ });
261
+ // Default team action (no subcommand → list)
262
+ team.action(() => {
263
+ render(createElement(Layout, {}, createElement(TeamList)));
264
+ });
265
+ // ─── Integrations ────────────────────────────────────────────────────────────
266
+ program
267
+ .command("integrations")
268
+ .description("View available integrations and connection status")
269
+ .action(() => {
270
+ render(createElement(Layout, {}, createElement(Integrations)));
271
+ });
272
+ // ─── Vercel commands ─────────────────────────────────────────────────────────
273
+ const vercel = program
274
+ .command("vercel")
275
+ .description("Manage Vercel integration");
276
+ vercel
277
+ .command("status")
278
+ .description("View Vercel integration status")
279
+ .action(() => {
280
+ render(createElement(Layout, {}, createElement(VercelStatus)));
281
+ });
282
+ vercel
283
+ .command("link <domain>")
284
+ .description("Link a domain to Vercel project")
285
+ .action((domain) => {
286
+ render(createElement(Layout, {}, createElement(VercelLink, { domain })));
287
+ });
288
+ vercel
289
+ .command("unlink <domain>")
290
+ .description("Unlink a domain from Vercel project")
291
+ .action((domain) => {
292
+ render(createElement(Layout, {}, createElement(VercelUnlink, { domain })));
293
+ });
294
+ vercel
295
+ .command("setup")
296
+ .description("Configure Vercel integration")
297
+ .action(() => {
298
+ render(createElement(Layout, {}, createElement(VercelSetup)));
299
+ });
300
+ // Default vercel action (no subcommand → status)
301
+ vercel.action(() => {
302
+ render(createElement(Layout, {}, createElement(VercelStatus)));
303
+ });
304
+ // ─── Webhooks commands ───────────────────────────────────────────────────────
305
+ const webhooks = program
306
+ .command("webhooks")
307
+ .description("Manage webhooks");
308
+ webhooks
309
+ .command("list")
310
+ .description("List configured webhooks")
311
+ .action(() => {
312
+ render(createElement(Layout, {}, createElement(WebhooksList)));
313
+ });
314
+ webhooks
315
+ .command("add <url>")
316
+ .description("Add a webhook")
317
+ .option("--events <events>", "Comma-separated events (domain.registered,domain.expired,dns.changed,domain.renewed)")
318
+ .action((url, opts) => {
319
+ render(createElement(Layout, {}, createElement(WebhooksAdd, { url, events: opts.events })));
320
+ });
321
+ webhooks
322
+ .command("remove <id>")
323
+ .description("Remove a webhook by ID")
324
+ .action((id) => {
325
+ render(createElement(Layout, {}, createElement(WebhooksRemove, { id })));
326
+ });
327
+ // Default webhooks action (no subcommand → list)
328
+ webhooks.action(() => {
329
+ render(createElement(Layout, {}, createElement(WebhooksList)));
330
+ });
331
+ // ─── Credits command (listed) ─────────────────────────────────────────────
332
+ program
333
+ .command("credits")
334
+ .description("View the credits")
335
+ .action(() => {
336
+ render(createElement(Credits));
337
+ });
338
+ // ─── Hidden hack command (NOT listed in --help) ──────────────────────────
339
+ program
340
+ .command("hack", { hidden: true })
341
+ .action(() => {
342
+ render(createElement(Layout, {}, createElement(Hack)));
343
+ });
344
+ // ─── Parse and run ───────────────────────────────────────────────────────────
345
+ // Check time-based achievements on startup (best-effort)
346
+ try {
347
+ const am = new AchievementManager();
348
+ am.checkTimeBased();
349
+ am.checkEarlyAdopter(pkg.version);
350
+ }
351
+ catch {
352
+ // Never block CLI startup
353
+ }
354
+ // Handle global flags for no-arg invocation (preAction hook won't fire)
355
+ const rawArgs = process.argv.slice(2);
356
+ const hasNoColor = rawArgs.includes("--no-color");
357
+ const hasQuiet = rawArgs.includes("--quiet");
358
+ if (hasNoColor)
359
+ setNoColor(true);
360
+ if (hasQuiet)
361
+ setQuiet(true);
362
+ program.parse(process.argv);
363
+ // If no command provided, show the welcome screen with full logo
364
+ const nonFlagArgs = rawArgs.filter((a) => !a.startsWith("-"));
365
+ if (nonFlagArgs.length === 0) {
366
+ const { unmount } = render(createElement(App, { version: pkg.version }));
367
+ setTimeout(() => unmount(), 100);
368
+ }
369
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAA6C,CAAC;AAEnF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;KAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,2BAA2B,CAAC;KAClE,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC;KACpD,MAAM,CAAC,YAAY,EAAE,+BAA+B,CAAC;KACrD,MAAM,CAAC,SAAS,EAAE,8DAA8D,CAAC,CAAC;AAErF,+EAA+E;AAE/E,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACzB,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;KAC7D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACf,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAChD,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,MAAM,CAAC,CACtB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,MAAM,CAAC,CACtB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,cAAc,EAAE,kCAAkC,CAAC;KAC1D,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,EAAE,UAAU,CAAC;KACrE,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACtB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,MAAM,EAAE;QACpB,KAAK;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CACH,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAEhF,MAAM,IAAI,GAAG,OAAO;KACjB,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kCAAkC,CAAC,CAAC;AAEnD,IAAI;KACD,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,QAAQ,CAAC,CACxB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACjB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CACnC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACjB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CACtC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,SAAS,CAAC,CACzB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,6CAA6C;AAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;IACf,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,QAAQ,CAAC,CACxB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC;KAC3C,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IACvB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAC9C,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAEhF,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,KAAK,CAAC,YAAY,CAAC;KACnB,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;KACnC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IACvB,IAAI,MAAM,EAAE,CAAC;QACX,oCAAoC;QACpC,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CACzD,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,mBAAmB;QACnB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAChD,CACF,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAEhF,MAAM,GAAG,GAAG,OAAO;KAChB,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,iCAAiC,CAAC,CAAC;AAElD,GAAG;KACA,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;KACnC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACf,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CACpD,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,GAAG;KACA,OAAO,CAAC,2BAA2B,CAAC;KACpC,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,QAAQ,CAAC;KACpE,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,QAAQ,CAAC;KACtE,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;KACnC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,MAAM,EAAE;QACpB,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CACH,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,GAAG;KACA,OAAO,CAAC,oBAAoB,CAAC;KAC7B,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;KACnC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,SAAS,EAAE;QACvB,MAAM;QACN,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC,CACH,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,4CAA4C;AAC5C,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACpB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CACnC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAEjD,QAAQ;KACL,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;KACxE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,WAAW,EAAE;QACzB,MAAM;QACN,UAAU,EAAE,GAAG;QACf,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CACH,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,iCAAiC;AACjC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACzB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CACxC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,MAAM,OAAO,GAAG,OAAO;KACpB,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,8CAA8C,CAAC,CAAC;AAE/D,MAAM,UAAU,GAAG,OAAO;KACvB,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yBAAyB,CAAC,CAAC;AAE1C,UAAU;KACP,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,iBAAiB,CAAC,CACjC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,UAAU;KACP,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAChB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,CAC1C,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,gCAAgC;AAChC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,OAAO,CAAC,CACvB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,OAAO,CAAC,CACvB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAEhF,MAAM,IAAI,GAAG,OAAO;KACjB,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAEtC,IAAI;KACD,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,QAAQ,CAAC,CACxB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,mBAAmB,CAAC;KAChC,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC;KAC9D,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;KAC9C,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACtB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CACpE,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,IAAI;KACD,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACjB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CACtC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,6CAA6C;AAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;IACf,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,QAAQ,CAAC,CACxB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,mDAAmD,CAAC;KAChE,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,YAAY,CAAC,CAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAEhF,MAAM,MAAM,GAAG,OAAO;KACnB,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC,CAAC;AAE5C,MAAM;KACH,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,YAAY,CAAC,CAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,MAAM;KACH,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACjB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CACtC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,MAAM;KACH,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACjB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CACxC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,MAAM;KACH,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,WAAW,CAAC,CAC3B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,iDAAiD;AACjD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;IACjB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,YAAY,CAAC,CAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,MAAM,QAAQ,GAAG,OAAO;KACrB,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAElC,QAAQ;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,YAAY,CAAC,CAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,eAAe,CAAC;KAC5B,MAAM,CAAC,mBAAmB,EAAE,sFAAsF,CAAC;KACnH,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACpB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CACzD,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,QAAQ;KACL,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;IACb,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CACtC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,iDAAiD;AACjD,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;IACnB,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,YAAY,CAAC,CAC5B,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,6EAA6E;AAE7E,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEL,4EAA4E;AAE5E,OAAO;KACJ,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KACjC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,CACJ,aAAa,CAAC,MAAM,EAAE,EAAE,EACtB,aAAa,CAAC,IAAI,CAAC,CACpB,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,gFAAgF;AAEhF,yDAAyD;AACzD,IAAI,CAAC;IACH,MAAM,EAAE,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACpC,EAAE,CAAC,cAAc,EAAE,CAAC;IACpB,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAAC,MAAM,CAAC;IACP,0BAA0B;AAC5B,CAAC;AAED,wEAAwE;AACxE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC7C,IAAI,UAAU;IAAE,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,IAAI,QAAQ;IAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,iEAAiE;AACjE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzE,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * dominion account — view and manage account details.
3
+ *
4
+ * Displays: Name.com username, total domains, config file location,
5
+ * stored contact info (if set), integration status (Vercel y/n).
6
+ *
7
+ * Subcommands:
8
+ * dominion account set contact — interactive contact form
9
+ * dominion account set email <email> — update contact email
10
+ *
11
+ * Requires authentication. Shows login hint if not authenticated.
12
+ */
13
+ import { ConfigManager } from "../lib/config.js";
14
+ export interface AccountProps {
15
+ configManager?: ConfigManager;
16
+ }
17
+ export declare function Account({ configManager }: AccountProps): import("react/jsx-runtime").JSX.Element;
18
+ export interface AccountSetContactProps {
19
+ configManager?: ConfigManager;
20
+ }
21
+ export declare function AccountSetContact({ configManager }: AccountSetContactProps): import("react/jsx-runtime").JSX.Element;
22
+ export interface AccountSetEmailProps {
23
+ email: string;
24
+ configManager?: ConfigManager;
25
+ }
26
+ export declare function AccountSetEmail({ email, configManager }: AccountSetEmailProps): import("react/jsx-runtime").JSX.Element;
27
+ export default Account;
28
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/commands/account.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAID,wBAAgB,OAAO,CAAC,EAAE,aAAa,EAAE,EAAE,YAAY,2CA4EtD;AAID,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,aAAa,EAAE,EAAE,sBAAsB,2CAoC1E;AAID,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,oBAAoB,2CAkE7E;AAED,eAAe,OAAO,CAAC"}
@@ -0,0 +1,133 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * dominion account — view and manage account details.
4
+ *
5
+ * Displays: Name.com username, total domains, config file location,
6
+ * stored contact info (if set), integration status (Vercel y/n).
7
+ *
8
+ * Subcommands:
9
+ * dominion account set contact — interactive contact form
10
+ * dominion account set email <email> — update contact email
11
+ *
12
+ * Requires authentication. Shows login hint if not authenticated.
13
+ */
14
+ import { Box, Text, useApp } from "ink";
15
+ import { useEffect, useState } from "react";
16
+ import { ConfigManager } from "../lib/config.js";
17
+ import { NamecomClient } from "../lib/namecom-client.js";
18
+ import { getAuthStatus } from "../lib/auth.js";
19
+ import { AccountCard } from "../components/account-card.js";
20
+ import { ContactForm } from "../components/contact-form.js";
21
+ export function Account({ configManager }) {
22
+ const { exit } = useApp();
23
+ const [state, setState] = useState("loading");
24
+ const [errorMsg, setErrorMsg] = useState("");
25
+ const [username, setUsername] = useState("");
26
+ const [domainCount, setDomainCount] = useState(0);
27
+ const [configPath, setConfigPath] = useState("");
28
+ const [contactInfo, setContactInfo] = useState();
29
+ const [vercelConnected, setVercelConnected] = useState(false);
30
+ useEffect(() => {
31
+ const manager = configManager ?? new ConfigManager();
32
+ const auth = getAuthStatus(manager);
33
+ if (!auth.authenticated) {
34
+ setErrorMsg("not_authenticated");
35
+ setState("error");
36
+ setTimeout(() => exit(), 100);
37
+ return;
38
+ }
39
+ const config = manager.load();
40
+ setUsername(auth.username ?? "");
41
+ setConfigPath(auth.configPath);
42
+ setContactInfo(config.contactInfo);
43
+ setVercelConnected(!!(config.vercel?.token));
44
+ // Fetch domain count from API
45
+ const client = new NamecomClient({
46
+ username: config.namecom.username,
47
+ token: config.namecom.token,
48
+ });
49
+ client
50
+ .listDomainsAllPages()
51
+ .then((domains) => {
52
+ setDomainCount(domains.length);
53
+ setState("done");
54
+ setTimeout(() => exit(), 100);
55
+ })
56
+ .catch((err) => {
57
+ // Still show account info even if API call fails
58
+ setDomainCount(0);
59
+ setState("done");
60
+ setTimeout(() => exit(), 100);
61
+ });
62
+ }, [configManager, exit]);
63
+ if (state === "loading") {
64
+ return (_jsx(Box, { children: _jsx(Text, { color: "yellow", children: "Loading account information..." }) }));
65
+ }
66
+ if (state === "error" && errorMsg === "not_authenticated") {
67
+ return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: "Not logged in" }), _jsxs(Text, { color: "gray", children: ["Please run ", _jsx(Text, { bold: true, color: "white", children: "dominion login" }), " first."] })] }));
68
+ }
69
+ return (_jsx(AccountCard, { username: username, domainCount: domainCount, configPath: configPath, contactInfo: contactInfo, vercelConnected: vercelConnected }));
70
+ }
71
+ export function AccountSetContact({ configManager }) {
72
+ const { exit } = useApp();
73
+ const manager = configManager ?? new ConfigManager();
74
+ const auth = getAuthStatus(manager);
75
+ if (!auth.authenticated) {
76
+ return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: "Not logged in" }), _jsxs(Text, { color: "gray", children: ["Please run ", _jsx(Text, { bold: true, color: "white", children: "dominion login" }), " first."] })] }));
77
+ }
78
+ const config = manager.load();
79
+ const handleComplete = (contact) => {
80
+ manager.set("contactInfo", contact);
81
+ setTimeout(() => exit(), 100);
82
+ };
83
+ const handleCancel = () => {
84
+ setTimeout(() => exit(), 100);
85
+ };
86
+ return (_jsx(Box, { flexDirection: "column", gap: 1, children: _jsx(ContactForm, { onComplete: handleComplete, onCancel: handleCancel, existingContact: config.contactInfo }) }));
87
+ }
88
+ export function AccountSetEmail({ email, configManager }) {
89
+ const { exit } = useApp();
90
+ const [done, setDone] = useState(false);
91
+ useEffect(() => {
92
+ const manager = configManager ?? new ConfigManager();
93
+ const auth = getAuthStatus(manager);
94
+ if (!auth.authenticated) {
95
+ setDone(false);
96
+ setTimeout(() => exit(), 100);
97
+ return;
98
+ }
99
+ const config = manager.load();
100
+ const currentContact = config.contactInfo;
101
+ if (currentContact) {
102
+ // Update email on existing contact
103
+ manager.set("contactInfo", { ...currentContact, email });
104
+ }
105
+ else {
106
+ // Create minimal contact with just email
107
+ manager.set("contactInfo", {
108
+ firstName: "",
109
+ lastName: "",
110
+ email,
111
+ phone: "",
112
+ address1: "",
113
+ city: "",
114
+ state: "",
115
+ zip: "",
116
+ country: "",
117
+ });
118
+ }
119
+ setDone(true);
120
+ setTimeout(() => exit(), 100);
121
+ }, [email, configManager, exit]);
122
+ const manager = configManager ?? new ConfigManager();
123
+ const auth = getAuthStatus(manager);
124
+ if (!auth.authenticated) {
125
+ return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: "Not logged in" }), _jsxs(Text, { color: "gray", children: ["Please run ", _jsx(Text, { bold: true, color: "white", children: "dominion login" }), " first."] })] }));
126
+ }
127
+ if (!done) {
128
+ return (_jsx(Box, { children: _jsx(Text, { color: "yellow", children: "Updating email..." }) }));
129
+ }
130
+ return (_jsx(Box, { flexDirection: "column", gap: 1, children: _jsxs(Text, { color: "green", children: ["Contact email updated to: ", _jsx(Text, { bold: true, children: email })] }) }));
131
+ }
132
+ export default Account;
133
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/commands/account.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * dominion billing — view domain billing summary.
3
+ *
4
+ * Displays: list of domains with renewal price, next renewal date,
5
+ * annual total, total domains, and next upcoming renewal.
6
+ *
7
+ * Data sourced from NamecomClient.listDomains() renewalPrice field.
8
+ * Requires authentication.
9
+ */
10
+ import { ConfigManager } from "../lib/config.js";
11
+ export interface BillingProps {
12
+ configManager?: ConfigManager;
13
+ }
14
+ export declare function Billing({ configManager }: BillingProps): import("react/jsx-runtime").JSX.Element;
15
+ export default Billing;
16
+ //# sourceMappingURL=billing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/commands/billing.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAID,wBAAgB,OAAO,CAAC,EAAE,aAAa,EAAE,EAAE,YAAY,2CAkEtD;AAED,eAAe,OAAO,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * dominion billing — view domain billing summary.
4
+ *
5
+ * Displays: list of domains with renewal price, next renewal date,
6
+ * annual total, total domains, and next upcoming renewal.
7
+ *
8
+ * Data sourced from NamecomClient.listDomains() renewalPrice field.
9
+ * Requires authentication.
10
+ */
11
+ import { Box, Text, useApp } from "ink";
12
+ import { useEffect, useState } from "react";
13
+ import { ConfigManager } from "../lib/config.js";
14
+ import { NamecomClient } from "../lib/namecom-client.js";
15
+ import { getAuthStatus } from "../lib/auth.js";
16
+ import { BillingTable } from "../components/billing-table.js";
17
+ export function Billing({ configManager }) {
18
+ const { exit } = useApp();
19
+ const [state, setState] = useState("loading");
20
+ const [errorMsg, setErrorMsg] = useState("");
21
+ const [domains, setDomains] = useState([]);
22
+ useEffect(() => {
23
+ const manager = configManager ?? new ConfigManager();
24
+ const auth = getAuthStatus(manager);
25
+ if (!auth.authenticated) {
26
+ setErrorMsg("not_authenticated");
27
+ setState("error");
28
+ setTimeout(() => exit(), 100);
29
+ return;
30
+ }
31
+ const config = manager.load();
32
+ const client = new NamecomClient({
33
+ username: config.namecom.username,
34
+ token: config.namecom.token,
35
+ });
36
+ client
37
+ .listDomainsAllPages()
38
+ .then((allDomains) => {
39
+ setDomains(allDomains);
40
+ setState("done");
41
+ setTimeout(() => exit(), 100);
42
+ })
43
+ .catch((err) => {
44
+ setErrorMsg(err instanceof Error ? err.message : "Failed to fetch domains");
45
+ setState("error");
46
+ setTimeout(() => exit(), 100);
47
+ });
48
+ }, [configManager, exit]);
49
+ if (state === "loading") {
50
+ return (_jsx(Box, { children: _jsx(Text, { color: "yellow", children: "Loading billing information..." }) }));
51
+ }
52
+ if (state === "error" && errorMsg === "not_authenticated") {
53
+ return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: "Not logged in" }), _jsxs(Text, { color: "gray", children: ["Please run ", _jsx(Text, { bold: true, color: "white", children: "dominion login" }), " first."] })] }));
54
+ }
55
+ if (state === "error") {
56
+ return (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { color: "red", bold: true, children: "Error loading billing data" }), _jsx(Text, { color: "gray", children: errorMsg })] }));
57
+ }
58
+ return _jsx(BillingTable, { domains: domains });
59
+ }
60
+ export default Billing;
61
+ //# sourceMappingURL=billing.js.map