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.
- package/README.md +304 -0
- package/dist/app.d.ts +15 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +36 -0
- package/dist/app.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +369 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/account.d.ts +28 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +133 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/billing.d.ts +16 -0
- package/dist/commands/billing.d.ts.map +1 -0
- package/dist/commands/billing.js +61 -0
- package/dist/commands/billing.js.map +1 -0
- package/dist/commands/buy.d.ts +27 -0
- package/dist/commands/buy.d.ts.map +1 -0
- package/dist/commands/buy.js +293 -0
- package/dist/commands/buy.js.map +1 -0
- package/dist/commands/cart/add.d.ts +17 -0
- package/dist/commands/cart/add.d.ts.map +1 -0
- package/dist/commands/cart/add.js +119 -0
- package/dist/commands/cart/add.js.map +1 -0
- package/dist/commands/cart/clear.d.ts +12 -0
- package/dist/commands/cart/clear.d.ts.map +1 -0
- package/dist/commands/cart/clear.js +49 -0
- package/dist/commands/cart/clear.js.map +1 -0
- package/dist/commands/cart/index.d.ts +8 -0
- package/dist/commands/cart/index.d.ts.map +1 -0
- package/dist/commands/cart/index.js +8 -0
- package/dist/commands/cart/index.js.map +1 -0
- package/dist/commands/cart/list.d.ts +14 -0
- package/dist/commands/cart/list.d.ts.map +1 -0
- package/dist/commands/cart/list.js +51 -0
- package/dist/commands/cart/list.js.map +1 -0
- package/dist/commands/cart/remove.d.ts +13 -0
- package/dist/commands/cart/remove.d.ts.map +1 -0
- package/dist/commands/cart/remove.js +24 -0
- package/dist/commands/cart/remove.js.map +1 -0
- package/dist/commands/credits.d.ts +10 -0
- package/dist/commands/credits.d.ts.map +1 -0
- package/dist/commands/credits.js +139 -0
- package/dist/commands/credits.js.map +1 -0
- package/dist/commands/dns/add.d.ts +30 -0
- package/dist/commands/dns/add.d.ts.map +1 -0
- package/dist/commands/dns/add.js +144 -0
- package/dist/commands/dns/add.js.map +1 -0
- package/dist/commands/dns/index.d.ts +7 -0
- package/dist/commands/dns/index.d.ts.map +1 -0
- package/dist/commands/dns/index.js +7 -0
- package/dist/commands/dns/index.js.map +1 -0
- package/dist/commands/dns/list.d.ts +24 -0
- package/dist/commands/dns/list.d.ts.map +1 -0
- package/dist/commands/dns/list.js +111 -0
- package/dist/commands/dns/list.js.map +1 -0
- package/dist/commands/dns/remove.d.ts +24 -0
- package/dist/commands/dns/remove.d.ts.map +1 -0
- package/dist/commands/dns/remove.js +137 -0
- package/dist/commands/dns/remove.js.map +1 -0
- package/dist/commands/domains/detail.d.ts +20 -0
- package/dist/commands/domains/detail.d.ts.map +1 -0
- package/dist/commands/domains/detail.js +112 -0
- package/dist/commands/domains/detail.js.map +1 -0
- package/dist/commands/domains/index.d.ts +6 -0
- package/dist/commands/domains/index.d.ts.map +1 -0
- package/dist/commands/domains/index.js +6 -0
- package/dist/commands/domains/index.js.map +1 -0
- package/dist/commands/domains/list.d.ts +21 -0
- package/dist/commands/domains/list.d.ts.map +1 -0
- package/dist/commands/domains/list.js +106 -0
- package/dist/commands/domains/list.js.map +1 -0
- package/dist/commands/hack.d.ts +9 -0
- package/dist/commands/hack.d.ts.map +1 -0
- package/dist/commands/hack.js +104 -0
- package/dist/commands/hack.js.map +1 -0
- package/dist/commands/integrations.d.ts +20 -0
- package/dist/commands/integrations.d.ts.map +1 -0
- package/dist/commands/integrations.js +92 -0
- package/dist/commands/integrations.js.map +1 -0
- package/dist/commands/login.d.ts +15 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +95 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +13 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +32 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/search.d.ts +24 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +162 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/settings/index.d.ts +6 -0
- package/dist/commands/settings/index.d.ts.map +1 -0
- package/dist/commands/settings/index.js +6 -0
- package/dist/commands/settings/index.js.map +1 -0
- package/dist/commands/settings/set.d.ts +25 -0
- package/dist/commands/settings/set.d.ts.map +1 -0
- package/dist/commands/settings/set.js +215 -0
- package/dist/commands/settings/set.js.map +1 -0
- package/dist/commands/settings/view.d.ts +17 -0
- package/dist/commands/settings/view.d.ts.map +1 -0
- package/dist/commands/settings/view.js +99 -0
- package/dist/commands/settings/view.js.map +1 -0
- package/dist/commands/team/add.d.ts +17 -0
- package/dist/commands/team/add.d.ts.map +1 -0
- package/dist/commands/team/add.js +64 -0
- package/dist/commands/team/add.js.map +1 -0
- package/dist/commands/team/index.d.ts +7 -0
- package/dist/commands/team/index.d.ts.map +1 -0
- package/dist/commands/team/index.js +7 -0
- package/dist/commands/team/index.js.map +1 -0
- package/dist/commands/team/list.d.ts +13 -0
- package/dist/commands/team/list.d.ts.map +1 -0
- package/dist/commands/team/list.js +51 -0
- package/dist/commands/team/list.js.map +1 -0
- package/dist/commands/team/remove.d.ts +14 -0
- package/dist/commands/team/remove.d.ts.map +1 -0
- package/dist/commands/team/remove.js +57 -0
- package/dist/commands/team/remove.js.map +1 -0
- package/dist/commands/vercel/index.d.ts +8 -0
- package/dist/commands/vercel/index.d.ts.map +1 -0
- package/dist/commands/vercel/index.js +8 -0
- package/dist/commands/vercel/index.js.map +1 -0
- package/dist/commands/vercel/link.d.ts +25 -0
- package/dist/commands/vercel/link.d.ts.map +1 -0
- package/dist/commands/vercel/link.js +176 -0
- package/dist/commands/vercel/link.js.map +1 -0
- package/dist/commands/vercel/setup.d.ts +13 -0
- package/dist/commands/vercel/setup.d.ts.map +1 -0
- package/dist/commands/vercel/setup.js +113 -0
- package/dist/commands/vercel/setup.js.map +1 -0
- package/dist/commands/vercel/status.d.ts +15 -0
- package/dist/commands/vercel/status.d.ts.map +1 -0
- package/dist/commands/vercel/status.js +103 -0
- package/dist/commands/vercel/status.js.map +1 -0
- package/dist/commands/vercel/unlink.d.ts +16 -0
- package/dist/commands/vercel/unlink.d.ts.map +1 -0
- package/dist/commands/vercel/unlink.js +118 -0
- package/dist/commands/vercel/unlink.js.map +1 -0
- package/dist/commands/webhooks/add.d.ts +16 -0
- package/dist/commands/webhooks/add.d.ts.map +1 -0
- package/dist/commands/webhooks/add.js +61 -0
- package/dist/commands/webhooks/add.js.map +1 -0
- package/dist/commands/webhooks/index.d.ts +7 -0
- package/dist/commands/webhooks/index.d.ts.map +1 -0
- package/dist/commands/webhooks/index.js +7 -0
- package/dist/commands/webhooks/index.js.map +1 -0
- package/dist/commands/webhooks/list.d.ts +14 -0
- package/dist/commands/webhooks/list.d.ts.map +1 -0
- package/dist/commands/webhooks/list.js +47 -0
- package/dist/commands/webhooks/list.js.map +1 -0
- package/dist/commands/webhooks/remove.d.ts +14 -0
- package/dist/commands/webhooks/remove.d.ts.map +1 -0
- package/dist/commands/webhooks/remove.js +57 -0
- package/dist/commands/webhooks/remove.js.map +1 -0
- package/dist/commands/whoami.d.ts +13 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +33 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/components/account-card.d.ts +17 -0
- package/dist/components/account-card.d.ts.map +1 -0
- package/dist/components/account-card.js +19 -0
- package/dist/components/account-card.js.map +1 -0
- package/dist/components/billing-table.d.ts +22 -0
- package/dist/components/billing-table.d.ts.map +1 -0
- package/dist/components/billing-table.js +53 -0
- package/dist/components/billing-table.js.map +1 -0
- package/dist/components/celebration.d.ts +21 -0
- package/dist/components/celebration.d.ts.map +1 -0
- package/dist/components/celebration.js +55 -0
- package/dist/components/celebration.js.map +1 -0
- package/dist/components/contact-form.d.ts +23 -0
- package/dist/components/contact-form.d.ts.map +1 -0
- package/dist/components/contact-form.js +109 -0
- package/dist/components/contact-form.js.map +1 -0
- package/dist/components/dns-table.d.ts +14 -0
- package/dist/components/dns-table.d.ts.map +1 -0
- package/dist/components/dns-table.js +71 -0
- package/dist/components/dns-table.js.map +1 -0
- package/dist/components/domain-card.d.ts +14 -0
- package/dist/components/domain-card.d.ts.map +1 -0
- package/dist/components/domain-card.js +41 -0
- package/dist/components/domain-card.js.map +1 -0
- package/dist/components/domain-table.d.ts +30 -0
- package/dist/components/domain-table.d.ts.map +1 -0
- package/dist/components/domain-table.js +87 -0
- package/dist/components/domain-table.js.map +1 -0
- package/dist/components/error-display.d.ts +25 -0
- package/dist/components/error-display.d.ts.map +1 -0
- package/dist/components/error-display.js +51 -0
- package/dist/components/error-display.js.map +1 -0
- package/dist/components/layout.d.ts +14 -0
- package/dist/components/layout.d.ts.map +1 -0
- package/dist/components/layout.js +21 -0
- package/dist/components/layout.js.map +1 -0
- package/dist/components/logo.d.ts +37 -0
- package/dist/components/logo.d.ts.map +1 -0
- package/dist/components/logo.js +70 -0
- package/dist/components/logo.js.map +1 -0
- package/dist/components/matrix-rain.d.ts +17 -0
- package/dist/components/matrix-rain.d.ts.map +1 -0
- package/dist/components/matrix-rain.js +105 -0
- package/dist/components/matrix-rain.js.map +1 -0
- package/dist/components/purchase-confirmation.d.ts +17 -0
- package/dist/components/purchase-confirmation.d.ts.map +1 -0
- package/dist/components/purchase-confirmation.js +17 -0
- package/dist/components/purchase-confirmation.js.map +1 -0
- package/dist/components/search-results.d.ts +30 -0
- package/dist/components/search-results.d.ts.map +1 -0
- package/dist/components/search-results.js +53 -0
- package/dist/components/search-results.js.map +1 -0
- package/dist/components/settings-card.d.ts +14 -0
- package/dist/components/settings-card.d.ts.map +1 -0
- package/dist/components/settings-card.js +40 -0
- package/dist/components/settings-card.js.map +1 -0
- package/dist/components/spinner-messages.d.ts +19 -0
- package/dist/components/spinner-messages.d.ts.map +1 -0
- package/dist/components/spinner-messages.js +55 -0
- package/dist/components/spinner-messages.js.map +1 -0
- package/dist/lib/achievements.d.ts +107 -0
- package/dist/lib/achievements.d.ts.map +1 -0
- package/dist/lib/achievements.js +341 -0
- package/dist/lib/achievements.js.map +1 -0
- package/dist/lib/auth.d.ts +45 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +125 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/cart.d.ts +69 -0
- package/dist/lib/cart.d.ts.map +1 -0
- package/dist/lib/cart.js +131 -0
- package/dist/lib/cart.js.map +1 -0
- package/dist/lib/config.d.ts +51 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +116 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/dns-validation.d.ts +51 -0
- package/dist/lib/dns-validation.d.ts.map +1 -0
- package/dist/lib/dns-validation.js +185 -0
- package/dist/lib/dns-validation.js.map +1 -0
- package/dist/lib/easter-eggs.d.ts +21 -0
- package/dist/lib/easter-eggs.d.ts.map +1 -0
- package/dist/lib/easter-eggs.js +64 -0
- package/dist/lib/easter-eggs.js.map +1 -0
- package/dist/lib/error-personality.d.ts +35 -0
- package/dist/lib/error-personality.d.ts.map +1 -0
- package/dist/lib/error-personality.js +191 -0
- package/dist/lib/error-personality.js.map +1 -0
- package/dist/lib/errors.d.ts +8 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +7 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/konami.d.ts +51 -0
- package/dist/lib/konami.d.ts.map +1 -0
- package/dist/lib/konami.js +107 -0
- package/dist/lib/konami.js.map +1 -0
- package/dist/lib/loading-messages.d.ts +13 -0
- package/dist/lib/loading-messages.d.ts.map +1 -0
- package/dist/lib/loading-messages.js +13 -0
- package/dist/lib/loading-messages.js.map +1 -0
- package/dist/lib/namecom-client.d.ts +73 -0
- package/dist/lib/namecom-client.d.ts.map +1 -0
- package/dist/lib/namecom-client.js +260 -0
- package/dist/lib/namecom-client.js.map +1 -0
- package/dist/lib/nameserver-presets.d.ts +27 -0
- package/dist/lib/nameserver-presets.d.ts.map +1 -0
- package/dist/lib/nameserver-presets.js +45 -0
- package/dist/lib/nameserver-presets.js.map +1 -0
- package/dist/lib/purchase.d.ts +71 -0
- package/dist/lib/purchase.d.ts.map +1 -0
- package/dist/lib/purchase.js +160 -0
- package/dist/lib/purchase.js.map +1 -0
- package/dist/lib/schemas.d.ts +1968 -0
- package/dist/lib/schemas.d.ts.map +1 -0
- package/dist/lib/schemas.js +112 -0
- package/dist/lib/schemas.js.map +1 -0
- package/dist/lib/team.d.ts +71 -0
- package/dist/lib/team.d.ts.map +1 -0
- package/dist/lib/team.js +135 -0
- package/dist/lib/team.js.map +1 -0
- package/dist/lib/theme.d.ts +152 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/lib/theme.js +185 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/types.d.ts +136 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +19 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/vercel-client.d.ts +110 -0
- package/dist/lib/vercel-client.d.ts.map +1 -0
- package/dist/lib/vercel-client.js +196 -0
- package/dist/lib/vercel-client.js.map +1 -0
- package/dist/lib/webhooks.d.ts +83 -0
- package/dist/lib/webhooks.d.ts.map +1 -0
- package/dist/lib/webhooks.js +195 -0
- package/dist/lib/webhooks.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Konami code detection for Ink terminal input.
|
|
3
|
+
*
|
|
4
|
+
* Listens for the classic sequence: up-up-down-down-left-right-left-right-b-a
|
|
5
|
+
* via Ink's useInput hook. When detected, triggers the callback (Matrix rain).
|
|
6
|
+
*
|
|
7
|
+
* Arrow keys arrive as special keys in Ink's input handler.
|
|
8
|
+
* Letter keys arrive as regular input characters.
|
|
9
|
+
*/
|
|
10
|
+
export const KONAMI_SEQUENCE = [
|
|
11
|
+
{ type: "arrow", value: "upArrow" },
|
|
12
|
+
{ type: "arrow", value: "upArrow" },
|
|
13
|
+
{ type: "arrow", value: "downArrow" },
|
|
14
|
+
{ type: "arrow", value: "downArrow" },
|
|
15
|
+
{ type: "arrow", value: "leftArrow" },
|
|
16
|
+
{ type: "arrow", value: "rightArrow" },
|
|
17
|
+
{ type: "arrow", value: "leftArrow" },
|
|
18
|
+
{ type: "arrow", value: "rightArrow" },
|
|
19
|
+
{ type: "letter", value: "b" },
|
|
20
|
+
{ type: "letter", value: "a" },
|
|
21
|
+
];
|
|
22
|
+
// ─── Tracker ────────────────────────────────────────────────────────────────
|
|
23
|
+
/**
|
|
24
|
+
* Tracks progress through the Konami code sequence.
|
|
25
|
+
* Thread-safe for a single-threaded Node.js event loop.
|
|
26
|
+
*/
|
|
27
|
+
export class KonamiTracker {
|
|
28
|
+
position = 0;
|
|
29
|
+
onComplete;
|
|
30
|
+
timeout;
|
|
31
|
+
lastInputTime = 0;
|
|
32
|
+
/**
|
|
33
|
+
* @param onComplete - Callback fired when the full sequence is entered
|
|
34
|
+
* @param timeout - Max ms between inputs before resetting (default 5000)
|
|
35
|
+
*/
|
|
36
|
+
constructor(onComplete, timeout = 5000) {
|
|
37
|
+
this.onComplete = onComplete;
|
|
38
|
+
this.timeout = timeout;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Process a key input from Ink's useInput hook.
|
|
42
|
+
*
|
|
43
|
+
* @param input - The character input (for letter keys)
|
|
44
|
+
* @param key - The key object from Ink (for arrow keys)
|
|
45
|
+
* @returns true if the sequence was just completed
|
|
46
|
+
*/
|
|
47
|
+
handleInput(input, key) {
|
|
48
|
+
const now = Date.now();
|
|
49
|
+
// Reset if too much time has passed
|
|
50
|
+
if (this.lastInputTime > 0 && now - this.lastInputTime > this.timeout) {
|
|
51
|
+
this.position = 0;
|
|
52
|
+
}
|
|
53
|
+
this.lastInputTime = now;
|
|
54
|
+
const expected = KONAMI_SEQUENCE[this.position];
|
|
55
|
+
if (!expected) {
|
|
56
|
+
this.position = 0;
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
let matched = false;
|
|
60
|
+
if (expected.type === "arrow") {
|
|
61
|
+
// Check arrow key
|
|
62
|
+
const arrowMap = {
|
|
63
|
+
upArrow: key.upArrow,
|
|
64
|
+
downArrow: key.downArrow,
|
|
65
|
+
leftArrow: key.leftArrow,
|
|
66
|
+
rightArrow: key.rightArrow,
|
|
67
|
+
};
|
|
68
|
+
matched = arrowMap[expected.value] === true;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Check letter key
|
|
72
|
+
matched = input.toLowerCase() === expected.value;
|
|
73
|
+
}
|
|
74
|
+
if (matched) {
|
|
75
|
+
this.position++;
|
|
76
|
+
if (this.position === KONAMI_SEQUENCE.length) {
|
|
77
|
+
this.position = 0;
|
|
78
|
+
this.onComplete();
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Reset on mismatch, but check if this input starts the sequence
|
|
84
|
+
this.position = 0;
|
|
85
|
+
const first = KONAMI_SEQUENCE[0];
|
|
86
|
+
if (first.type === "arrow" &&
|
|
87
|
+
key[first.value] === true) {
|
|
88
|
+
this.position = 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get current progress through the sequence (0 to 10).
|
|
95
|
+
*/
|
|
96
|
+
getProgress() {
|
|
97
|
+
return this.position;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Reset the tracker state.
|
|
101
|
+
*/
|
|
102
|
+
reset() {
|
|
103
|
+
this.position = 0;
|
|
104
|
+
this.lastInputTime = 0;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=konami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"konami.js","sourceRoot":"","sources":["../../src/lib/konami.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rotating witty loading messages for any spinner/wait state.
|
|
3
|
+
*
|
|
4
|
+
* Canonical pool of 22+ messages used across all CLI commands.
|
|
5
|
+
* Re-exports the public API from spinner-messages.ts for backward
|
|
6
|
+
* compatibility — this file serves as the "proper" lib module while
|
|
7
|
+
* the components/spinner-messages.ts continues to work for existing imports.
|
|
8
|
+
*
|
|
9
|
+
* New code should import from this module:
|
|
10
|
+
* import { getRandomMessage } from "../lib/loading-messages.js";
|
|
11
|
+
*/
|
|
12
|
+
export { getRandomMessage, getAllMessages, resetMessageTracker, } from "../components/spinner-messages.js";
|
|
13
|
+
//# sourceMappingURL=loading-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading-messages.d.ts","sourceRoot":"","sources":["../../src/lib/loading-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,mBAAmB,GACpB,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rotating witty loading messages for any spinner/wait state.
|
|
3
|
+
*
|
|
4
|
+
* Canonical pool of 22+ messages used across all CLI commands.
|
|
5
|
+
* Re-exports the public API from spinner-messages.ts for backward
|
|
6
|
+
* compatibility — this file serves as the "proper" lib module while
|
|
7
|
+
* the components/spinner-messages.ts continues to work for existing imports.
|
|
8
|
+
*
|
|
9
|
+
* New code should import from this module:
|
|
10
|
+
* import { getRandomMessage } from "../lib/loading-messages.js";
|
|
11
|
+
*/
|
|
12
|
+
export { getRandomMessage, getAllMessages, resetMessageTracker, } from "../components/spinner-messages.js";
|
|
13
|
+
//# sourceMappingURL=loading-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading-messages.js","sourceRoot":"","sources":["../../src/lib/loading-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,mBAAmB,GACpB,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed Name.com REST v4 API client.
|
|
3
|
+
* Vendored from dominion-site — adapted to read credentials from ConfigManager.
|
|
4
|
+
*
|
|
5
|
+
* Handles authentication, rate limiting, request/response validation,
|
|
6
|
+
* and error mapping for all domain operations.
|
|
7
|
+
*
|
|
8
|
+
* @see https://www.name.com/api-docs
|
|
9
|
+
*/
|
|
10
|
+
import type { ContactInfo, DnsRecord, DnsRecordInput, Domain, DomainAvailability, DomainSearchResult, ListDnsRecordsResponse, ListDomainsResponse, NamecomClientConfig, RenewDomainResponse } from "./types.js";
|
|
11
|
+
export declare class NamecomClient {
|
|
12
|
+
private readonly baseUrl;
|
|
13
|
+
private readonly authHeader;
|
|
14
|
+
private readonly rateLimiter;
|
|
15
|
+
/**
|
|
16
|
+
* Create a new NamecomClient.
|
|
17
|
+
*
|
|
18
|
+
* Credentials are resolved in order:
|
|
19
|
+
* 1. Explicit config parameter (username + token)
|
|
20
|
+
* 2. ConfigManager (~/.dominion/config.json)
|
|
21
|
+
* 3. Environment variables (NAMECOM_API_USERNAME + NAMECOM_API_TOKEN)
|
|
22
|
+
*/
|
|
23
|
+
constructor(config?: Partial<NamecomClientConfig>);
|
|
24
|
+
/**
|
|
25
|
+
* Search for available domains matching a keyword.
|
|
26
|
+
* Returns availability and pricing for each result.
|
|
27
|
+
*/
|
|
28
|
+
searchDomains(query: string, tlds?: string[]): Promise<DomainSearchResult[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Check if a specific domain name is available for registration.
|
|
31
|
+
*/
|
|
32
|
+
checkAvailability(domain: string): Promise<DomainAvailability>;
|
|
33
|
+
/**
|
|
34
|
+
* Register a new domain. The purchasePrice must match the price from
|
|
35
|
+
* search/availability check (anti-fraud measure by Name.com).
|
|
36
|
+
*/
|
|
37
|
+
registerDomain(domain: string, purchasePrice: number, contacts: ContactInfo): Promise<Domain>;
|
|
38
|
+
/**
|
|
39
|
+
* Get details for a single domain.
|
|
40
|
+
*/
|
|
41
|
+
getDomain(domain: string): Promise<Domain>;
|
|
42
|
+
/**
|
|
43
|
+
* List domains in the account (single page).
|
|
44
|
+
*/
|
|
45
|
+
listDomains(page?: number): Promise<ListDomainsResponse>;
|
|
46
|
+
/**
|
|
47
|
+
* List all domains in the account, automatically fetching all pages.
|
|
48
|
+
*/
|
|
49
|
+
listDomainsAllPages(): Promise<Domain[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Set nameservers for a domain.
|
|
52
|
+
*/
|
|
53
|
+
setNameservers(domain: string, nameservers: string[]): Promise<Domain>;
|
|
54
|
+
/**
|
|
55
|
+
* Create a DNS record for a domain.
|
|
56
|
+
*/
|
|
57
|
+
createDnsRecord(domain: string, record: DnsRecordInput): Promise<DnsRecord>;
|
|
58
|
+
/**
|
|
59
|
+
* List all DNS records for a domain.
|
|
60
|
+
*/
|
|
61
|
+
listDnsRecords(domain: string): Promise<ListDnsRecordsResponse>;
|
|
62
|
+
/**
|
|
63
|
+
* Delete a DNS record by ID.
|
|
64
|
+
*/
|
|
65
|
+
deleteDnsRecord(domain: string, id: number): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Renew a domain. The purchasePrice must match the expected renewal price.
|
|
68
|
+
*/
|
|
69
|
+
renewDomain(domain: string, purchasePrice: number): Promise<RenewDomainResponse>;
|
|
70
|
+
private request;
|
|
71
|
+
private handleApiError;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=namecom-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namecom-client.d.ts","sourceRoot":"","sources":["../../src/lib/namecom-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EAEX,SAAS,EACT,cAAc,EACd,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AA0DpB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAE1C;;;;;;;OAOG;gBACS,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAoCjD;;;OAGG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAWhC;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiBpE;;;OAGG;IACG,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC;IAuBlB;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhD;;OAEG;IACG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM9D;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAe9C;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAY5E;;OAEG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,SAAS,CAAC;IASrB;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAKrE;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,CAAC;YAQjB,OAAO;IAsDrB,OAAO,CAAC,cAAc;CA2CvB"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed Name.com REST v4 API client.
|
|
3
|
+
* Vendored from dominion-site — adapted to read credentials from ConfigManager.
|
|
4
|
+
*
|
|
5
|
+
* Handles authentication, rate limiting, request/response validation,
|
|
6
|
+
* and error mapping for all domain operations.
|
|
7
|
+
*
|
|
8
|
+
* @see https://www.name.com/api-docs
|
|
9
|
+
*/
|
|
10
|
+
import { DomainError } from "./types.js";
|
|
11
|
+
import { DnsRecordSchema, DomainAvailabilitySchema, DomainSchema, DomainSearchResponseSchema, ListDnsRecordsResponseSchema, ListDomainsResponseSchema, NamecomErrorResponseSchema, RenewDomainResponseSchema, } from "./schemas.js";
|
|
12
|
+
import { ConfigManager } from "./config.js";
|
|
13
|
+
// ─── Rate Limiter (Token Bucket) ─────────────────────────────────────────────
|
|
14
|
+
class TokenBucket {
|
|
15
|
+
tokens;
|
|
16
|
+
maxTokens;
|
|
17
|
+
refillRate; // tokens per ms
|
|
18
|
+
lastRefill;
|
|
19
|
+
constructor(maxPerSecond) {
|
|
20
|
+
this.maxTokens = maxPerSecond;
|
|
21
|
+
this.tokens = maxPerSecond;
|
|
22
|
+
this.refillRate = maxPerSecond / 1000;
|
|
23
|
+
this.lastRefill = Date.now();
|
|
24
|
+
}
|
|
25
|
+
async acquire() {
|
|
26
|
+
this.refill();
|
|
27
|
+
if (this.tokens >= 1) {
|
|
28
|
+
this.tokens -= 1;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Wait until a token is available
|
|
32
|
+
const waitMs = Math.ceil((1 - this.tokens) / this.refillRate);
|
|
33
|
+
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
34
|
+
this.refill();
|
|
35
|
+
this.tokens -= 1;
|
|
36
|
+
}
|
|
37
|
+
refill() {
|
|
38
|
+
const now = Date.now();
|
|
39
|
+
const elapsed = now - this.lastRefill;
|
|
40
|
+
this.tokens = Math.min(this.maxTokens, this.tokens + elapsed * this.refillRate);
|
|
41
|
+
this.lastRefill = now;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// ─── Client ──────────────────────────────────────────────────────────────────
|
|
45
|
+
const PRODUCTION_BASE_URL = "https://api.name.com/v4";
|
|
46
|
+
const SANDBOX_BASE_URL = "https://api.dev.name.com/v4";
|
|
47
|
+
const DEFAULT_MAX_RPS = 10;
|
|
48
|
+
export class NamecomClient {
|
|
49
|
+
baseUrl;
|
|
50
|
+
authHeader;
|
|
51
|
+
rateLimiter;
|
|
52
|
+
/**
|
|
53
|
+
* Create a new NamecomClient.
|
|
54
|
+
*
|
|
55
|
+
* Credentials are resolved in order:
|
|
56
|
+
* 1. Explicit config parameter (username + token)
|
|
57
|
+
* 2. ConfigManager (~/.dominion/config.json)
|
|
58
|
+
* 3. Environment variables (NAMECOM_API_USERNAME + NAMECOM_API_TOKEN)
|
|
59
|
+
*/
|
|
60
|
+
constructor(config) {
|
|
61
|
+
let username = config?.username;
|
|
62
|
+
let token = config?.token;
|
|
63
|
+
// Fall back to ConfigManager if no explicit credentials
|
|
64
|
+
if (!username || !token) {
|
|
65
|
+
const configManager = new ConfigManager();
|
|
66
|
+
const storedConfig = configManager.load();
|
|
67
|
+
if (storedConfig.namecom.username && storedConfig.namecom.token) {
|
|
68
|
+
username = username ?? storedConfig.namecom.username;
|
|
69
|
+
token = token ?? storedConfig.namecom.token;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Fall back to environment variables
|
|
73
|
+
username = username ?? process.env.NAMECOM_API_USERNAME;
|
|
74
|
+
token = token ?? process.env.NAMECOM_API_TOKEN;
|
|
75
|
+
if (!username || !token) {
|
|
76
|
+
throw new DomainError("AUTH_ERROR", "Name.com API credentials are required. Run `dominion login` or set NAMECOM_API_USERNAME and NAMECOM_API_TOKEN environment variables.");
|
|
77
|
+
}
|
|
78
|
+
// Auto-detect sandbox vs production based on username suffix or explicit config
|
|
79
|
+
const explicitUrl = config?.baseUrl ?? process.env.NAMECOM_API_URL;
|
|
80
|
+
const isSandbox = username.endsWith("-test");
|
|
81
|
+
this.baseUrl = explicitUrl ?? (isSandbox ? SANDBOX_BASE_URL : PRODUCTION_BASE_URL);
|
|
82
|
+
this.authHeader = `Basic ${Buffer.from(`${username}:${token}`).toString("base64")}`;
|
|
83
|
+
this.rateLimiter = new TokenBucket(config?.maxRequestsPerSecond ?? DEFAULT_MAX_RPS);
|
|
84
|
+
}
|
|
85
|
+
// ─── Domain Search ───────────────────────────────────────────────────────
|
|
86
|
+
/**
|
|
87
|
+
* Search for available domains matching a keyword.
|
|
88
|
+
* Returns availability and pricing for each result.
|
|
89
|
+
*/
|
|
90
|
+
async searchDomains(query, tlds) {
|
|
91
|
+
const body = { keyword: query };
|
|
92
|
+
if (tlds && tlds.length > 0) {
|
|
93
|
+
body.tldFilter = tlds;
|
|
94
|
+
}
|
|
95
|
+
const data = await this.request("POST", "/domains:search", body);
|
|
96
|
+
const parsed = DomainSearchResponseSchema.parse(data);
|
|
97
|
+
return parsed.results;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if a specific domain name is available for registration.
|
|
101
|
+
*/
|
|
102
|
+
async checkAvailability(domain) {
|
|
103
|
+
const body = { domainNames: [domain] };
|
|
104
|
+
const data = await this.request("POST", "/domains:checkAvailability", body);
|
|
105
|
+
// The API returns a results array; we want the first item
|
|
106
|
+
const results = data?.results;
|
|
107
|
+
if (!Array.isArray(results) || results.length === 0) {
|
|
108
|
+
throw new DomainError("DOMAIN_NOT_FOUND", `No availability data returned for ${domain}`, {
|
|
109
|
+
domain,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return DomainAvailabilitySchema.parse(results[0]);
|
|
113
|
+
}
|
|
114
|
+
// ─── Domain Registration ─────────────────────────────────────────────────
|
|
115
|
+
/**
|
|
116
|
+
* Register a new domain. The purchasePrice must match the price from
|
|
117
|
+
* search/availability check (anti-fraud measure by Name.com).
|
|
118
|
+
*/
|
|
119
|
+
async registerDomain(domain, purchasePrice, contacts) {
|
|
120
|
+
const fullContacts = {
|
|
121
|
+
registrant: contacts,
|
|
122
|
+
admin: contacts,
|
|
123
|
+
tech: contacts,
|
|
124
|
+
billing: contacts,
|
|
125
|
+
};
|
|
126
|
+
const body = {
|
|
127
|
+
domain: {
|
|
128
|
+
domainName: domain,
|
|
129
|
+
},
|
|
130
|
+
purchasePrice,
|
|
131
|
+
contacts: fullContacts,
|
|
132
|
+
privacyEnabled: true,
|
|
133
|
+
};
|
|
134
|
+
const data = await this.request("POST", "/domains", body);
|
|
135
|
+
return DomainSchema.parse(data);
|
|
136
|
+
}
|
|
137
|
+
// ─── Domain Management ───────────────────────────────────────────────────
|
|
138
|
+
/**
|
|
139
|
+
* Get details for a single domain.
|
|
140
|
+
*/
|
|
141
|
+
async getDomain(domain) {
|
|
142
|
+
const data = await this.request("GET", `/domains/${domain}`);
|
|
143
|
+
return DomainSchema.parse(data);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* List domains in the account (single page).
|
|
147
|
+
*/
|
|
148
|
+
async listDomains(page) {
|
|
149
|
+
const path = page ? `/domains?page=${page}` : "/domains";
|
|
150
|
+
const data = await this.request("GET", path);
|
|
151
|
+
return ListDomainsResponseSchema.parse(data);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* List all domains in the account, automatically fetching all pages.
|
|
155
|
+
*/
|
|
156
|
+
async listDomainsAllPages() {
|
|
157
|
+
const allDomains = [];
|
|
158
|
+
let page = undefined;
|
|
159
|
+
do {
|
|
160
|
+
const response = await this.listDomains(page);
|
|
161
|
+
if (response.domains) {
|
|
162
|
+
allDomains.push(...response.domains);
|
|
163
|
+
}
|
|
164
|
+
page = response.nextPage;
|
|
165
|
+
} while (page !== undefined);
|
|
166
|
+
return allDomains;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Set nameservers for a domain.
|
|
170
|
+
*/
|
|
171
|
+
async setNameservers(domain, nameservers) {
|
|
172
|
+
const body = { nameservers };
|
|
173
|
+
const data = await this.request("POST", `/domains/${domain}:setNameservers`, body);
|
|
174
|
+
return DomainSchema.parse(data);
|
|
175
|
+
}
|
|
176
|
+
// ─── DNS Records ─────────────────────────────────────────────────────────
|
|
177
|
+
/**
|
|
178
|
+
* Create a DNS record for a domain.
|
|
179
|
+
*/
|
|
180
|
+
async createDnsRecord(domain, record) {
|
|
181
|
+
const data = await this.request("POST", `/domains/${domain}/records`, record);
|
|
182
|
+
return DnsRecordSchema.parse(data);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* List all DNS records for a domain.
|
|
186
|
+
*/
|
|
187
|
+
async listDnsRecords(domain) {
|
|
188
|
+
const data = await this.request("GET", `/domains/${domain}/records`);
|
|
189
|
+
return ListDnsRecordsResponseSchema.parse(data);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Delete a DNS record by ID.
|
|
193
|
+
*/
|
|
194
|
+
async deleteDnsRecord(domain, id) {
|
|
195
|
+
await this.request("DELETE", `/domains/${domain}/records/${id}`);
|
|
196
|
+
}
|
|
197
|
+
// ─── Renewal ─────────────────────────────────────────────────────────────
|
|
198
|
+
/**
|
|
199
|
+
* Renew a domain. The purchasePrice must match the expected renewal price.
|
|
200
|
+
*/
|
|
201
|
+
async renewDomain(domain, purchasePrice) {
|
|
202
|
+
const body = { purchasePrice };
|
|
203
|
+
const data = await this.request("POST", `/domains/${domain}:renew`, body);
|
|
204
|
+
return RenewDomainResponseSchema.parse(data);
|
|
205
|
+
}
|
|
206
|
+
// ─── HTTP Layer ──────────────────────────────────────────────────────────
|
|
207
|
+
async request(method, path, body) {
|
|
208
|
+
await this.rateLimiter.acquire();
|
|
209
|
+
const url = `${this.baseUrl}${path}`;
|
|
210
|
+
const headers = {
|
|
211
|
+
Authorization: this.authHeader,
|
|
212
|
+
"Content-Type": "application/json",
|
|
213
|
+
Accept: "application/json",
|
|
214
|
+
};
|
|
215
|
+
const init = { method, headers };
|
|
216
|
+
if (body !== undefined && method !== "GET" && method !== "DELETE") {
|
|
217
|
+
init.body = JSON.stringify(body);
|
|
218
|
+
}
|
|
219
|
+
let response;
|
|
220
|
+
try {
|
|
221
|
+
response = await fetch(url, init);
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
throw new DomainError("NETWORK_ERROR", `Failed to connect to Name.com API: ${err.message}`, { url, method });
|
|
225
|
+
}
|
|
226
|
+
// 204 No Content (e.g. successful DELETE)
|
|
227
|
+
if (response.status === 204) {
|
|
228
|
+
return {};
|
|
229
|
+
}
|
|
230
|
+
let data;
|
|
231
|
+
try {
|
|
232
|
+
data = await response.json();
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
throw new DomainError("API_ERROR", `Invalid JSON response from Name.com API (${response.status})`, { url, method, status: response.status }, response.status);
|
|
236
|
+
}
|
|
237
|
+
if (!response.ok) {
|
|
238
|
+
this.handleApiError(response.status, data);
|
|
239
|
+
}
|
|
240
|
+
return data;
|
|
241
|
+
}
|
|
242
|
+
handleApiError(status, data) {
|
|
243
|
+
const parsed = NamecomErrorResponseSchema.safeParse(data);
|
|
244
|
+
const message = parsed.success
|
|
245
|
+
? parsed.data.message
|
|
246
|
+
: `Name.com API error (${status})`;
|
|
247
|
+
const details = parsed.success ? parsed.data.details : undefined;
|
|
248
|
+
if (status === 401 || status === 403) {
|
|
249
|
+
throw new DomainError("AUTH_ERROR", `Authentication failed: ${message}`, { details }, status);
|
|
250
|
+
}
|
|
251
|
+
if (status === 404) {
|
|
252
|
+
throw new DomainError("DOMAIN_NOT_FOUND", message, { details }, status);
|
|
253
|
+
}
|
|
254
|
+
if (status === 429) {
|
|
255
|
+
throw new DomainError("RATE_LIMITED", "Rate limited by Name.com API. Please try again later.", { details }, status);
|
|
256
|
+
}
|
|
257
|
+
throw new DomainError("API_ERROR", message, { details, statusCode: status }, status);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=namecom-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namecom-client.js","sourceRoot":"","sources":["../../src/lib/namecom-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nameserver presets for common hosting providers.
|
|
3
|
+
*
|
|
4
|
+
* Used by `dominion settings <domain> set nameservers --preset <name>`
|
|
5
|
+
* to quickly configure nameservers for popular services.
|
|
6
|
+
*/
|
|
7
|
+
export interface NameserverPreset {
|
|
8
|
+
name: string;
|
|
9
|
+
label: string;
|
|
10
|
+
nameservers: string[];
|
|
11
|
+
description: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const NAMESERVER_PRESETS: Record<string, NameserverPreset>;
|
|
14
|
+
/**
|
|
15
|
+
* Get a nameserver preset by name (case-insensitive).
|
|
16
|
+
* Returns undefined if not found.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getPreset(name: string): NameserverPreset | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Get all available preset names.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getPresetNames(): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Check if a given name is a valid preset.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isValidPreset(name: string): boolean;
|
|
27
|
+
//# sourceMappingURL=nameserver-presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nameserver-presets.d.ts","sourceRoot":"","sources":["../../src/lib/nameserver-presets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAkB/D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEpE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nameserver presets for common hosting providers.
|
|
3
|
+
*
|
|
4
|
+
* Used by `dominion settings <domain> set nameservers --preset <name>`
|
|
5
|
+
* to quickly configure nameservers for popular services.
|
|
6
|
+
*/
|
|
7
|
+
export const NAMESERVER_PRESETS = {
|
|
8
|
+
vercel: {
|
|
9
|
+
name: "vercel",
|
|
10
|
+
label: "Vercel",
|
|
11
|
+
nameservers: ["ns1.vercel-dns.com", "ns2.vercel-dns.com"],
|
|
12
|
+
description: "Vercel DNS — auto-provisions SSL, optimized for Vercel deployments",
|
|
13
|
+
},
|
|
14
|
+
namecom: {
|
|
15
|
+
name: "namecom",
|
|
16
|
+
label: "Name.com",
|
|
17
|
+
nameservers: [
|
|
18
|
+
"ns1.name.com",
|
|
19
|
+
"ns2.name.com",
|
|
20
|
+
"ns3.name.com",
|
|
21
|
+
"ns4.name.com",
|
|
22
|
+
],
|
|
23
|
+
description: "Name.com default nameservers",
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Get a nameserver preset by name (case-insensitive).
|
|
28
|
+
* Returns undefined if not found.
|
|
29
|
+
*/
|
|
30
|
+
export function getPreset(name) {
|
|
31
|
+
return NAMESERVER_PRESETS[name.toLowerCase()];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get all available preset names.
|
|
35
|
+
*/
|
|
36
|
+
export function getPresetNames() {
|
|
37
|
+
return Object.keys(NAMESERVER_PRESETS);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if a given name is a valid preset.
|
|
41
|
+
*/
|
|
42
|
+
export function isValidPreset(name) {
|
|
43
|
+
return name.toLowerCase() in NAMESERVER_PRESETS;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=nameserver-presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nameserver-presets.js","sourceRoot":"","sources":["../../src/lib/nameserver-presets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,CAAC,MAAM,kBAAkB,GAAqC;IAClE,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;QACzD,WAAW,EAAE,oEAAoE;KAClF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE;YACX,cAAc;YACd,cAAc;YACd,cAAc;YACd,cAAc;SACf;QACD,WAAW,EAAE,8BAA8B;KAC5C;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,kBAAkB,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Purchase flow logic for domain registration.
|
|
3
|
+
*
|
|
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
|
|
9
|
+
*
|
|
10
|
+
* Prices from Name.com are in cents. purchasePrice must match
|
|
11
|
+
* exactly what checkAvailability returns (Name.com anti-fraud measure).
|
|
12
|
+
*/
|
|
13
|
+
import { NamecomClient } from "./namecom-client.js";
|
|
14
|
+
import { ConfigManager } from "./config.js";
|
|
15
|
+
import { CartManager, type CartItem } from "./cart.js";
|
|
16
|
+
import type { ContactInfo, Domain, DomainAvailability } from "./types.js";
|
|
17
|
+
export interface PurchaseItem {
|
|
18
|
+
domain: string;
|
|
19
|
+
price: number;
|
|
20
|
+
premium: boolean;
|
|
21
|
+
verifiedPrice?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface PurchaseResult {
|
|
24
|
+
domain: string;
|
|
25
|
+
success: boolean;
|
|
26
|
+
registeredDomain?: Domain;
|
|
27
|
+
error?: string;
|
|
28
|
+
errorCode?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface PurchaseSummary {
|
|
31
|
+
items: PurchaseItem[];
|
|
32
|
+
totalCents: number;
|
|
33
|
+
totalDollars: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if contact info exists in config.
|
|
37
|
+
*/
|
|
38
|
+
export declare function hasContactInfo(configManager?: ConfigManager): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Save contact info to config for future purchases.
|
|
41
|
+
*/
|
|
42
|
+
export declare function saveContactInfo(contactInfo: ContactInfo, configManager?: ConfigManager): void;
|
|
43
|
+
/**
|
|
44
|
+
* Load contact info from config.
|
|
45
|
+
*/
|
|
46
|
+
export declare function loadContactInfo(configManager?: ConfigManager): ContactInfo | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Re-verify domain availability and price before purchase.
|
|
49
|
+
* Returns the verified availability data including current price.
|
|
50
|
+
*/
|
|
51
|
+
export declare function verifyDomainPrice(domain: string, client?: NamecomClient): Promise<DomainAvailability>;
|
|
52
|
+
/**
|
|
53
|
+
* Purchase a single domain.
|
|
54
|
+
* Re-verifies price, registers with contact info, returns result.
|
|
55
|
+
*/
|
|
56
|
+
export declare function purchaseDomain(domain: string, contactInfo: ContactInfo, client?: NamecomClient): Promise<PurchaseResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Purchase all domains in the cart.
|
|
59
|
+
* Purchases sequentially (not parallel) to avoid rate limiting.
|
|
60
|
+
* Clears successful purchases from cart.
|
|
61
|
+
*/
|
|
62
|
+
export declare function purchaseCartDomains(contactInfo: ContactInfo, cartManager?: CartManager, client?: NamecomClient): Promise<PurchaseResult[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Build a purchase summary from cart items.
|
|
65
|
+
*/
|
|
66
|
+
export declare function buildCartSummary(items: CartItem[]): PurchaseSummary;
|
|
67
|
+
/**
|
|
68
|
+
* Get error suggestions based on error code.
|
|
69
|
+
*/
|
|
70
|
+
export declare function getErrorSuggestion(errorCode?: string): string;
|
|
71
|
+
//# sourceMappingURL=purchase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purchase.d.ts","sourceRoot":"","sources":["../../src/lib/purchase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAK1E,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAerE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,WAAW,EACxB,aAAa,CAAC,EAAE,aAAa,GAC5B,IAAI,CAGN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,aAAa,CAAC,EAAE,aAAa,GAC5B,WAAW,GAAG,SAAS,CAIzB;AAID;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAG7B;AAID;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA6CzB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,WAAW,EACxB,WAAW,CAAC,EAAE,WAAW,EACzB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,EAAE,CAAC,CAqB3B;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,eAAe,CAWnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB7D"}
|