neutron-cli 0.1.8 → 0.1.9
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4EpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqGrD"}
|
package/dist/commands/config.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerConfig = registerConfig;
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
|
+
const readline_1 = require("readline");
|
|
5
6
|
const os_1 = require("os");
|
|
6
7
|
const path_1 = require("path");
|
|
7
8
|
const output_js_1 = require("../output.js");
|
|
@@ -32,31 +33,76 @@ function saveConfigFile(cfg) {
|
|
|
32
33
|
(0, fs_1.mkdirSync)(CONFIG_DIR, { recursive: true });
|
|
33
34
|
}
|
|
34
35
|
(0, fs_1.writeFileSync)(CONFIG_PATH, JSON.stringify(cfg, null, 2), "utf8");
|
|
35
|
-
(0, fs_1.chmodSync)(CONFIG_PATH, 0o600);
|
|
36
|
-
(0, fs_1.chmodSync)(CONFIG_DIR, 0o700);
|
|
36
|
+
(0, fs_1.chmodSync)(CONFIG_PATH, 0o600);
|
|
37
|
+
(0, fs_1.chmodSync)(CONFIG_DIR, 0o700);
|
|
38
|
+
}
|
|
39
|
+
function prompt(question, hidden = false) {
|
|
40
|
+
return new Promise((resolve) => {
|
|
41
|
+
const rl = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout });
|
|
42
|
+
if (hidden) {
|
|
43
|
+
process.stdout.write(question);
|
|
44
|
+
process.stdin.setRawMode?.(true);
|
|
45
|
+
let input = "";
|
|
46
|
+
process.stdin.resume();
|
|
47
|
+
process.stdin.setEncoding("utf8");
|
|
48
|
+
process.stdin.on("data", function handler(ch) {
|
|
49
|
+
if (ch === "\n" || ch === "\r") {
|
|
50
|
+
process.stdin.setRawMode?.(false);
|
|
51
|
+
process.stdin.removeListener("data", handler);
|
|
52
|
+
process.stdout.write("\n");
|
|
53
|
+
rl.close();
|
|
54
|
+
resolve(input);
|
|
55
|
+
}
|
|
56
|
+
else if (ch === "\u0003") {
|
|
57
|
+
process.exit();
|
|
58
|
+
}
|
|
59
|
+
else if (ch === "\u007f") {
|
|
60
|
+
if (input.length > 0)
|
|
61
|
+
input = input.slice(0, -1);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
input += ch;
|
|
65
|
+
process.stdout.write("*");
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
rl.question(question, (answer) => {
|
|
71
|
+
rl.close();
|
|
72
|
+
resolve(answer.trim());
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
37
76
|
}
|
|
38
77
|
function registerConfig(program) {
|
|
39
78
|
const config = program.command("config").description("Manage CLI configuration");
|
|
40
79
|
config
|
|
41
80
|
.command("init")
|
|
42
|
-
.description("
|
|
43
|
-
.option("--api-key <key>", "API key (
|
|
44
|
-
.option("--api-secret <secret>", "API secret (
|
|
45
|
-
.option("--json", "Output raw JSON
|
|
81
|
+
.description("Set up your Neutron API credentials")
|
|
82
|
+
.option("--api-key <key>", "API key (skip prompt)")
|
|
83
|
+
.option("--api-secret <secret>", "API secret (skip prompt)")
|
|
84
|
+
.option("--json", "Output raw JSON")
|
|
46
85
|
.action(async (opts) => {
|
|
47
86
|
try {
|
|
48
|
-
|
|
49
|
-
|
|
87
|
+
let apiKey = opts.apiKey ?? process.env.NEUTRON_API_KEY ?? "";
|
|
88
|
+
let apiSecret = opts.apiSecret ?? process.env.NEUTRON_API_SECRET ?? "";
|
|
89
|
+
// Interactive prompts if not provided
|
|
90
|
+
if (!apiKey) {
|
|
91
|
+
console.log(output_js_1.chalk.cyan("\n Get your API key at: https://portal.neutron.me\n"));
|
|
92
|
+
apiKey = await prompt(output_js_1.chalk.bold(" API Key: "));
|
|
93
|
+
}
|
|
94
|
+
if (!apiSecret) {
|
|
95
|
+
apiSecret = await prompt(output_js_1.chalk.bold(" API Secret: "), true);
|
|
96
|
+
}
|
|
50
97
|
if (!apiKey || !apiSecret) {
|
|
51
|
-
(0, output_js_1.fail)("
|
|
98
|
+
(0, output_js_1.fail)("API key and secret are required.", "CONFIG_MISSING");
|
|
52
99
|
}
|
|
53
100
|
saveConfigFile({ apiKey, apiSecret });
|
|
54
101
|
if ((0, output_js_1.isPretty)(opts)) {
|
|
55
|
-
console.log(
|
|
56
|
-
console.log(
|
|
57
|
-
console.log(
|
|
58
|
-
console.log(
|
|
59
|
-
;
|
|
102
|
+
console.log("\n" + output_js_1.chalk.green("✅ Config saved to ~/.neutron/config.json"));
|
|
103
|
+
console.log(output_js_1.chalk.dim(` API Key: ${maskSecret(apiKey)}`));
|
|
104
|
+
console.log(output_js_1.chalk.dim(` API Secret: ${maskSecret(apiSecret)}`));
|
|
105
|
+
console.log(output_js_1.chalk.dim(` File perms: 600 (private)\n`));
|
|
60
106
|
}
|
|
61
107
|
else {
|
|
62
108
|
(0, output_js_1.ok)({ path: CONFIG_PATH, apiKey: maskSecret(apiKey) });
|
|
@@ -68,32 +114,27 @@ function registerConfig(program) {
|
|
|
68
114
|
});
|
|
69
115
|
config
|
|
70
116
|
.command("show")
|
|
71
|
-
.description("Show current
|
|
72
|
-
.option("--json", "Output raw JSON
|
|
117
|
+
.description("Show current credentials (masked)")
|
|
118
|
+
.option("--json", "Output raw JSON")
|
|
73
119
|
.action(async (opts) => {
|
|
74
120
|
try {
|
|
75
121
|
const cfg = loadConfigFile();
|
|
76
122
|
const envKey = process.env.NEUTRON_API_KEY;
|
|
77
123
|
const envSecret = process.env.NEUTRON_API_SECRET;
|
|
78
|
-
const source = envKey && envSecret ? "env" : cfg ? "
|
|
124
|
+
const source = envKey && envSecret ? "env" : cfg ? "~/.neutron/config.json" : "none";
|
|
79
125
|
if (source === "none") {
|
|
80
|
-
(0, output_js_1.fail)("No
|
|
126
|
+
(0, output_js_1.fail)("No credentials found. Run `neutron-cli config init` first.", "CONFIG_NOT_FOUND");
|
|
81
127
|
}
|
|
82
128
|
const displayKey = envKey ?? cfg?.apiKey ?? "";
|
|
83
129
|
const displaySecret = envSecret ?? cfg?.apiSecret ?? "";
|
|
84
130
|
if ((0, output_js_1.isPretty)(opts)) {
|
|
85
|
-
console.log(
|
|
86
|
-
console.log(
|
|
87
|
-
console.log(
|
|
88
|
-
console.log(
|
|
89
|
-
;
|
|
131
|
+
console.log("\n" + output_js_1.chalk.bold.cyan(" Config"));
|
|
132
|
+
console.log(output_js_1.chalk.dim(` Source: ${source}`));
|
|
133
|
+
console.log(output_js_1.chalk.dim(` API Key: ${maskSecret(displayKey)}`));
|
|
134
|
+
console.log(output_js_1.chalk.dim(` API Secret: ${maskSecret(displaySecret)}\n`));
|
|
90
135
|
}
|
|
91
136
|
else {
|
|
92
|
-
(0, output_js_1.ok)({
|
|
93
|
-
source,
|
|
94
|
-
apiKey: maskSecret(displayKey),
|
|
95
|
-
configPath: source === "file" ? CONFIG_PATH : null,
|
|
96
|
-
});
|
|
137
|
+
(0, output_js_1.ok)({ source, apiKey: maskSecret(displayKey), configPath: cfg ? CONFIG_PATH : null });
|
|
97
138
|
}
|
|
98
139
|
}
|
|
99
140
|
catch (e) {
|
|
@@ -102,26 +143,22 @@ function registerConfig(program) {
|
|
|
102
143
|
});
|
|
103
144
|
config
|
|
104
145
|
.command("test")
|
|
105
|
-
.description("Test credentials
|
|
106
|
-
.option("--json", "Output raw JSON
|
|
146
|
+
.description("Test your credentials against the Neutron API")
|
|
147
|
+
.option("--json", "Output raw JSON")
|
|
107
148
|
.action(async (opts) => {
|
|
108
149
|
try {
|
|
109
|
-
const envKey = process.env.NEUTRON_API_KEY;
|
|
110
|
-
const envSecret = process.env.NEUTRON_API_SECRET;
|
|
111
150
|
const cfg = loadConfigFile();
|
|
112
|
-
const apiKey =
|
|
113
|
-
const apiSecret =
|
|
151
|
+
const apiKey = process.env.NEUTRON_API_KEY ?? cfg?.apiKey;
|
|
152
|
+
const apiSecret = process.env.NEUTRON_API_SECRET ?? cfg?.apiSecret;
|
|
114
153
|
if (!apiKey || !apiSecret) {
|
|
115
154
|
(0, output_js_1.fail)("No credentials found. Run `neutron-cli config init` first.", "CONFIG_NOT_FOUND");
|
|
116
155
|
}
|
|
117
156
|
const client = new neutron_sdk_1.Neutron({ apiKey, apiSecret });
|
|
118
157
|
const account = await client.account.get();
|
|
119
158
|
if ((0, output_js_1.isPretty)(opts)) {
|
|
120
|
-
console.log(
|
|
121
|
-
console.log(
|
|
122
|
-
console.log(
|
|
123
|
-
console.log('` Status: ${(account as any).status ?? "—"}`');
|
|
124
|
-
;
|
|
159
|
+
console.log("\n" + output_js_1.chalk.green("✅ Credentials valid"));
|
|
160
|
+
console.log(output_js_1.chalk.dim(` Account ID: ${account.accountId ?? account.id ?? "—"}`));
|
|
161
|
+
console.log(output_js_1.chalk.dim(` Status: ${account.accountStatus ?? "—"}\n`));
|
|
125
162
|
}
|
|
126
163
|
else {
|
|
127
164
|
(0, output_js_1.ok)({ valid: true, accountId: account.accountId ?? account.id });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|