dominion-cli 0.1.1 → 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.
- package/dist/cli.js +13 -9
- package/dist/cli.js.map +1 -1
- package/dist/commands/account.d.ts +1 -1
- package/dist/commands/account.d.ts.map +1 -1
- package/dist/commands/account.js +6 -9
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/billing.d.ts +1 -1
- package/dist/commands/billing.d.ts.map +1 -1
- package/dist/commands/billing.js +3 -7
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/buy.d.ts +7 -7
- package/dist/commands/buy.d.ts.map +1 -1
- package/dist/commands/buy.js +45 -141
- package/dist/commands/buy.js.map +1 -1
- package/dist/commands/cart/add.d.ts +1 -1
- package/dist/commands/cart/add.d.ts.map +1 -1
- package/dist/commands/cart/add.js +9 -8
- package/dist/commands/cart/add.js.map +1 -1
- package/dist/commands/credits.js +1 -1
- package/dist/commands/dns/add.d.ts +3 -3
- package/dist/commands/dns/add.d.ts.map +1 -1
- package/dist/commands/dns/add.js +3 -3
- package/dist/commands/dns/add.js.map +1 -1
- package/dist/commands/dns/list.d.ts +3 -3
- package/dist/commands/dns/list.d.ts.map +1 -1
- package/dist/commands/dns/list.js +3 -3
- package/dist/commands/dns/list.js.map +1 -1
- package/dist/commands/dns/remove.d.ts +3 -3
- package/dist/commands/dns/remove.d.ts.map +1 -1
- package/dist/commands/dns/remove.js +3 -3
- package/dist/commands/dns/remove.js.map +1 -1
- package/dist/commands/domains/detail.d.ts +1 -1
- package/dist/commands/domains/detail.js +3 -3
- package/dist/commands/domains/detail.js.map +1 -1
- package/dist/commands/domains/list.d.ts +1 -1
- package/dist/commands/domains/list.js +3 -3
- package/dist/commands/domains/list.js.map +1 -1
- package/dist/commands/login.d.ts +6 -6
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +58 -42
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +1 -1
- package/dist/commands/logout.js +1 -1
- package/dist/commands/search.d.ts +2 -2
- package/dist/commands/search.js +4 -4
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/settings/set.d.ts +4 -4
- package/dist/commands/settings/set.d.ts.map +1 -1
- package/dist/commands/settings/set.js +10 -11
- package/dist/commands/settings/set.js.map +1 -1
- package/dist/commands/settings/view.d.ts +3 -3
- package/dist/commands/settings/view.d.ts.map +1 -1
- package/dist/commands/settings/view.js +4 -4
- package/dist/commands/settings/view.js.map +1 -1
- package/dist/commands/vercel/link.d.ts +4 -4
- package/dist/commands/vercel/link.d.ts.map +1 -1
- package/dist/commands/vercel/link.js +8 -8
- package/dist/commands/vercel/link.js.map +1 -1
- package/dist/commands/whoami.d.ts +1 -1
- package/dist/commands/whoami.js +3 -3
- package/dist/commands/whoami.js.map +1 -1
- package/dist/components/account-card.d.ts +3 -3
- package/dist/components/account-card.d.ts.map +1 -1
- package/dist/components/account-card.js +3 -3
- package/dist/components/account-card.js.map +1 -1
- package/dist/components/command-runner.d.ts +25 -0
- package/dist/components/command-runner.d.ts.map +1 -0
- package/dist/components/command-runner.js +67 -0
- package/dist/components/command-runner.js.map +1 -0
- package/dist/components/prompt.d.ts +24 -0
- package/dist/components/prompt.d.ts.map +1 -0
- package/dist/components/prompt.js +113 -0
- package/dist/components/prompt.js.map +1 -0
- package/dist/components/search-results.d.ts +1 -1
- package/dist/components/search-results.js +1 -1
- package/dist/lib/auth.d.ts +17 -9
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +125 -46
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/command-registry.d.ts +47 -0
- package/dist/lib/command-registry.d.ts.map +1 -0
- package/dist/lib/command-registry.js +384 -0
- package/dist/lib/command-registry.js.map +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +0 -8
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/dns-validation.d.ts +1 -1
- package/dist/lib/dns-validation.d.ts.map +1 -1
- package/dist/lib/dns-validation.js +2 -2
- package/dist/lib/dns-validation.js.map +1 -1
- package/dist/lib/dominion-client.d.ts +43 -0
- package/dist/lib/dominion-client.d.ts.map +1 -0
- package/dist/lib/dominion-client.js +183 -0
- package/dist/lib/dominion-client.js.map +1 -0
- package/dist/lib/error-personality.js +7 -7
- package/dist/lib/error-personality.js.map +1 -1
- package/dist/lib/history.d.ts +40 -0
- package/dist/lib/history.d.ts.map +1 -0
- package/dist/lib/history.js +113 -0
- package/dist/lib/history.js.map +1 -0
- package/dist/lib/nameserver-presets.js +4 -4
- package/dist/lib/nameserver-presets.js.map +1 -1
- package/dist/lib/purchase.d.ts +20 -23
- package/dist/lib/purchase.d.ts.map +1 -1
- package/dist/lib/purchase.js +42 -70
- package/dist/lib/purchase.js.map +1 -1
- package/dist/lib/schemas.d.ts +351 -352
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +1 -2
- package/dist/lib/schemas.js.map +1 -1
- package/dist/lib/types.d.ts +8 -11
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/types.js +1 -4
- package/dist/lib/types.js.map +1 -1
- package/dist/repl.d.ts +17 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +189 -0
- package/dist/repl.js.map +1 -0
- package/package.json +4 -2
package/dist/lib/auth.js
CHANGED
|
@@ -1,56 +1,149 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Auth utilities for login, logout, and whoami flows.
|
|
2
|
+
* Auth utilities for login, register, logout, and whoami flows.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Authenticates against the Dominion API.
|
|
5
5
|
* All credentials stored in ~/.dominion/config.json with 0600 permissions.
|
|
6
6
|
*/
|
|
7
7
|
import { ConfigManager } from "./config.js";
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
const DEFAULT_API_URL = "https://dominion.sh/api";
|
|
9
|
+
function getApiUrl(configManager) {
|
|
10
|
+
const manager = configManager ?? new ConfigManager();
|
|
11
|
+
const config = manager.load();
|
|
12
|
+
return config.apiBaseUrl ?? process.env.DOMINION_API_URL ?? DEFAULT_API_URL;
|
|
13
|
+
}
|
|
10
14
|
/**
|
|
11
|
-
*
|
|
12
|
-
* Returns domain count on success for display in whoami.
|
|
15
|
+
* Register a new Dominion account.
|
|
13
16
|
*/
|
|
14
|
-
export async function
|
|
17
|
+
export async function register(email, password, configManager) {
|
|
18
|
+
const apiUrl = getApiUrl(configManager);
|
|
15
19
|
try {
|
|
16
|
-
const
|
|
17
|
-
|
|
20
|
+
const response = await fetch(`${apiUrl}/auth/register`, {
|
|
21
|
+
method: "POST",
|
|
22
|
+
headers: { "Content-Type": "application/json" },
|
|
23
|
+
body: JSON.stringify({ email, password }),
|
|
24
|
+
});
|
|
25
|
+
const data = (await response.json());
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
email,
|
|
30
|
+
domainCount: 0,
|
|
31
|
+
error: data.error ?? "Registration failed",
|
|
32
|
+
};
|
|
33
|
+
}
|
|
18
34
|
return {
|
|
19
35
|
success: true,
|
|
20
|
-
|
|
21
|
-
|
|
36
|
+
email: data.user?.email ?? email,
|
|
37
|
+
token: data.token,
|
|
38
|
+
domainCount: 0,
|
|
22
39
|
};
|
|
23
40
|
}
|
|
24
41
|
catch (err) {
|
|
25
|
-
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
email,
|
|
45
|
+
domainCount: 0,
|
|
46
|
+
error: `Connection failed: ${err.message}`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Login to an existing Dominion account.
|
|
52
|
+
*/
|
|
53
|
+
export async function login(email, password, configManager) {
|
|
54
|
+
const apiUrl = getApiUrl(configManager);
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetch(`${apiUrl}/auth/login`, {
|
|
57
|
+
method: "POST",
|
|
58
|
+
headers: { "Content-Type": "application/json" },
|
|
59
|
+
body: JSON.stringify({ email, password }),
|
|
60
|
+
});
|
|
61
|
+
const data = (await response.json());
|
|
62
|
+
if (!response.ok) {
|
|
26
63
|
return {
|
|
27
64
|
success: false,
|
|
28
|
-
|
|
65
|
+
email,
|
|
29
66
|
domainCount: 0,
|
|
30
|
-
error:
|
|
67
|
+
error: data.error ?? "Login failed",
|
|
31
68
|
};
|
|
32
69
|
}
|
|
70
|
+
return {
|
|
71
|
+
success: true,
|
|
72
|
+
email: data.user?.email ?? email,
|
|
73
|
+
token: data.token,
|
|
74
|
+
domainCount: 0,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
33
78
|
return {
|
|
34
79
|
success: false,
|
|
35
|
-
|
|
80
|
+
email,
|
|
36
81
|
domainCount: 0,
|
|
37
|
-
error:
|
|
82
|
+
error: `Connection failed: ${err.message}`,
|
|
38
83
|
};
|
|
39
84
|
}
|
|
40
85
|
}
|
|
41
86
|
/**
|
|
42
|
-
*
|
|
87
|
+
* Validate current session by calling /auth/me.
|
|
43
88
|
*/
|
|
44
|
-
export function
|
|
89
|
+
export async function validateSession(configManager) {
|
|
45
90
|
const manager = configManager ?? new ConfigManager();
|
|
46
|
-
manager.
|
|
91
|
+
const config = manager.load();
|
|
92
|
+
const token = config.auth?.token;
|
|
93
|
+
const email = config.auth?.email ?? "";
|
|
94
|
+
if (!token) {
|
|
95
|
+
return {
|
|
96
|
+
success: false,
|
|
97
|
+
email,
|
|
98
|
+
domainCount: 0,
|
|
99
|
+
error: "Not authenticated. Run `dominion login` first.",
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const apiUrl = getApiUrl(manager);
|
|
103
|
+
try {
|
|
104
|
+
const response = await fetch(`${apiUrl}/auth/me`, {
|
|
105
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
106
|
+
});
|
|
107
|
+
const data = (await response.json());
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
return {
|
|
110
|
+
success: false,
|
|
111
|
+
email,
|
|
112
|
+
domainCount: 0,
|
|
113
|
+
error: data.error ??
|
|
114
|
+
"Session expired. Run `dominion login` to re-authenticate.",
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
success: true,
|
|
119
|
+
email: data.user?.email ?? email,
|
|
120
|
+
domainCount: data.domainCount ?? 0,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
return {
|
|
125
|
+
success: false,
|
|
126
|
+
email,
|
|
127
|
+
domainCount: 0,
|
|
128
|
+
error: `Connection failed: ${err.message}`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Save auth credentials to config.
|
|
134
|
+
*/
|
|
135
|
+
export function saveCredentials(email, token, configManager) {
|
|
136
|
+
const manager = configManager ?? new ConfigManager();
|
|
137
|
+
manager.set("auth", { email, token });
|
|
47
138
|
}
|
|
48
139
|
/**
|
|
49
140
|
* Clear credentials from config (logout).
|
|
50
141
|
*/
|
|
51
142
|
export function clearCredentials(configManager) {
|
|
52
143
|
const manager = configManager ?? new ConfigManager();
|
|
53
|
-
manager.
|
|
144
|
+
const config = manager.load();
|
|
145
|
+
delete config.auth;
|
|
146
|
+
manager.save(config);
|
|
54
147
|
}
|
|
55
148
|
/**
|
|
56
149
|
* Check current auth status without making API calls.
|
|
@@ -58,10 +151,10 @@ export function clearCredentials(configManager) {
|
|
|
58
151
|
export function getAuthStatus(configManager) {
|
|
59
152
|
const manager = configManager ?? new ConfigManager();
|
|
60
153
|
const config = manager.load();
|
|
61
|
-
const
|
|
154
|
+
const hasAuth = !!config.auth?.token;
|
|
62
155
|
return {
|
|
63
|
-
authenticated:
|
|
64
|
-
|
|
156
|
+
authenticated: hasAuth,
|
|
157
|
+
email: hasAuth ? config.auth?.email : undefined,
|
|
65
158
|
configPath: manager.getConfigPath(),
|
|
66
159
|
};
|
|
67
160
|
}
|
|
@@ -71,34 +164,20 @@ export function getAuthStatus(configManager) {
|
|
|
71
164
|
export async function getAuthStatusWithDomainCount(configManager) {
|
|
72
165
|
const manager = configManager ?? new ConfigManager();
|
|
73
166
|
const config = manager.load();
|
|
74
|
-
const
|
|
75
|
-
if (!
|
|
167
|
+
const hasAuth = !!config.auth?.token;
|
|
168
|
+
if (!hasAuth) {
|
|
76
169
|
return {
|
|
77
170
|
authenticated: false,
|
|
78
171
|
configPath: manager.getConfigPath(),
|
|
79
172
|
};
|
|
80
173
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
authenticated: true,
|
|
89
|
-
username: config.namecom.username,
|
|
90
|
-
domainCount: response.domains?.length ?? 0,
|
|
91
|
-
configPath: manager.getConfigPath(),
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
// Credentials exist but may be invalid
|
|
96
|
-
return {
|
|
97
|
-
authenticated: true,
|
|
98
|
-
username: config.namecom.username,
|
|
99
|
-
configPath: manager.getConfigPath(),
|
|
100
|
-
};
|
|
101
|
-
}
|
|
174
|
+
const result = await validateSession(manager);
|
|
175
|
+
return {
|
|
176
|
+
authenticated: result.success,
|
|
177
|
+
email: result.email || config.auth?.email,
|
|
178
|
+
domainCount: result.domainCount,
|
|
179
|
+
configPath: manager.getConfigPath(),
|
|
180
|
+
};
|
|
102
181
|
}
|
|
103
182
|
/**
|
|
104
183
|
* Open a URL in the default browser.
|
package/dist/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CommandRegistry — lightweight command router for REPL mode.
|
|
3
|
+
*
|
|
4
|
+
* Bypasses Commander.js (which mutates state and calls process.exit on errors)
|
|
5
|
+
* in favor of a flat registry mapping command strings to React components.
|
|
6
|
+
*/
|
|
7
|
+
import { type ReactElement } from "react";
|
|
8
|
+
export interface ParsedCommand {
|
|
9
|
+
element: ReactElement;
|
|
10
|
+
raw: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CommandEntry {
|
|
13
|
+
description: string;
|
|
14
|
+
subcommands?: string[];
|
|
15
|
+
hidden?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface ParseError {
|
|
18
|
+
message: string;
|
|
19
|
+
raw: string;
|
|
20
|
+
}
|
|
21
|
+
export type ParseResult = {
|
|
22
|
+
ok: true;
|
|
23
|
+
command: ParsedCommand;
|
|
24
|
+
} | {
|
|
25
|
+
ok: false;
|
|
26
|
+
error: ParseError;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Split raw input into tokens, respecting quoted strings.
|
|
30
|
+
* "search \"my domain\"" → ["search", "my domain"]
|
|
31
|
+
*/
|
|
32
|
+
export declare function tokenize(input: string): string[];
|
|
33
|
+
/** Catalog of all commands for help display and tab completion. */
|
|
34
|
+
export declare const COMMAND_CATALOG: Record<string, CommandEntry>;
|
|
35
|
+
/**
|
|
36
|
+
* Get all command names for tab completion (excludes hidden commands).
|
|
37
|
+
*/
|
|
38
|
+
export declare function getCommandNames(): string[];
|
|
39
|
+
/**
|
|
40
|
+
* Get subcommands for a given command name.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getSubcommands(command: string): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Parse raw user input into a renderable React element.
|
|
45
|
+
*/
|
|
46
|
+
export declare function parseInput(raw: string): ParseResult;
|
|
47
|
+
//# sourceMappingURL=command-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-registry.d.ts","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAyBzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAIrC;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BhD;AAoCD,mEAAmE;AACnE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAmBxD,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAI1C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAqBnD"}
|