neutron-cli 0.1.7 → 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,29 +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");
|
|
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
|
+
});
|
|
35
76
|
}
|
|
36
77
|
function registerConfig(program) {
|
|
37
78
|
const config = program.command("config").description("Manage CLI configuration");
|
|
38
79
|
config
|
|
39
80
|
.command("init")
|
|
40
|
-
.description("
|
|
41
|
-
.option("--api-key <key>", "API key (
|
|
42
|
-
.option("--api-secret <secret>", "API secret (
|
|
43
|
-
.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")
|
|
44
85
|
.action(async (opts) => {
|
|
45
86
|
try {
|
|
46
|
-
|
|
47
|
-
|
|
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
|
+
}
|
|
48
97
|
if (!apiKey || !apiSecret) {
|
|
49
|
-
(0, output_js_1.fail)("
|
|
98
|
+
(0, output_js_1.fail)("API key and secret are required.", "CONFIG_MISSING");
|
|
50
99
|
}
|
|
51
100
|
saveConfigFile({ apiKey, apiSecret });
|
|
52
101
|
if ((0, output_js_1.isPretty)(opts)) {
|
|
53
|
-
console.log(
|
|
54
|
-
console.log(
|
|
55
|
-
console.log(
|
|
56
|
-
console.log(
|
|
57
|
-
;
|
|
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`));
|
|
58
106
|
}
|
|
59
107
|
else {
|
|
60
108
|
(0, output_js_1.ok)({ path: CONFIG_PATH, apiKey: maskSecret(apiKey) });
|
|
@@ -66,32 +114,27 @@ function registerConfig(program) {
|
|
|
66
114
|
});
|
|
67
115
|
config
|
|
68
116
|
.command("show")
|
|
69
|
-
.description("Show current
|
|
70
|
-
.option("--json", "Output raw JSON
|
|
117
|
+
.description("Show current credentials (masked)")
|
|
118
|
+
.option("--json", "Output raw JSON")
|
|
71
119
|
.action(async (opts) => {
|
|
72
120
|
try {
|
|
73
121
|
const cfg = loadConfigFile();
|
|
74
122
|
const envKey = process.env.NEUTRON_API_KEY;
|
|
75
123
|
const envSecret = process.env.NEUTRON_API_SECRET;
|
|
76
|
-
const source = envKey && envSecret ? "env" : cfg ? "
|
|
124
|
+
const source = envKey && envSecret ? "env" : cfg ? "~/.neutron/config.json" : "none";
|
|
77
125
|
if (source === "none") {
|
|
78
|
-
(0, output_js_1.fail)("No
|
|
126
|
+
(0, output_js_1.fail)("No credentials found. Run `neutron-cli config init` first.", "CONFIG_NOT_FOUND");
|
|
79
127
|
}
|
|
80
128
|
const displayKey = envKey ?? cfg?.apiKey ?? "";
|
|
81
129
|
const displaySecret = envSecret ?? cfg?.apiSecret ?? "";
|
|
82
130
|
if ((0, output_js_1.isPretty)(opts)) {
|
|
83
|
-
console.log(
|
|
84
|
-
console.log(
|
|
85
|
-
console.log(
|
|
86
|
-
console.log(
|
|
87
|
-
;
|
|
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`));
|
|
88
135
|
}
|
|
89
136
|
else {
|
|
90
|
-
(0, output_js_1.ok)({
|
|
91
|
-
source,
|
|
92
|
-
apiKey: maskSecret(displayKey),
|
|
93
|
-
configPath: source === "file" ? CONFIG_PATH : null,
|
|
94
|
-
});
|
|
137
|
+
(0, output_js_1.ok)({ source, apiKey: maskSecret(displayKey), configPath: cfg ? CONFIG_PATH : null });
|
|
95
138
|
}
|
|
96
139
|
}
|
|
97
140
|
catch (e) {
|
|
@@ -100,26 +143,22 @@ function registerConfig(program) {
|
|
|
100
143
|
});
|
|
101
144
|
config
|
|
102
145
|
.command("test")
|
|
103
|
-
.description("Test credentials
|
|
104
|
-
.option("--json", "Output raw JSON
|
|
146
|
+
.description("Test your credentials against the Neutron API")
|
|
147
|
+
.option("--json", "Output raw JSON")
|
|
105
148
|
.action(async (opts) => {
|
|
106
149
|
try {
|
|
107
|
-
const envKey = process.env.NEUTRON_API_KEY;
|
|
108
|
-
const envSecret = process.env.NEUTRON_API_SECRET;
|
|
109
150
|
const cfg = loadConfigFile();
|
|
110
|
-
const apiKey =
|
|
111
|
-
const apiSecret =
|
|
151
|
+
const apiKey = process.env.NEUTRON_API_KEY ?? cfg?.apiKey;
|
|
152
|
+
const apiSecret = process.env.NEUTRON_API_SECRET ?? cfg?.apiSecret;
|
|
112
153
|
if (!apiKey || !apiSecret) {
|
|
113
154
|
(0, output_js_1.fail)("No credentials found. Run `neutron-cli config init` first.", "CONFIG_NOT_FOUND");
|
|
114
155
|
}
|
|
115
156
|
const client = new neutron_sdk_1.Neutron({ apiKey, apiSecret });
|
|
116
157
|
const account = await client.account.get();
|
|
117
158
|
if ((0, output_js_1.isPretty)(opts)) {
|
|
118
|
-
console.log(
|
|
119
|
-
console.log(
|
|
120
|
-
console.log(
|
|
121
|
-
console.log('` Status: ${(account as any).status ?? "—"}`');
|
|
122
|
-
;
|
|
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`));
|
|
123
162
|
}
|
|
124
163
|
else {
|
|
125
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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"}
|