dominion-cli 0.1.2 → 0.2.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 (119) hide show
  1. package/dist/cli.js +13 -9
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/account.d.ts +1 -1
  4. package/dist/commands/account.d.ts.map +1 -1
  5. package/dist/commands/account.js +6 -9
  6. package/dist/commands/account.js.map +1 -1
  7. package/dist/commands/billing.d.ts +1 -1
  8. package/dist/commands/billing.d.ts.map +1 -1
  9. package/dist/commands/billing.js +3 -7
  10. package/dist/commands/billing.js.map +1 -1
  11. package/dist/commands/buy.d.ts +7 -7
  12. package/dist/commands/buy.d.ts.map +1 -1
  13. package/dist/commands/buy.js +45 -141
  14. package/dist/commands/buy.js.map +1 -1
  15. package/dist/commands/cart/add.d.ts +1 -1
  16. package/dist/commands/cart/add.d.ts.map +1 -1
  17. package/dist/commands/cart/add.js +9 -8
  18. package/dist/commands/cart/add.js.map +1 -1
  19. package/dist/commands/credits.js +1 -1
  20. package/dist/commands/dns/add.d.ts +3 -3
  21. package/dist/commands/dns/add.d.ts.map +1 -1
  22. package/dist/commands/dns/add.js +3 -3
  23. package/dist/commands/dns/add.js.map +1 -1
  24. package/dist/commands/dns/list.d.ts +3 -3
  25. package/dist/commands/dns/list.d.ts.map +1 -1
  26. package/dist/commands/dns/list.js +3 -3
  27. package/dist/commands/dns/list.js.map +1 -1
  28. package/dist/commands/dns/remove.d.ts +3 -3
  29. package/dist/commands/dns/remove.d.ts.map +1 -1
  30. package/dist/commands/dns/remove.js +3 -3
  31. package/dist/commands/dns/remove.js.map +1 -1
  32. package/dist/commands/domains/detail.d.ts +1 -1
  33. package/dist/commands/domains/detail.js +3 -3
  34. package/dist/commands/domains/detail.js.map +1 -1
  35. package/dist/commands/domains/list.d.ts +1 -1
  36. package/dist/commands/domains/list.js +3 -3
  37. package/dist/commands/domains/list.js.map +1 -1
  38. package/dist/commands/login.d.ts +6 -6
  39. package/dist/commands/login.d.ts.map +1 -1
  40. package/dist/commands/login.js +58 -42
  41. package/dist/commands/login.js.map +1 -1
  42. package/dist/commands/logout.d.ts +1 -1
  43. package/dist/commands/logout.js +1 -1
  44. package/dist/commands/search.d.ts +2 -2
  45. package/dist/commands/search.js +4 -4
  46. package/dist/commands/search.js.map +1 -1
  47. package/dist/commands/settings/set.d.ts +4 -4
  48. package/dist/commands/settings/set.d.ts.map +1 -1
  49. package/dist/commands/settings/set.js +10 -11
  50. package/dist/commands/settings/set.js.map +1 -1
  51. package/dist/commands/settings/view.d.ts +3 -3
  52. package/dist/commands/settings/view.d.ts.map +1 -1
  53. package/dist/commands/settings/view.js +4 -4
  54. package/dist/commands/settings/view.js.map +1 -1
  55. package/dist/commands/vercel/link.d.ts +4 -4
  56. package/dist/commands/vercel/link.d.ts.map +1 -1
  57. package/dist/commands/vercel/link.js +8 -8
  58. package/dist/commands/vercel/link.js.map +1 -1
  59. package/dist/commands/whoami.d.ts +1 -1
  60. package/dist/commands/whoami.js +3 -3
  61. package/dist/commands/whoami.js.map +1 -1
  62. package/dist/components/account-card.d.ts +3 -3
  63. package/dist/components/account-card.d.ts.map +1 -1
  64. package/dist/components/account-card.js +3 -3
  65. package/dist/components/account-card.js.map +1 -1
  66. package/dist/components/command-runner.d.ts +25 -0
  67. package/dist/components/command-runner.d.ts.map +1 -0
  68. package/dist/components/command-runner.js +67 -0
  69. package/dist/components/command-runner.js.map +1 -0
  70. package/dist/components/prompt.d.ts +24 -0
  71. package/dist/components/prompt.d.ts.map +1 -0
  72. package/dist/components/prompt.js +113 -0
  73. package/dist/components/prompt.js.map +1 -0
  74. package/dist/components/search-results.d.ts +1 -1
  75. package/dist/components/search-results.js +1 -1
  76. package/dist/lib/auth.d.ts +17 -9
  77. package/dist/lib/auth.d.ts.map +1 -1
  78. package/dist/lib/auth.js +125 -46
  79. package/dist/lib/auth.js.map +1 -1
  80. package/dist/lib/command-registry.d.ts +47 -0
  81. package/dist/lib/command-registry.d.ts.map +1 -0
  82. package/dist/lib/command-registry.js +384 -0
  83. package/dist/lib/command-registry.js.map +1 -0
  84. package/dist/lib/config.d.ts.map +1 -1
  85. package/dist/lib/config.js +0 -8
  86. package/dist/lib/config.js.map +1 -1
  87. package/dist/lib/dns-validation.d.ts +1 -1
  88. package/dist/lib/dns-validation.d.ts.map +1 -1
  89. package/dist/lib/dns-validation.js +2 -2
  90. package/dist/lib/dns-validation.js.map +1 -1
  91. package/dist/lib/dominion-client.d.ts +43 -0
  92. package/dist/lib/dominion-client.d.ts.map +1 -0
  93. package/dist/lib/dominion-client.js +183 -0
  94. package/dist/lib/dominion-client.js.map +1 -0
  95. package/dist/lib/error-personality.js +7 -7
  96. package/dist/lib/error-personality.js.map +1 -1
  97. package/dist/lib/history.d.ts +40 -0
  98. package/dist/lib/history.d.ts.map +1 -0
  99. package/dist/lib/history.js +113 -0
  100. package/dist/lib/history.js.map +1 -0
  101. package/dist/lib/nameserver-presets.js +4 -4
  102. package/dist/lib/nameserver-presets.js.map +1 -1
  103. package/dist/lib/purchase.d.ts +20 -23
  104. package/dist/lib/purchase.d.ts.map +1 -1
  105. package/dist/lib/purchase.js +42 -70
  106. package/dist/lib/purchase.js.map +1 -1
  107. package/dist/lib/schemas.d.ts +351 -352
  108. package/dist/lib/schemas.d.ts.map +1 -1
  109. package/dist/lib/schemas.js +1 -2
  110. package/dist/lib/schemas.js.map +1 -1
  111. package/dist/lib/types.d.ts +8 -11
  112. package/dist/lib/types.d.ts.map +1 -1
  113. package/dist/lib/types.js +1 -4
  114. package/dist/lib/types.js.map +1 -1
  115. package/dist/repl.d.ts +17 -0
  116. package/dist/repl.d.ts.map +1 -0
  117. package/dist/repl.js +189 -0
  118. package/dist/repl.js.map +1 -0
  119. package/package.json +2 -1
@@ -1,19 +1,17 @@
1
1
  /**
2
- * Purchase flow logic for domain registration.
2
+ * Purchase flow logic for domain checkout.
3
3
  *
4
4
  * Handles the end-to-end purchase process:
5
- * 1. Validate contact info exists (or collect it)
6
- * 2. Re-verify availability and price (anti-fraud)
7
- * 3. Register domain via Name.com API
8
- * 4. Clear purchased domains from cart
5
+ * 1. Build cart summary with prices
6
+ * 2. Create Stripe Checkout session via Dominion API
7
+ * 3. Open checkout URL in browser
8
+ * 4. Clear purchased domains from cart after user confirms
9
9
  *
10
- * Prices from Name.com are in cents. purchasePrice must match
11
- * exactly what checkAvailability returns (Name.com anti-fraud measure).
10
+ * All prices include markup (applied server-side by Dominion API).
12
11
  */
13
- import { NamecomClient } from "./namecom-client.js";
12
+ import { DominionClient } from "./dominion-client.js";
14
13
  import { ConfigManager } from "./config.js";
15
14
  import { CartManager } from "./cart.js";
16
- import { DomainError } from "./types.js";
17
15
  // ─── Contact Info Validation ────────────────────────────────────────────────
18
16
  /**
19
17
  * Check if contact info exists in config.
@@ -47,80 +45,56 @@ export function loadContactInfo(configManager) {
47
45
  const config = manager.load();
48
46
  return config.contactInfo;
49
47
  }
50
- // ─── Price Verification ─────────────────────────────────────────────────────
48
+ // ─── Checkout ───────────────────────────────────────────────────────────────
51
49
  /**
52
- * Re-verify domain availability and price before purchase.
53
- * Returns the verified availability data including current price.
50
+ * Create a Stripe Checkout session for the given domains.
51
+ * Returns the checkout URL to open in the browser.
54
52
  */
55
- export async function verifyDomainPrice(domain, client) {
56
- const namecomClient = client ?? new NamecomClient();
57
- return namecomClient.checkAvailability(domain);
53
+ export async function createCheckout(domains, client) {
54
+ const dominionClient = client ?? new DominionClient();
55
+ // Price is in cents from the cart; convert to dollars for the API
56
+ const items = domains.map((d) => ({
57
+ domain: d.domain,
58
+ price: d.price / 100,
59
+ }));
60
+ return dominionClient.createCheckout(items);
58
61
  }
59
- // ─── Purchase Execution ─────────────────────────────────────────────────────
60
62
  /**
61
- * Purchase a single domain.
62
- * Re-verifies price, registers with contact info, returns result.
63
+ * Create checkout for all domains in the cart.
64
+ * Returns the Stripe Checkout URL.
63
65
  */
64
- export async function purchaseDomain(domain, contactInfo, client) {
65
- const namecomClient = client ?? new NamecomClient();
66
+ export async function checkoutCart(cartManager, client) {
67
+ const cart = cartManager ?? new CartManager();
68
+ const items = cart.list();
69
+ if (items.length === 0) {
70
+ return {
71
+ domain: "",
72
+ success: false,
73
+ error: "Cart is empty. Add domains with `dominion search` first.",
74
+ errorCode: "VALIDATION_ERROR",
75
+ };
76
+ }
66
77
  try {
67
- // Re-verify availability and get current price
68
- const availability = await namecomClient.checkAvailability(domain);
69
- if (!availability.purchasable) {
70
- return {
71
- domain,
72
- success: false,
73
- error: `${domain} is no longer available for registration.`,
74
- errorCode: "DOMAIN_NOT_AVAILABLE",
75
- };
76
- }
77
- // Register with verified price (anti-fraud measure)
78
- const registeredDomain = await namecomClient.registerDomain(domain, availability.purchasePrice, contactInfo);
78
+ const domains = items.map((item) => ({
79
+ domain: item.domain,
80
+ price: item.price, // cents
81
+ }));
82
+ const { url } = await createCheckout(domains, client);
79
83
  return {
80
- domain,
84
+ domain: items.map((i) => i.domain).join(", "),
81
85
  success: true,
82
- registeredDomain,
86
+ checkoutUrl: url,
83
87
  };
84
88
  }
85
89
  catch (err) {
86
- if (err instanceof DomainError) {
87
- return {
88
- domain,
89
- success: false,
90
- error: err.message,
91
- errorCode: err.code,
92
- };
93
- }
94
90
  return {
95
- domain,
91
+ domain: items.map((i) => i.domain).join(", "),
96
92
  success: false,
97
- error: err instanceof Error ? err.message : "Unknown error during purchase.",
93
+ error: err instanceof Error ? err.message : "Failed to create checkout session.",
98
94
  errorCode: "API_ERROR",
99
95
  };
100
96
  }
101
97
  }
102
- /**
103
- * Purchase all domains in the cart.
104
- * Purchases sequentially (not parallel) to avoid rate limiting.
105
- * Clears successful purchases from cart.
106
- */
107
- export async function purchaseCartDomains(contactInfo, cartManager, client) {
108
- const cart = cartManager ?? new CartManager();
109
- const items = cart.list();
110
- if (items.length === 0) {
111
- return [];
112
- }
113
- const results = [];
114
- for (const item of items) {
115
- const result = await purchaseDomain(item.domain, contactInfo, client);
116
- results.push(result);
117
- // Remove from cart on success
118
- if (result.success) {
119
- cart.remove(item.domain);
120
- }
121
- }
122
- return results;
123
- }
124
98
  // ─── Summary Helpers ────────────────────────────────────────────────────────
125
99
  /**
126
100
  * Build a purchase summary from cart items.
@@ -143,18 +117,16 @@ export function buildCartSummary(items) {
143
117
  export function getErrorSuggestion(errorCode) {
144
118
  switch (errorCode) {
145
119
  case "AUTH_ERROR":
146
- return "Check your Name.com credentials with `dominion whoami` or re-run `dominion login`.";
120
+ return "Run `dominion login` to re-authenticate.";
147
121
  case "DOMAIN_NOT_AVAILABLE":
148
122
  return "Domain may have been taken. Try `dominion search` for alternatives.";
149
123
  case "RATE_LIMITED":
150
124
  return "Too many requests. Wait a moment and try again.";
151
- case "REGISTRATION_FAILED":
152
- return "Check your Name.com account balance at https://www.name.com/account/billing";
153
125
  case "NETWORK_ERROR":
154
126
  return "Check your internet connection and try again.";
155
127
  case "API_ERROR":
156
128
  default:
157
- return "Check your Name.com account balance or try again later.";
129
+ return "Please try again later or contact support at dominion.sh/support.";
158
130
  }
159
131
  }
160
132
  //# sourceMappingURL=purchase.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"purchase.js","sourceRoot":"","sources":["../../src/lib/purchase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"purchase.js","sourceRoot":"","sources":["../../src/lib/purchase.ts"],"names":[],"mappings":"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"}