@suronai/cli 0.1.8 → 0.1.10
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 +49 -17
- package/dist/commands/init.js +50 -1
- package/dist/commands/init.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @suronai/cli
|
|
2
2
|
|
|
3
|
-
CLI for Suron —
|
|
3
|
+
CLI for Suron — configure your deployment and manage apps.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -8,40 +8,72 @@ CLI for Suron — link your Telegram account and manage secrets.
|
|
|
8
8
|
npm install -g @suronai/cli
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Commands
|
|
12
|
+
|
|
13
|
+
### `suron login`
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
Prompts for your Convex deployment URL, verifies the backend is reachable, and saves the URL to `~/.suron-config`.
|
|
14
16
|
|
|
15
17
|
```bash
|
|
16
|
-
|
|
18
|
+
suron login
|
|
17
19
|
```
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
### `suron init`
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
Links your Telegram account. Opens a Telegram bot URL, tap Start. Saves `VAULT_API_KEY` to `~/.suron`.
|
|
23
|
+
Run inside your project directory. Does everything needed to protect your app with Suron:
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
1. Encrypts `.env` in-place with dotenvx
|
|
26
|
+
2. Registers your app in Convex (stores the encrypted private key)
|
|
27
|
+
3. Installs `@suronai/sdk` into your project (detects npm / pnpm / yarn / bun)
|
|
28
|
+
4. Writes `.suron.json` with your app name and ID
|
|
29
|
+
5. Deletes `.env.keys`
|
|
26
30
|
|
|
27
31
|
```bash
|
|
28
32
|
cd my-project
|
|
29
33
|
suron init
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
|
|
35
|
+
# optional: set a custom app name
|
|
36
|
+
suron init --name my-app
|
|
32
37
|
```
|
|
33
38
|
|
|
39
|
+
After `suron init`, both `.env` and `.suron.json` are safe to commit.
|
|
40
|
+
|
|
34
41
|
### `suron whoami`
|
|
35
|
-
|
|
42
|
+
|
|
43
|
+
Prints the configured Convex API URL.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
suron whoami
|
|
47
|
+
```
|
|
36
48
|
|
|
37
49
|
### `suron rotate`
|
|
38
|
-
|
|
50
|
+
|
|
51
|
+
Re-encrypts `.env` with a new private key, sends the new key to Convex, deletes `.env.keys`.
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
suron rotate
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Use this if your private key may have been compromised, or as a routine rotation.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Configuration
|
|
62
|
+
|
|
63
|
+
The CLI reads `SURON_API_URL` from the environment first, then falls back to `~/.suron-config`.
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Override without running suron login:
|
|
67
|
+
export SURON_API_URL=https://your-deployment.convex.site
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
39
71
|
|
|
40
72
|
## Files
|
|
41
73
|
|
|
42
74
|
| File | Commit? | Notes |
|
|
43
75
|
|---|---|---|
|
|
44
|
-
| `.suron.json` | yes | app name + id |
|
|
45
|
-
| `.env` | yes | encrypted by dotenvx |
|
|
46
|
-
|
|
|
47
|
-
|
|
|
76
|
+
| `.suron.json` | ✅ yes | app name + id, no secrets |
|
|
77
|
+
| `.env` | ✅ yes | encrypted by dotenvx |
|
|
78
|
+
| `.env.keys` | ⛔ no | deleted automatically by `suron init` |
|
|
79
|
+
| `~/.suron-config` | ⛔ no | CLI config — lives on developer machine only |
|
package/dist/commands/init.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.initCommand = void 0;
|
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
6
|
const path_1 = require("path");
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
7
8
|
const config_1 = require("../utils/config");
|
|
8
9
|
const dotenvx_1 = require("../utils/dotenvx");
|
|
9
10
|
exports.initCommand = new commander_1.Command("init")
|
|
@@ -57,13 +58,61 @@ exports.initCommand = new commander_1.Command("init")
|
|
|
57
58
|
}
|
|
58
59
|
const data = (await res.json());
|
|
59
60
|
(0, dotenvx_1.deleteKeysFile)(cwd);
|
|
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");
|
|
61
|
+
(0, fs_1.writeFileSync)((0, path_1.join)(cwd, ".suron.json"), JSON.stringify({ app: appName, id: data.app_id, api_url: apiUrl }, null, 2) + "\n", "utf-8");
|
|
62
|
+
// Install @suronai/sdk into the project
|
|
63
|
+
const pkgJsonPath = (0, path_1.join)(cwd, "package.json");
|
|
64
|
+
if ((0, fs_1.existsSync)(pkgJsonPath)) {
|
|
65
|
+
let alreadyInstalled = false;
|
|
66
|
+
try {
|
|
67
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)(pkgJsonPath, "utf-8"));
|
|
68
|
+
alreadyInstalled = !!(pkg.dependencies?.["@suronai/sdk"] ||
|
|
69
|
+
pkg.devDependencies?.["@suronai/sdk"]);
|
|
70
|
+
}
|
|
71
|
+
catch { /* ignore parse errors */ }
|
|
72
|
+
if (alreadyInstalled) {
|
|
73
|
+
console.log("[suron] @suronai/sdk already in package.json, skipping install");
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log("[suron] Installing @suronai/sdk...");
|
|
77
|
+
const pm = detectPackageManager(cwd);
|
|
78
|
+
try {
|
|
79
|
+
(0, child_process_1.execSync)(`${pm} ${pmAddCmd(pm)} @suronai/sdk`, { cwd, stdio: "inherit" });
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
console.error(`error: failed to install @suronai/sdk: ${err}`);
|
|
83
|
+
console.error(` Run manually: npm install @suronai/sdk`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log("[suron] No package.json found — skipping SDK install");
|
|
89
|
+
console.log(" Run manually: npm install @suronai/sdk");
|
|
90
|
+
}
|
|
61
91
|
console.log(`[suron] Done.`);
|
|
62
92
|
console.log(` .env is encrypted — safe to commit`);
|
|
63
93
|
console.log(` .env.keys deleted`);
|
|
64
94
|
console.log(` .suron.json written — safe to commit`);
|
|
95
|
+
console.log(` @suronai/sdk installed`);
|
|
65
96
|
console.log(`\n Next: add to your app entry point:`);
|
|
66
97
|
console.log(` import { vault } from '@suronai/sdk'`);
|
|
67
98
|
console.log(` await vault()\n`);
|
|
68
99
|
});
|
|
100
|
+
function detectPackageManager(cwd) {
|
|
101
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(cwd, "pnpm-lock.yaml")))
|
|
102
|
+
return "pnpm";
|
|
103
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(cwd, "yarn.lock")))
|
|
104
|
+
return "yarn";
|
|
105
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(cwd, "bun.lockb")))
|
|
106
|
+
return "bun";
|
|
107
|
+
return "npm";
|
|
108
|
+
}
|
|
109
|
+
function pmAddCmd(pm) {
|
|
110
|
+
if (pm === "yarn")
|
|
111
|
+
return "add";
|
|
112
|
+
if (pm === "pnpm")
|
|
113
|
+
return "add";
|
|
114
|
+
if (pm === "bun")
|
|
115
|
+
return "add";
|
|
116
|
+
return "install";
|
|
117
|
+
}
|
|
69
118
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|