@unstoppabledomains/ud-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 +344 -0
- package/dist/commands/api-commands.d.ts +9 -0
- package/dist/commands/api-commands.d.ts.map +1 -0
- package/dist/commands/api-commands.js +303 -0
- package/dist/commands/api-commands.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +97 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/cart.d.ts +10 -0
- package/dist/commands/cart.d.ts.map +1 -0
- package/dist/commands/cart.js +125 -0
- package/dist/commands/cart.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +90 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/env.d.ts +3 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +29 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/generated/openapi-spec.json +5903 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +7 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +162 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/command-hooks.d.ts +49 -0
- package/dist/lib/command-hooks.d.ts.map +1 -0
- package/dist/lib/command-hooks.js +150 -0
- package/dist/lib/command-hooks.js.map +1 -0
- package/dist/lib/command-registry.d.ts +30 -0
- package/dist/lib/command-registry.d.ts.map +1 -0
- package/dist/lib/command-registry.js +322 -0
- package/dist/lib/command-registry.js.map +1 -0
- package/dist/lib/config.d.ts +19 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +95 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/credentials.d.ts +16 -0
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +126 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/formatter.d.ts +34 -0
- package/dist/lib/formatter.d.ts.map +1 -0
- package/dist/lib/formatter.js +691 -0
- package/dist/lib/formatter.js.map +1 -0
- package/dist/lib/oauth.d.ts +8 -0
- package/dist/lib/oauth.d.ts.map +1 -0
- package/dist/lib/oauth.js +212 -0
- package/dist/lib/oauth.js.map +1 -0
- package/dist/lib/param-builder.d.ts +28 -0
- package/dist/lib/param-builder.d.ts.map +1 -0
- package/dist/lib/param-builder.js +178 -0
- package/dist/lib/param-builder.js.map +1 -0
- package/dist/lib/prompt.d.ts +17 -0
- package/dist/lib/prompt.d.ts.map +1 -0
- package/dist/lib/prompt.js +53 -0
- package/dist/lib/prompt.js.map +1 -0
- package/dist/lib/spec-parser.d.ts +76 -0
- package/dist/lib/spec-parser.d.ts.map +1 -0
- package/dist/lib/spec-parser.js +201 -0
- package/dist/lib/spec-parser.js.map +1 -0
- package/dist/lib/spinner.d.ts +16 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +23 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/types.d.ts +63 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +11 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/program.d.ts +3 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +47 -0
- package/dist/program.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8D3D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getActiveEnv, getEnvConfig, setEnvConfig, clearEnvConfig, apiBaseUrl } from '../lib/config.js';
|
|
3
|
+
import { saveApiKey, clearCredentials, getTokens } from '../lib/credentials.js';
|
|
4
|
+
import { performOAuthLogin, revokeToken, discoverMetadata } from '../lib/oauth.js';
|
|
5
|
+
import { verifyAuth } from '../lib/api.js';
|
|
6
|
+
const API_KEY_PATTERN = /^ud_mcp_[0-9a-f]{64}$/;
|
|
7
|
+
export function registerAuthCommands(program) {
|
|
8
|
+
const auth = program.command('auth').description('Manage authentication');
|
|
9
|
+
auth
|
|
10
|
+
.command('login')
|
|
11
|
+
.description('Authenticate with Unstoppable Domains')
|
|
12
|
+
.option('-m, --method <method>', 'auth method (oauth or api-key)', 'oauth')
|
|
13
|
+
.option('-k, --key <key>', 'API key (for api-key method)')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
const env = getActiveEnv();
|
|
16
|
+
// --key implies api-key method even without explicit --method
|
|
17
|
+
if (options.key || options.method === 'api-key') {
|
|
18
|
+
await loginApiKey(env, options.key);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
await loginOAuth(env);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
auth
|
|
25
|
+
.command('logout')
|
|
26
|
+
.description('Clear stored credentials')
|
|
27
|
+
.action(async () => {
|
|
28
|
+
const env = getActiveEnv();
|
|
29
|
+
// Best-effort token revocation for OAuth
|
|
30
|
+
const envConfig = getEnvConfig(env);
|
|
31
|
+
if (envConfig.authMethod === 'oauth') {
|
|
32
|
+
const tokens = await getTokens(env);
|
|
33
|
+
if (tokens && envConfig.oauth?.clientId) {
|
|
34
|
+
try {
|
|
35
|
+
const metadata = await discoverMetadata(apiBaseUrl(env));
|
|
36
|
+
if (metadata.revocation_endpoint) {
|
|
37
|
+
await revokeToken(metadata.revocation_endpoint, tokens.refreshToken, envConfig.oauth.clientId);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Best effort
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
await clearCredentials(env);
|
|
46
|
+
clearEnvConfig(env);
|
|
47
|
+
console.log(chalk.green(`Logged out of ${env}.`));
|
|
48
|
+
});
|
|
49
|
+
auth
|
|
50
|
+
.command('whoami')
|
|
51
|
+
.description('Show current authentication status')
|
|
52
|
+
.action(async () => {
|
|
53
|
+
const status = await verifyAuth();
|
|
54
|
+
if (status.authenticated) {
|
|
55
|
+
console.log(chalk.green(`✓ ${status.message}`));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.log(chalk.yellow(`✗ ${status.message}`));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async function loginApiKey(env, key) {
|
|
63
|
+
if (!key) {
|
|
64
|
+
console.error(chalk.red('API key is required. Use --key <key> or -k <key>.'));
|
|
65
|
+
process.exitCode = 1;
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (!API_KEY_PATTERN.test(key)) {
|
|
69
|
+
console.error(chalk.red('Invalid API key format. Expected: ud_mcp_ followed by 64 hex characters.'));
|
|
70
|
+
process.exitCode = 1;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
await saveApiKey(key, env);
|
|
74
|
+
setEnvConfig({ authMethod: 'api-key' }, env);
|
|
75
|
+
// Verify the key actually works
|
|
76
|
+
const status = await verifyAuth();
|
|
77
|
+
if (status.authenticated) {
|
|
78
|
+
console.log(chalk.green(`✓ API key saved and verified for ${env}.`));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(chalk.yellow(`API key saved for ${env}, but verification failed: ${status.message}`));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function loginOAuth(env) {
|
|
85
|
+
console.log(chalk.blue(`Starting OAuth login for ${env}...`));
|
|
86
|
+
console.log('Opening browser for authorization...');
|
|
87
|
+
try {
|
|
88
|
+
await performOAuthLogin();
|
|
89
|
+
setEnvConfig({ authMethod: 'oauth' }, env);
|
|
90
|
+
console.log(chalk.green(`✓ OAuth login successful for ${env}.`));
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
console.error(chalk.red(`OAuth login failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
94
|
+
process.exitCode = 1;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart cart-add command that auto-detects domain source and routes to the correct endpoint.
|
|
3
|
+
*/
|
|
4
|
+
import type { Command } from 'commander';
|
|
5
|
+
/**
|
|
6
|
+
* Register the smart `cart add [domain...]` default handler.
|
|
7
|
+
* Must be called after registerApiCommands so the `cart > add` group already exists.
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerSmartCartAdd(program: Command): void;
|
|
10
|
+
//# sourceMappingURL=cart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cart.d.ts","sourceRoot":"","sources":["../../src/commands/cart.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgH3D"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart cart-add command that auto-detects domain source and routes to the correct endpoint.
|
|
3
|
+
*/
|
|
4
|
+
import { callAction } from '../lib/api.js';
|
|
5
|
+
import { formatOutput, formatError } from '../lib/formatter.js';
|
|
6
|
+
import { createSpinner } from '../lib/spinner.js';
|
|
7
|
+
import { SOURCE_TO_CART_CMD } from '../lib/command-hooks.js';
|
|
8
|
+
/** Reverse map: subcommand → tool name */
|
|
9
|
+
const CART_CMD_TO_TOOL = {
|
|
10
|
+
registration: 'ud_cart_add_domain_registration',
|
|
11
|
+
listed: 'ud_cart_add_domain_listed',
|
|
12
|
+
afternic: 'ud_cart_add_domain_afternic',
|
|
13
|
+
sedo: 'ud_cart_add_domain_sedo',
|
|
14
|
+
renewal: 'ud_cart_add_domain_renewal',
|
|
15
|
+
};
|
|
16
|
+
function getRootOpts(cmd) {
|
|
17
|
+
let current = cmd;
|
|
18
|
+
while (current.parent)
|
|
19
|
+
current = current.parent;
|
|
20
|
+
return current.opts();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Register the smart `cart add [domain...]` default handler.
|
|
24
|
+
* Must be called after registerApiCommands so the `cart > add` group already exists.
|
|
25
|
+
*/
|
|
26
|
+
export function registerSmartCartAdd(program) {
|
|
27
|
+
// Find the existing cart > add group command
|
|
28
|
+
const cartCmd = program.commands.find((c) => c.name() === 'cart');
|
|
29
|
+
if (!cartCmd)
|
|
30
|
+
return;
|
|
31
|
+
const addCmd = cartCmd.commands.find((c) => c.name() === 'add');
|
|
32
|
+
if (!addCmd)
|
|
33
|
+
return;
|
|
34
|
+
// Add default action on the `add` group itself: `ud cart add <domain...>`
|
|
35
|
+
addCmd
|
|
36
|
+
.argument('[domain...]', 'Domain name(s) to add to cart')
|
|
37
|
+
.option('--type <type>', 'Cart type: registration, listed, afternic, sedo, renewal')
|
|
38
|
+
.option('--years <years>', 'Registration years')
|
|
39
|
+
.action(async (domains, opts) => {
|
|
40
|
+
if (domains.length === 0) {
|
|
41
|
+
addCmd.help();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const globalOpts = getRootOpts(addCmd);
|
|
45
|
+
const format = globalOpts.format ?? 'table';
|
|
46
|
+
const quiet = !!globalOpts.quiet;
|
|
47
|
+
// Validate --years before the loop to avoid wasting search API calls
|
|
48
|
+
let yearsQuantity;
|
|
49
|
+
if (opts.years !== undefined) {
|
|
50
|
+
const yearsNum = Number(opts.years);
|
|
51
|
+
if (!Number.isInteger(yearsNum) || yearsNum < 1 || yearsNum > 10) {
|
|
52
|
+
console.error(formatError(new Error('Invalid --years value: must be an integer between 1 and 10.')));
|
|
53
|
+
process.exitCode = 1;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
yearsQuantity = yearsNum;
|
|
57
|
+
}
|
|
58
|
+
for (const domain of domains) {
|
|
59
|
+
let toolName;
|
|
60
|
+
if (opts.type) {
|
|
61
|
+
// Explicit type → route directly
|
|
62
|
+
const type = opts.type;
|
|
63
|
+
toolName = CART_CMD_TO_TOOL[type];
|
|
64
|
+
if (!toolName) {
|
|
65
|
+
console.error(formatError(new Error(`Unknown cart type: ${type}. Valid types: ${Object.keys(CART_CMD_TO_TOOL).join(', ')}`)));
|
|
66
|
+
process.exitCode = 1;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Smart detection: search for the domain
|
|
72
|
+
const spinner = await createSpinner(`Checking ${domain}...`, { quiet, format });
|
|
73
|
+
spinner.start();
|
|
74
|
+
try {
|
|
75
|
+
const searchResult = await callAction('ud_domains_search', { query: domain });
|
|
76
|
+
spinner.stop();
|
|
77
|
+
const results = searchResult.results;
|
|
78
|
+
const match = results?.find((r) => r.name === domain);
|
|
79
|
+
const marketplace = match?.marketplace;
|
|
80
|
+
const source = marketplace?.source;
|
|
81
|
+
// Marketplace domains (afternic, sedo) may have available=false for registration
|
|
82
|
+
// but are still purchasable via their marketplace route.
|
|
83
|
+
const hasMarketplaceRoute = source != null && source in SOURCE_TO_CART_CMD;
|
|
84
|
+
if (!match || (match.available !== true && !hasMarketplaceRoute)) {
|
|
85
|
+
console.error(formatError(new Error(`Domain not available: ${domain}`)));
|
|
86
|
+
process.exitCode = 1;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const subCmd = SOURCE_TO_CART_CMD[source ?? ''] ?? 'registration';
|
|
90
|
+
toolName = CART_CMD_TO_TOOL[subCmd];
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
spinner.fail('Failed');
|
|
94
|
+
console.error(formatError(err));
|
|
95
|
+
process.exitCode = 1;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Call the resolved cart-add endpoint
|
|
100
|
+
// All cart-add endpoints use "name" as the domain key in their request body.
|
|
101
|
+
const body = {
|
|
102
|
+
domains: [{ name: domain }],
|
|
103
|
+
};
|
|
104
|
+
if (yearsQuantity !== undefined) {
|
|
105
|
+
body.domains[0].quantity = yearsQuantity;
|
|
106
|
+
}
|
|
107
|
+
const spinner = await createSpinner(`Adding ${domain} to cart...`, { quiet, format });
|
|
108
|
+
spinner.start();
|
|
109
|
+
try {
|
|
110
|
+
const result = await callAction(toolName, body);
|
|
111
|
+
spinner.stop();
|
|
112
|
+
if (!quiet) {
|
|
113
|
+
const output = formatOutput(result, { format, toolName });
|
|
114
|
+
console.log(output);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
spinner.fail('Failed');
|
|
119
|
+
console.error(formatError(err));
|
|
120
|
+
process.exitCode = 1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=cart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cart.js","sourceRoot":"","sources":["../../src/commands/cart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyF7D"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getCommandDefaults, setCommandDefault, clearCommandDefault, getAllDefaults } from '../lib/config.js';
|
|
3
|
+
const VALID_KEYS = ['fields', 'format', 'quiet'];
|
|
4
|
+
const VALID_FORMATS = ['table', 'json', 'csv'];
|
|
5
|
+
export function registerConfigCommands(program) {
|
|
6
|
+
const cfg = program.command('config').description('Manage per-command default settings');
|
|
7
|
+
cfg
|
|
8
|
+
.command('set <command> <key> <value>')
|
|
9
|
+
.description('Save a default option for a command (e.g., ud config set "domains list" fields name,expiresAt)')
|
|
10
|
+
.action((command, key, value) => {
|
|
11
|
+
if (!VALID_KEYS.includes(key)) {
|
|
12
|
+
console.error(chalk.red(`Invalid key: ${key}. Must be one of: ${VALID_KEYS.join(', ')}`));
|
|
13
|
+
process.exitCode = 1;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// Normalize command path: "domains list" → "domains.list"
|
|
17
|
+
const commandPath = command.replace(/\s+/g, '.');
|
|
18
|
+
if (key === 'format') {
|
|
19
|
+
if (!VALID_FORMATS.includes(value)) {
|
|
20
|
+
console.error(chalk.red(`Invalid format: ${value}. Must be one of: ${VALID_FORMATS.join(', ')}`));
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (key === 'quiet') {
|
|
26
|
+
if (value !== 'true' && value !== 'false') {
|
|
27
|
+
console.error(chalk.red('Invalid value for quiet. Must be true or false.'));
|
|
28
|
+
process.exitCode = 1;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
setCommandDefault(commandPath, key, value === 'true');
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
setCommandDefault(commandPath, key, value);
|
|
35
|
+
}
|
|
36
|
+
console.log(chalk.green(`Default ${key} for "${command}" set to: ${value}`));
|
|
37
|
+
});
|
|
38
|
+
cfg
|
|
39
|
+
.command('get [command]')
|
|
40
|
+
.description('Show saved defaults for a command, or all commands')
|
|
41
|
+
.action((command) => {
|
|
42
|
+
if (command) {
|
|
43
|
+
const commandPath = command.replace(/\s+/g, '.');
|
|
44
|
+
const defaults = getCommandDefaults(commandPath);
|
|
45
|
+
if (Object.keys(defaults).length === 0) {
|
|
46
|
+
console.log(chalk.dim(`No saved defaults for "${command}".`));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
console.log(chalk.bold(command));
|
|
50
|
+
for (const [key, value] of Object.entries(defaults)) {
|
|
51
|
+
console.log(` ${key}: ${value}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
const all = getAllDefaults();
|
|
56
|
+
const entries = Object.entries(all).filter(([, v]) => Object.keys(v).length > 0);
|
|
57
|
+
if (entries.length === 0) {
|
|
58
|
+
console.log(chalk.dim('No saved defaults.'));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
for (const [path, defaults] of entries) {
|
|
62
|
+
const displayPath = path.replace(/\./g, ' ');
|
|
63
|
+
console.log(chalk.bold(displayPath));
|
|
64
|
+
for (const [key, value] of Object.entries(defaults)) {
|
|
65
|
+
console.log(` ${key}: ${value}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
cfg
|
|
71
|
+
.command('reset <command> [key]')
|
|
72
|
+
.description('Remove saved defaults for a command')
|
|
73
|
+
.action((command, key) => {
|
|
74
|
+
const commandPath = command.replace(/\s+/g, '.');
|
|
75
|
+
if (key) {
|
|
76
|
+
if (!VALID_KEYS.includes(key)) {
|
|
77
|
+
console.error(chalk.red(`Invalid key: ${key}. Must be one of: ${VALID_KEYS.join(', ')}`));
|
|
78
|
+
process.exitCode = 1;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
clearCommandDefault(commandPath, key);
|
|
82
|
+
console.log(chalk.green(`Removed default ${key} for "${command}".`));
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
clearCommandDefault(commandPath);
|
|
86
|
+
console.log(chalk.green(`Removed all defaults for "${command}".`));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2B1D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getDefaultEnv, setDefaultEnv, apiBaseUrl } from '../lib/config.js';
|
|
3
|
+
const VALID_ENVS = ['production', 'staging'];
|
|
4
|
+
export function registerEnvCommands(program) {
|
|
5
|
+
const env = program.command('env').description('Manage environment settings');
|
|
6
|
+
env
|
|
7
|
+
.command('show')
|
|
8
|
+
.description('Show current environment')
|
|
9
|
+
.action(() => {
|
|
10
|
+
const current = getDefaultEnv();
|
|
11
|
+
const url = apiBaseUrl(current);
|
|
12
|
+
console.log(`Environment: ${chalk.bold(current)}`);
|
|
13
|
+
console.log(`Base URL: ${chalk.dim(url)}`);
|
|
14
|
+
});
|
|
15
|
+
env
|
|
16
|
+
.command('set <environment>')
|
|
17
|
+
.description('Set the default environment (production or staging)')
|
|
18
|
+
.action((environment) => {
|
|
19
|
+
if (!VALID_ENVS.includes(environment)) {
|
|
20
|
+
console.error(chalk.red(`Invalid environment: ${environment}. Must be one of: ${VALID_ENVS.join(', ')}`));
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
setDefaultEnv(environment);
|
|
25
|
+
console.log(chalk.green(`Default environment set to ${chalk.bold(environment)}.`));
|
|
26
|
+
console.log(`Base URL: ${chalk.dim(apiBaseUrl(environment))}`);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG5E,MAAM,UAAU,GAAkB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;IAE9E,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,CAAC,WAAmB,EAAE,EAAE;QAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAA0B,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,WAAW,qBAAqB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1G,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,aAAa,CAAC,WAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8BAA8B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,WAA0B,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACP,CAAC"}
|