@suronai/cli 0.1.5 → 0.1.7

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.
@@ -8,12 +8,10 @@ const config_1 = require("../utils/config");
8
8
  const dotenvx_1 = require("../utils/dotenvx");
9
9
  exports.initCommand = new commander_1.Command("init")
10
10
  .description("Encrypt .env and register this app with Suron")
11
- .option("--name <name>", "App name (defaults to current directory name)")
11
+ .option("--name <n>", "App name (defaults to current directory name)")
12
12
  .action(async (opts) => {
13
13
  const cwd = process.cwd();
14
- const apiKey = (0, config_1.requireApiKey)();
15
14
  const apiUrl = (0, config_1.requireApiUrl)();
16
- // 1. Check .env exists
17
15
  if (!(0, fs_1.existsSync)((0, path_1.join)(cwd, ".env"))) {
18
16
  console.error("error: .env not found in current directory");
19
17
  console.error(" Create a .env file first, then run: suron init");
@@ -21,7 +19,6 @@ exports.initCommand = new commander_1.Command("init")
21
19
  }
22
20
  const appName = opts.name ?? require("path").basename(cwd) ?? "my-project";
23
21
  console.log(`[suron] Encrypting .env with dotenvx...`);
24
- // 2. Encrypt .env → produces encrypted .env + .env.keys
25
22
  try {
26
23
  (0, dotenvx_1.encryptDotenv)(cwd);
27
24
  }
@@ -29,7 +26,6 @@ exports.initCommand = new commander_1.Command("init")
29
26
  console.error(`error: dotenvx encryption failed: ${err}`);
30
27
  process.exit(1);
31
28
  }
32
- // 3. Read private key from .env.keys
33
29
  let privateKey;
34
30
  try {
35
31
  privateKey = (0, dotenvx_1.readPrivateKey)(cwd);
@@ -39,16 +35,15 @@ exports.initCommand = new commander_1.Command("init")
39
35
  process.exit(1);
40
36
  }
41
37
  console.log("[suron] Registering app...");
42
- // 4. Register app in Convex — backend encrypts privateKey with MASTER_KEY
43
38
  let res;
44
39
  try {
45
40
  res = await fetch(`${apiUrl}/cli/register-app`, {
46
41
  method: "POST",
47
- headers: {
48
- "Content-Type": "application/json",
49
- Authorization: `Bearer ${apiKey}`,
50
- },
51
- body: JSON.stringify({ name: appName, private_key: privateKey }),
42
+ headers: { "Content-Type": "application/json" },
43
+ body: JSON.stringify({
44
+ name: appName,
45
+ private_key: privateKey,
46
+ }),
52
47
  });
53
48
  }
54
49
  catch (err) {
@@ -61,11 +56,8 @@ exports.initCommand = new commander_1.Command("init")
61
56
  process.exit(1);
62
57
  }
63
58
  const data = (await res.json());
64
- // 5. Delete .env.keys — private key now lives encrypted in Convex
65
59
  (0, dotenvx_1.deleteKeysFile)(cwd);
66
- // 6. Write .suron.json
67
- const suronJson = { app: appName, id: data.app_id };
68
- (0, fs_1.writeFileSync)((0, path_1.join)(cwd, ".suron.json"), JSON.stringify(suronJson, null, 2) + "\n", "utf-8");
60
+ (0, fs_1.writeFileSync)((0, path_1.join)(cwd, ".suron.json"), JSON.stringify({ app: appName, id: data.app_id }, null, 2) + "\n", "utf-8");
69
61
  console.log(`[suron] Done.`);
70
62
  console.log(` .env is encrypted — safe to commit`);
71
63
  console.log(` .env.keys deleted`);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loginCommand = void 0;
4
4
  const commander_1 = require("commander");
5
- const child_process_1 = require("child_process");
6
5
  const config_1 = require("../utils/config");
7
6
  exports.loginCommand = new commander_1.Command("login")
8
- .description("Link your Telegram account to Suron")
7
+ .description("Configure the Suron API URL")
9
8
  .action(async () => {
10
- console.log("\n Suron Login\n");
11
- // Step 1: Get the API URL — prompt if not already saved
9
+ console.log("\n Suron Setup\n");
12
10
  let apiUrl = (0, config_1.getApiUrl)();
13
11
  if (!apiUrl) {
14
12
  const input = await (0, config_1.prompt)(" Convex deployment URL (https://xxx.convex.site): ");
@@ -17,62 +15,42 @@ exports.loginCommand = new commander_1.Command("login")
17
15
  process.exit(1);
18
16
  }
19
17
  apiUrl = input.replace(/\/$/, "");
20
- (0, config_1.saveConfig)({ apiUrl });
21
- console.log(` Saved to ~/.suron-config\n`);
22
18
  }
23
19
  else {
24
- console.log(` Using API URL: ${apiUrl}\n`);
20
+ console.log(` Convex URL: ${apiUrl}`);
21
+ const change = await (0, config_1.prompt)(" Change it? (y/N): ");
22
+ if (change.toLowerCase() === "y") {
23
+ const input = await (0, config_1.prompt)(" New URL: ");
24
+ if (!input) {
25
+ console.error("\nerror: URL required");
26
+ process.exit(1);
27
+ }
28
+ apiUrl = input.replace(/\/$/, "");
29
+ }
25
30
  }
26
- // Step 2: Request a one-time login token from the backend
27
- console.log(" Contacting Suron backend...");
28
- let res;
31
+ // Verify the backend is reachable
32
+ console.log("\n Verifying connection...");
29
33
  try {
30
- res = await fetch(`${apiUrl}/cli/start-login`, { method: "POST" });
34
+ const res = await fetch(`${apiUrl}/cli/verify`, {
35
+ method: "POST",
36
+ headers: { "Content-Type": "application/json" },
37
+ body: JSON.stringify({}),
38
+ });
39
+ // A 400 (missing telegram_id) means the route exists and backend is up
40
+ if (!res.ok && res.status !== 400) {
41
+ const text = await res.text().catch(() => "");
42
+ console.error(`\nerror: backend returned (${res.status}): ${text}`);
43
+ process.exit(1);
44
+ }
31
45
  }
32
46
  catch (err) {
33
47
  console.error(`\nerror: could not reach ${apiUrl}`);
34
48
  console.error(` Is the Convex deployment running?`);
35
49
  process.exit(1);
36
50
  }
37
- if (!res.ok) {
38
- const text = await res.text().catch(() => "");
39
- console.error(`\nerror: /cli/start-login failed (${res.status}): ${text}`);
40
- process.exit(1);
41
- }
42
- const data = (await res.json());
43
- const telegramUrl = `https://t.me/${data.bot_username}?start=${data.token}`;
44
- console.log(`\n Open this URL in Telegram and tap Start:\n`);
45
- console.log(` ${telegramUrl}\n`);
46
- // Try to open browser automatically (best effort)
47
- const opener = process.platform === "win32" ? "start" :
48
- process.platform === "darwin" ? "open" : "xdg-open";
49
- (0, child_process_1.exec)(`${opener} "${telegramUrl}"`);
50
- await (0, config_1.prompt)(" Press Enter once you have tapped Start in Telegram...");
51
- // Step 3: Poll until Telegram confirms the link
52
- console.log("\n Waiting for Telegram confirmation...");
53
- const deadline = Date.now() + 120000;
54
- while (Date.now() < deadline) {
55
- await sleep(2000);
56
- let statusRes;
57
- try {
58
- statusRes = await fetch(`${apiUrl}/cli/login-status?token=${encodeURIComponent(data.token)}`);
59
- }
60
- catch {
61
- continue;
62
- }
63
- if (!statusRes.ok)
64
- continue;
65
- const status = (await statusRes.json());
66
- if (status.confirmed && status.api_key) {
67
- (0, config_1.saveConfig)({ apiKey: status.api_key });
68
- console.log("\n Logged in. Credentials saved to ~/.suron-config\n");
69
- return;
70
- }
71
- }
72
- console.error("\nerror: login timed out after 2 minutes. Run: suron login");
73
- process.exit(1);
51
+ (0, config_1.saveConfig)({ apiUrl });
52
+ console.log("\n Saved to ~/.suron-config");
53
+ console.log(" Setup complete.\n");
54
+ console.log(" Next: cd your-project && suron init\n");
74
55
  });
75
- function sleep(ms) {
76
- return new Promise((r) => setTimeout(r, ms));
77
- }
78
56
  //# sourceMappingURL=login.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,4CAAgE;AAEnD,QAAA,YAAY,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAEjC,IAAI,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IACzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,MAAM,IAAA,eAAM,EAAC,qDAAqD,CAAC,CAAC;QAClF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,IAAA,eAAM,EAAC,sBAAsB,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,IAAA,eAAM,EAAC,aAAa,CAAC,CAAC;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACxE,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,aAAa,EAAE;YAC9C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;SACzB,CAAC,CAAC;QACH,uEAAuE;QACvE,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAA,mBAAU,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC"}
@@ -10,9 +10,7 @@ exports.rotateCommand = new commander_1.Command("rotate")
10
10
  .description("Re-encrypt .env with a new private key and update Suron")
11
11
  .action(async () => {
12
12
  const cwd = process.cwd();
13
- const apiKey = (0, config_1.requireApiKey)();
14
13
  const apiUrl = (0, config_1.requireApiUrl)();
15
- // 1. Read existing .suron.json
16
14
  const suronJsonPath = (0, path_1.join)(cwd, ".suron.json");
17
15
  if (!(0, fs_1.existsSync)(suronJsonPath)) {
18
16
  console.error("error: .suron.json not found. Run: suron init first");
@@ -26,13 +24,11 @@ exports.rotateCommand = new commander_1.Command("rotate")
26
24
  console.error("error: .suron.json is malformed");
27
25
  process.exit(1);
28
26
  }
29
- // 2. Check .env exists
30
27
  if (!(0, fs_1.existsSync)((0, path_1.join)(cwd, ".env"))) {
31
28
  console.error("error: .env not found");
32
29
  process.exit(1);
33
30
  }
34
31
  console.log("[suron] Re-encrypting .env with a new private key...");
35
- // 3. Re-encrypt — dotenvx generates a new private key
36
32
  try {
37
33
  (0, dotenvx_1.encryptDotenv)(cwd);
38
34
  }
@@ -40,7 +36,6 @@ exports.rotateCommand = new commander_1.Command("rotate")
40
36
  console.error(`error: dotenvx encryption failed: ${err}`);
41
37
  process.exit(1);
42
38
  }
43
- // 4. Read new private key
44
39
  let newPrivateKey;
45
40
  try {
46
41
  newPrivateKey = (0, dotenvx_1.readPrivateKey)(cwd);
@@ -50,15 +45,11 @@ exports.rotateCommand = new commander_1.Command("rotate")
50
45
  process.exit(1);
51
46
  }
52
47
  console.log("[suron] Updating private key in Suron...");
53
- // 5. Send new private key to Convex (backend encrypts it with MASTER_KEY)
54
48
  let res;
55
49
  try {
56
50
  res = await fetch(`${apiUrl}/cli/rotate-key`, {
57
51
  method: "POST",
58
- headers: {
59
- "Content-Type": "application/json",
60
- Authorization: `Bearer ${apiKey}`,
61
- },
52
+ headers: { "Content-Type": "application/json" },
62
53
  body: JSON.stringify({
63
54
  app_id: suronConfig.id,
64
55
  private_key: newPrivateKey,
@@ -74,7 +65,6 @@ exports.rotateCommand = new commander_1.Command("rotate")
74
65
  console.error(`error: rotate-key failed (${res.status}): ${text}`);
75
66
  process.exit(1);
76
67
  }
77
- // 6. Delete .env.keys
78
68
  (0, dotenvx_1.deleteKeysFile)(cwd);
79
69
  console.log("[suron] Key rotated.");
80
70
  console.log(" .env re-encrypted — safe to commit");
@@ -1 +1 @@
1
- {"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../src/commands/rotate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../src/commands/rotate.ts"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // deleted
3
+ //# sourceMappingURL=set-telegram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-telegram.js","sourceRoot":"","sources":["../../src/commands/set-telegram.ts"],"names":[],"mappings":";AAAA,UAAU"}
@@ -4,35 +4,10 @@ exports.whoamiCommand = void 0;
4
4
  const commander_1 = require("commander");
5
5
  const config_1 = require("../utils/config");
6
6
  exports.whoamiCommand = new commander_1.Command("whoami")
7
- .description("Show your linked Telegram account and app info")
7
+ .description("Show your configured account info")
8
8
  .action(async () => {
9
- const apiKey = (0, config_1.requireApiKey)();
10
9
  const apiUrl = (0, config_1.requireApiUrl)();
11
- let res;
12
- try {
13
- res = await fetch(`${apiUrl}/cli/whoami`, {
14
- method: "POST",
15
- headers: {
16
- "Content-Type": "application/json",
17
- Authorization: `Bearer ${apiKey}`,
18
- },
19
- });
20
- }
21
- catch (err) {
22
- console.error(`error: could not reach Suron API: ${err}`);
23
- process.exit(1);
24
- }
25
- if (res.status === 401) {
26
- console.error("error: invalid API key. Run: suron login");
27
- process.exit(1);
28
- }
29
- if (!res.ok) {
30
- const text = await res.text().catch(() => "");
31
- console.error(`error: whoami failed (${res.status}): ${text}`);
32
- process.exit(1);
33
- }
34
- const data = (await res.json());
35
- console.log(`telegram: @${data.telegram_username}`);
36
- console.log(`id: ${data.telegram_id}`);
10
+ console.log(`api url: ${apiUrl}`);
11
+ console.log(`config file: ~/.suron-config`);
37
12
  });
38
13
  //# sourceMappingURL=whoami.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,4CAA+D;AAElD,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,IAAA,sBAAa,GAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAA,sBAAa,GAAE,CAAC;IAE/B,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,aAAa,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,4CAAgD;AAEnC,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,IAAA,sBAAa,GAAE,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC"}
@@ -1,10 +1,12 @@
1
- export declare function getApiKey(): string | null;
2
- export declare function getApiUrl(): string | null;
3
- export declare function saveConfig(values: {
4
- apiKey?: string;
1
+ interface Config {
5
2
  apiUrl?: string;
6
- }): void;
3
+ apiKey?: string;
4
+ }
5
+ export declare function saveConfig(values: Partial<Config>): void;
6
+ export declare function getApiUrl(): string | null;
7
+ export declare function getApiKey(): string | null;
7
8
  export declare function saveApiKey(key: string): void;
8
- export declare function requireApiKey(): string;
9
9
  export declare function requireApiUrl(): string;
10
+ export declare function requireApiKey(): string;
10
11
  export declare function prompt(question: string): Promise<string>;
12
+ export {};
@@ -33,68 +33,67 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getApiKey = getApiKey;
37
- exports.getApiUrl = getApiUrl;
38
36
  exports.saveConfig = saveConfig;
37
+ exports.getApiUrl = getApiUrl;
38
+ exports.getApiKey = getApiKey;
39
39
  exports.saveApiKey = saveApiKey;
40
- exports.requireApiKey = requireApiKey;
41
40
  exports.requireApiUrl = requireApiUrl;
41
+ exports.requireApiKey = requireApiKey;
42
42
  exports.prompt = prompt;
43
43
  const os_1 = require("os");
44
44
  const path_1 = require("path");
45
45
  const fs_1 = require("fs");
46
46
  const readline = __importStar(require("readline"));
47
47
  const CONFIG_PATH = (0, path_1.join)((0, os_1.homedir)(), ".suron-config");
48
- function getApiKey() {
48
+ function readConfig() {
49
49
  if (!(0, fs_1.existsSync)(CONFIG_PATH))
50
- return null;
50
+ return {};
51
51
  try {
52
- const content = (0, fs_1.readFileSync)(CONFIG_PATH, "utf-8");
53
- const match = content.match(/VAULT_API_KEY=(.+)/);
54
- return match?.[1]?.trim() ?? null;
52
+ const lines = (0, fs_1.readFileSync)(CONFIG_PATH, "utf-8").split("\n");
53
+ const config = {};
54
+ for (const line of lines) {
55
+ const [key, ...rest] = line.split("=");
56
+ const value = rest.join("=").trim();
57
+ if (!value)
58
+ continue;
59
+ if (key === "SURON_API_URL")
60
+ config.apiUrl = value;
61
+ if (key === "VAULT_API_KEY")
62
+ config.apiKey = value;
63
+ }
64
+ return config;
55
65
  }
56
66
  catch {
57
- return null;
67
+ return {};
58
68
  }
59
69
  }
70
+ function saveConfig(values) {
71
+ const current = readConfig();
72
+ const merged = { ...current, ...values };
73
+ const lines = [];
74
+ if (merged.apiUrl)
75
+ lines.push(`SURON_API_URL=${merged.apiUrl}`);
76
+ if (merged.apiKey)
77
+ lines.push(`VAULT_API_KEY=${merged.apiKey}`);
78
+ (0, fs_1.writeFileSync)(CONFIG_PATH, lines.join("\n") + "\n", { mode: 0o600 });
79
+ }
60
80
  function getApiUrl() {
61
- // Check env var first, then config file
62
- if (process.env.SURON_API_URL)
63
- return process.env.SURON_API_URL.replace(/\/$/, "");
64
- if (!(0, fs_1.existsSync)(CONFIG_PATH))
65
- return null;
66
- try {
67
- const content = (0, fs_1.readFileSync)(CONFIG_PATH, "utf-8");
68
- const match = content.match(/SURON_API_URL=(.+)/);
69
- return match?.[1]?.trim() ?? null;
70
- }
71
- catch {
72
- return null;
73
- }
81
+ return process.env.SURON_API_URL?.replace(/\/$/, "") ?? readConfig().apiUrl ?? null;
74
82
  }
75
- function saveConfig(values) {
76
- let content = (0, fs_1.existsSync)(CONFIG_PATH) ? (0, fs_1.readFileSync)(CONFIG_PATH, "utf-8") : "";
77
- if (values.apiUrl) {
78
- if (content.match(/SURON_API_URL=.*/)) {
79
- content = content.replace(/SURON_API_URL=.*/, `SURON_API_URL=${values.apiUrl}`);
80
- }
81
- else {
82
- content += `SURON_API_URL=${values.apiUrl}\n`;
83
- }
84
- }
85
- if (values.apiKey) {
86
- if (content.match(/VAULT_API_KEY=.*/)) {
87
- content = content.replace(/VAULT_API_KEY=.*/, `VAULT_API_KEY=${values.apiKey}`);
88
- }
89
- else {
90
- content += `VAULT_API_KEY=${values.apiKey}\n`;
91
- }
92
- }
93
- (0, fs_1.writeFileSync)(CONFIG_PATH, content, { mode: 0o600 });
83
+ function getApiKey() {
84
+ return readConfig().apiKey ?? null;
94
85
  }
95
86
  function saveApiKey(key) {
96
87
  saveConfig({ apiKey: key });
97
88
  }
89
+ function requireApiUrl() {
90
+ const url = getApiUrl();
91
+ if (!url) {
92
+ console.error("error: not configured. Run: suron login");
93
+ process.exit(1);
94
+ }
95
+ return url;
96
+ }
98
97
  function requireApiKey() {
99
98
  const key = getApiKey();
100
99
  if (!key) {
@@ -103,14 +102,6 @@ function requireApiKey() {
103
102
  }
104
103
  return key;
105
104
  }
106
- function requireApiUrl() {
107
- const url = getApiUrl();
108
- if (!url) {
109
- console.error("error: SURON_API_URL not set. Run: suron login");
110
- process.exit(1);
111
- }
112
- return url;
113
- }
114
105
  function prompt(question) {
115
106
  const rl = readline.createInterface({
116
107
  input: process.stdin,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,8BASC;AAED,8BAWC;AAED,gCAoBC;AAED,gCAEC;AAED,sCAOC;AAED,sCAOC;AAED,wBAWC;AAtFD,2BAA6B;AAC7B,+BAA4B;AAC5B,2BAA6D;AAC7D,mDAAqC;AAErC,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,eAAe,CAAC,CAAC;AAErD,SAAgB,SAAS;IACvB,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAClD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,SAAS;IACvB,wCAAwC;IACxC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnF,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAClD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,MAA4C;IACrE,IAAI,OAAO,GAAG,IAAA,eAAU,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,iBAAiB,MAAM,CAAC,MAAM,IAAI,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,iBAAiB,MAAM,CAAC,MAAM,IAAI,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IAAA,kBAAa,EAAC,WAAW,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAgB,UAAU,CAAC,GAAW;IACpC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,aAAa;IAC3B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,MAAM,CAAC,QAAgB;IACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suronai/cli",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "CLI for Suron — suron login, init, whoami, rotate",
5
5
  "bin": {
6
6
  "suron": "./dist/index.js"
@@ -9,19 +9,19 @@
9
9
  "dist"
10
10
  ],
11
11
  "scripts": {
12
- "build": "tsc && node -e \"const fs=require('fs'),f='dist/index.js',c=fs.readFileSync(f,'utf8');if(!c.startsWith('#!/usr/bin/env node'))fs.writeFileSync(f,'#!/usr/bin/env node\\n'+c)\"",
13
- "dev": "tsc --watch",
12
+ "build": "node ../../node_modules/typescript/bin/tsc && node -e \"const fs=require('fs'),f='dist/index.js',c=fs.readFileSync(f,'utf8');if(!c.startsWith('#!/usr/bin/env node'))fs.writeFileSync(f,'#!/usr/bin/env node\\n'+c)\"",
13
+ "dev": "node ../../node_modules/typescript/bin/tsc --watch",
14
14
  "clean": "rimraf dist"
15
15
  },
16
16
  "dependencies": {
17
- "commander": "^12.0.0",
17
+ "@dotenvx/dotenvx": "^1.0.0",
18
18
  "chalk": "^5.3.0",
19
- "@dotenvx/dotenvx": "^1.0.0"
19
+ "commander": "^12.0.0"
20
20
  },
21
21
  "devDependencies": {
22
- "typescript": "*",
23
22
  "@types/node": "^20.0.0",
24
- "rimraf": "^5.0.0"
23
+ "rimraf": "^5.0.0",
24
+ "typescript": "^5.9.3"
25
25
  },
26
26
  "engines": {
27
27
  "node": ">=18.0.0"