@etree/cli 2.0.1

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.
Files changed (60) hide show
  1. package/README.md +199 -0
  2. package/dist/commands/auth.d.ts +2 -0
  3. package/dist/commands/auth.js +220 -0
  4. package/dist/commands/auth.js.map +1 -0
  5. package/dist/commands/config.d.ts +2 -0
  6. package/dist/commands/config.js +42 -0
  7. package/dist/commands/config.js.map +1 -0
  8. package/dist/commands/init.d.ts +2 -0
  9. package/dist/commands/init.js +159 -0
  10. package/dist/commands/init.js.map +1 -0
  11. package/dist/commands/member.d.ts +2 -0
  12. package/dist/commands/member.js +119 -0
  13. package/dist/commands/member.js.map +1 -0
  14. package/dist/commands/secret.d.ts +13 -0
  15. package/dist/commands/secret.js +307 -0
  16. package/dist/commands/secret.js.map +1 -0
  17. package/dist/commands/shortcuts.d.ts +7 -0
  18. package/dist/commands/shortcuts.js +26 -0
  19. package/dist/commands/shortcuts.js.map +1 -0
  20. package/dist/commands/wallet.d.ts +2 -0
  21. package/dist/commands/wallet.js +88 -0
  22. package/dist/commands/wallet.js.map +1 -0
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.js +43 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/lib/api.d.ts +15 -0
  27. package/dist/lib/api.js +40 -0
  28. package/dist/lib/api.js.map +1 -0
  29. package/dist/lib/config.d.ts +17 -0
  30. package/dist/lib/config.js +91 -0
  31. package/dist/lib/config.js.map +1 -0
  32. package/dist/lib/crypto.d.ts +23 -0
  33. package/dist/lib/crypto.js +173 -0
  34. package/dist/lib/crypto.js.map +1 -0
  35. package/dist/lib/env-manager.d.ts +11 -0
  36. package/dist/lib/env-manager.js +88 -0
  37. package/dist/lib/env-manager.js.map +1 -0
  38. package/dist/lib/key-store.d.ts +16 -0
  39. package/dist/lib/key-store.js +83 -0
  40. package/dist/lib/key-store.js.map +1 -0
  41. package/dist/test-e2e.d.ts +1 -0
  42. package/dist/test-e2e.js +84 -0
  43. package/dist/test-e2e.js.map +1 -0
  44. package/eslint.config.mjs +4 -0
  45. package/package.json +30 -0
  46. package/src/commands/auth.ts +258 -0
  47. package/src/commands/config.ts +47 -0
  48. package/src/commands/init.ts +187 -0
  49. package/src/commands/member.ts +146 -0
  50. package/src/commands/secret.ts +381 -0
  51. package/src/commands/shortcuts.ts +25 -0
  52. package/src/commands/wallet.ts +97 -0
  53. package/src/index.ts +50 -0
  54. package/src/lib/api.ts +57 -0
  55. package/src/lib/config.ts +70 -0
  56. package/src/lib/crypto.ts +173 -0
  57. package/src/lib/env-manager.ts +60 -0
  58. package/src/lib/key-store.ts +51 -0
  59. package/src/test-e2e.ts +106 -0
  60. package/tsconfig.json +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAAuD;AACvD,8CAA2D;AAC3D,8CAA2D;AAC3D,8CAA2D;AAC3D,0CAAsD;AACtD,8CAA2D;AAC3D,oDAAyD;AAEzD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,2DAA2D,CAAC;KACxE,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;CAcH,CACE,CAAC;AAEJ,gBAAgB;AAChB,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAEhC,oBAAoB;AACpB,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAEhC,sBAAsB;AACtB,IAAA,6BAAiB,EAAC,OAAO,CAAC,CAAC;AAE3B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ interface ApiResponse {
2
+ [key: string]: any;
3
+ }
4
+ /**
5
+ * Make an authenticated API request to the EnvTree server.
6
+ */
7
+ export declare function apiRequest(method: string, path: string, body?: Record<string, any>, requireAuth?: boolean): Promise<ApiResponse>;
8
+ /** Shorthand methods */
9
+ export declare const api: {
10
+ get: (path: string) => Promise<ApiResponse>;
11
+ post: (path: string, body: Record<string, any>, auth?: boolean) => Promise<ApiResponse>;
12
+ put: (path: string, body: Record<string, any>) => Promise<ApiResponse>;
13
+ delete: (path: string) => Promise<ApiResponse>;
14
+ };
15
+ export {};
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.api = void 0;
4
+ exports.apiRequest = apiRequest;
5
+ const config_1 = require("./config");
6
+ /**
7
+ * Make an authenticated API request to the EnvTree server.
8
+ */
9
+ async function apiRequest(method, path, body, requireAuth = true) {
10
+ const config = (0, config_1.getConfig)();
11
+ const url = `${config.server_url}${path}`;
12
+ const headers = {
13
+ "Content-Type": "application/json",
14
+ };
15
+ if (requireAuth) {
16
+ const session = (0, config_1.requireSession)();
17
+ headers["Authorization"] = `Bearer ${session.access_token}`;
18
+ }
19
+ const options = {
20
+ method,
21
+ headers,
22
+ };
23
+ if (body && method !== "GET") {
24
+ options.body = JSON.stringify(body);
25
+ }
26
+ const response = await fetch(url, options);
27
+ const data = (await response.json());
28
+ if (!response.ok) {
29
+ throw new Error(data.error || `Request failed with status ${response.status}`);
30
+ }
31
+ return data;
32
+ }
33
+ /** Shorthand methods */
34
+ exports.api = {
35
+ get: (path) => apiRequest("GET", path),
36
+ post: (path, body, auth = true) => apiRequest("POST", path, body, auth),
37
+ put: (path, body) => apiRequest("PUT", path, body),
38
+ delete: (path) => apiRequest("DELETE", path),
39
+ };
40
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":";;;AASA,gCAqCC;AA9CD,qCAAqD;AAMrD;;GAEG;AACI,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,IAAY,EACZ,IAA0B,EAC1B,WAAW,GAAG,IAAI;IAElB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC;IAE1C,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,IAAA,uBAAc,GAAE,CAAC;QACjC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,OAAO,CAAC,YAAY,EAAE,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAgB;QAC3B,MAAM;QACN,OAAO;KACR,CAAC;IAEF,IAAI,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgB,CAAC;IAEpD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,KAAK,IAAI,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAC9D,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wBAAwB;AACX,QAAA,GAAG,GAAG;IACjB,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;IAC9C,IAAI,EAAE,CAAC,IAAY,EAAE,IAAyB,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,CAC7D,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACtC,GAAG,EAAE,CAAC,IAAY,EAAE,IAAyB,EAAE,EAAE,CAC/C,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IAC/B,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;CACrD,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface Session {
2
+ access_token: string;
3
+ refresh_token: string;
4
+ user_id: string;
5
+ email: string;
6
+ username: string;
7
+ }
8
+ export interface Config {
9
+ server_url: string;
10
+ session?: Session;
11
+ }
12
+ export declare function getConfig(): Config;
13
+ export declare function saveConfig(config: Config): void;
14
+ export declare function getSession(): Session | null;
15
+ export declare function saveSession(session: Session): void;
16
+ export declare function clearSession(): void;
17
+ export declare function requireSession(): Session;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getConfig = getConfig;
37
+ exports.saveConfig = saveConfig;
38
+ exports.getSession = getSession;
39
+ exports.saveSession = saveSession;
40
+ exports.clearSession = clearSession;
41
+ exports.requireSession = requireSession;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const CONFIG_DIR = path.join(os.homedir(), ".envtree");
46
+ const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
47
+ function ensureConfigDir() {
48
+ if (!fs.existsSync(CONFIG_DIR)) {
49
+ fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
50
+ }
51
+ }
52
+ function getConfig() {
53
+ ensureConfigDir();
54
+ if (!fs.existsSync(CONFIG_FILE)) {
55
+ const defaults = { server_url: "http://localhost:3001" };
56
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(defaults, null, 2), {
57
+ mode: 0o600,
58
+ });
59
+ return defaults;
60
+ }
61
+ return JSON.parse(fs.readFileSync(CONFIG_FILE, "utf-8"));
62
+ }
63
+ function saveConfig(config) {
64
+ ensureConfigDir();
65
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), {
66
+ mode: 0o600,
67
+ });
68
+ }
69
+ function getSession() {
70
+ const config = getConfig();
71
+ return config.session || null;
72
+ }
73
+ function saveSession(session) {
74
+ const config = getConfig();
75
+ config.session = session;
76
+ saveConfig(config);
77
+ }
78
+ function clearSession() {
79
+ const config = getConfig();
80
+ delete config.session;
81
+ saveConfig(config);
82
+ }
83
+ function requireSession() {
84
+ const session = getSession();
85
+ if (!session) {
86
+ console.error("Not logged in. Run: envtree login");
87
+ process.exit(1);
88
+ }
89
+ return session;
90
+ }
91
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,8BAUC;AAED,gCAKC;AAED,gCAGC;AAED,kCAIC;AAED,oCAIC;AAED,wCAOC;AArED,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAezD,SAAS,eAAe;IACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAgB,SAAS;IACvB,eAAe,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAW,EAAE,UAAU,EAAE,uBAAuB,EAAE,CAAC;QACjE,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC/D,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc;IACvC,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC7D,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,UAAU;IACxB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,SAAgB,WAAW,CAAC,OAAgB;IAC1C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,OAAO,CAAC;IACtB,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Generate a new X25519 key pair.
3
+ */
4
+ export declare function generateKeys(): Promise<{
5
+ private_key: string;
6
+ public_key: string;
7
+ }>;
8
+ /**
9
+ * Derive the public key from an existing private key.
10
+ */
11
+ export declare function derivePublicKey(privateKey: string): Promise<string>;
12
+ /**
13
+ * Encrypt a plaintext value using the recipient's public key (SealedBox).
14
+ */
15
+ export declare function encrypt(plaintext: string, publicKey: string): Promise<string>;
16
+ /**
17
+ * Decrypt a ciphertext using the recipient's private key (SealedBox).
18
+ */
19
+ export declare function decrypt(ciphertext: string, privateKey: string): Promise<string>;
20
+ /**
21
+ * Shut down the crypto engine process.
22
+ */
23
+ export declare function shutdown(): void;
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.generateKeys = generateKeys;
37
+ exports.derivePublicKey = derivePublicKey;
38
+ exports.encrypt = encrypt;
39
+ exports.decrypt = decrypt;
40
+ exports.shutdown = shutdown;
41
+ const child_process_1 = require("child_process");
42
+ const path = __importStar(require("path"));
43
+ const CRYPTO_ENGINE_PATH = path.resolve(__dirname, "../../../../packages/crypto/engine.py");
44
+ let engineProcess = null;
45
+ /**
46
+ * Get or spawn the crypto engine Python process.
47
+ */
48
+ function getEngine() {
49
+ if (engineProcess && !engineProcess.killed) {
50
+ return engineProcess;
51
+ }
52
+ // Try venv python first, fall back to system python
53
+ const venvDir = path.resolve(__dirname, "../../../../packages/crypto/.venv");
54
+ const isWindows = process.platform === "win32";
55
+ // Potential Venv Paths
56
+ const potentialVenvPaths = isWindows
57
+ ? [
58
+ path.join(venvDir, "Scripts", "python.exe"),
59
+ path.join(venvDir, "bin", "python.exe"),
60
+ ]
61
+ : [path.join(venvDir, "bin", "python")];
62
+ let pythonCmd = isWindows ? "python" : "python3";
63
+ for (const venvPath of potentialVenvPaths) {
64
+ if (require("fs").existsSync(venvPath)) {
65
+ pythonCmd = venvPath;
66
+ break;
67
+ }
68
+ }
69
+ // If we haven't found a venv python, verify the system command exists
70
+ if (pythonCmd === "python" || pythonCmd === "python3") {
71
+ try {
72
+ // Use system python if it exists and works
73
+ require("child_process").execSync(`${pythonCmd} --version`, {
74
+ stdio: "ignore",
75
+ });
76
+ }
77
+ catch {
78
+ // If the preferred one fails, try the fallback
79
+ pythonCmd = pythonCmd === "python3" ? "python" : "python3";
80
+ }
81
+ }
82
+ engineProcess = (0, child_process_1.spawn)(pythonCmd, [CRYPTO_ENGINE_PATH], {
83
+ stdio: ["pipe", "pipe", "pipe"],
84
+ cwd: path.resolve(__dirname, "../../../../packages/crypto"),
85
+ });
86
+ engineProcess.on("exit", () => {
87
+ engineProcess = null;
88
+ });
89
+ return engineProcess;
90
+ }
91
+ /**
92
+ * Send a command to the crypto engine and get the response.
93
+ */
94
+ function sendCommand(request) {
95
+ return new Promise((resolve, reject) => {
96
+ const engine = getEngine();
97
+ const onData = (data) => {
98
+ try {
99
+ const response = JSON.parse(data.toString().trim());
100
+ engine.stdout.removeListener("data", onData);
101
+ engine.stderr.removeListener("data", onError);
102
+ if (response.status === "error") {
103
+ reject(new Error(response.message));
104
+ }
105
+ else {
106
+ resolve(response);
107
+ }
108
+ }
109
+ catch (e) {
110
+ // partial data, wait for more
111
+ }
112
+ };
113
+ const onError = (data) => {
114
+ engine.stdout.removeListener("data", onData);
115
+ engine.stderr.removeListener("data", onError);
116
+ reject(new Error(`Crypto engine error: ${data.toString()}`));
117
+ };
118
+ engine.stdout.on("data", onData);
119
+ engine.stderr.on("data", onError);
120
+ engine.stdin.write(JSON.stringify(request) + "\n");
121
+ });
122
+ }
123
+ /**
124
+ * Generate a new X25519 key pair.
125
+ */
126
+ async function generateKeys() {
127
+ const result = await sendCommand({ action: "generate_keys" });
128
+ return {
129
+ private_key: result.private_key,
130
+ public_key: result.public_key,
131
+ };
132
+ }
133
+ /**
134
+ * Derive the public key from an existing private key.
135
+ */
136
+ async function derivePublicKey(privateKey) {
137
+ const result = await sendCommand({
138
+ action: "derive_public_key",
139
+ data: { private_key: privateKey },
140
+ });
141
+ return result.public_key;
142
+ }
143
+ /**
144
+ * Encrypt a plaintext value using the recipient's public key (SealedBox).
145
+ */
146
+ async function encrypt(plaintext, publicKey) {
147
+ const result = await sendCommand({
148
+ action: "encrypt",
149
+ data: { plaintext, public_key: publicKey },
150
+ });
151
+ return result.ciphertext;
152
+ }
153
+ /**
154
+ * Decrypt a ciphertext using the recipient's private key (SealedBox).
155
+ */
156
+ async function decrypt(ciphertext, privateKey) {
157
+ const result = await sendCommand({
158
+ action: "decrypt",
159
+ data: { ciphertext, private_key: privateKey },
160
+ });
161
+ return result.plaintext;
162
+ }
163
+ /**
164
+ * Shut down the crypto engine process.
165
+ */
166
+ function shutdown() {
167
+ if (engineProcess && !engineProcess.killed) {
168
+ engineProcess.stdin.end();
169
+ engineProcess.kill();
170
+ engineProcess = null;
171
+ }
172
+ }
173
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/lib/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Updates a key=value pair in a .env file.
3
+ * Creates the file if it doesn't exist.
4
+ * If the key exists, it updates its value.
5
+ * If the key doesn't exist, it appends to the end.
6
+ */
7
+ export declare function updateEnvFile(key: string, value: string): void;
8
+ /**
9
+ * Ensures that a .gitignore file exists and contains the specified entry.
10
+ */
11
+ export declare function ensureGitIgnore(entry?: string): void;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.updateEnvFile = updateEnvFile;
37
+ exports.ensureGitIgnore = ensureGitIgnore;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ /**
41
+ * Updates a key=value pair in a .env file.
42
+ * Creates the file if it doesn't exist.
43
+ * If the key exists, it updates its value.
44
+ * If the key doesn't exist, it appends to the end.
45
+ */
46
+ function updateEnvFile(key, value) {
47
+ const envPath = path.resolve(process.cwd(), ".env");
48
+ let content = "";
49
+ if (fs.existsSync(envPath)) {
50
+ content = fs.readFileSync(envPath, "utf-8");
51
+ }
52
+ const lines = content.split("\n");
53
+ const keyPattern = new RegExp(`^${key}=.*`);
54
+ let found = false;
55
+ const newLines = lines.map((line) => {
56
+ if (keyPattern.test(line.trim())) {
57
+ found = true;
58
+ return `${key}=${value}`;
59
+ }
60
+ return line;
61
+ });
62
+ if (!found) {
63
+ if (newLines.length > 0 && newLines[newLines.length - 1].trim() !== "") {
64
+ newLines.push("");
65
+ }
66
+ newLines.push(`${key}=${value}`);
67
+ }
68
+ fs.writeFileSync(envPath, newLines.join("\n"), "utf-8");
69
+ }
70
+ /**
71
+ * Ensures that a .gitignore file exists and contains the specified entry.
72
+ */
73
+ function ensureGitIgnore(entry = ".env") {
74
+ const gitIgnorePath = path.resolve(process.cwd(), ".gitignore");
75
+ let content = "";
76
+ if (fs.existsSync(gitIgnorePath)) {
77
+ content = fs.readFileSync(gitIgnorePath, "utf-8");
78
+ }
79
+ const lines = content.split("\n").map((l) => l.trim());
80
+ if (!lines.includes(entry)) {
81
+ if (content.length > 0 && !content.endsWith("\n")) {
82
+ content += "\n";
83
+ }
84
+ content += `${entry}\n`;
85
+ fs.writeFileSync(gitIgnorePath, content, "utf-8");
86
+ }
87
+ }
88
+ //# sourceMappingURL=env-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-manager.js","sourceRoot":"","sources":["../../src/lib/env-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,sCA4BC;AAKD,0CAiBC;AA3DD,uCAAyB;AACzB,2CAA6B;AAE7B;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,GAAW,EAAE,KAAa;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IAC5C,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACjC,KAAK,GAAG,IAAI,CAAC;YACb,OAAO,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,QAAgB,MAAM;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IAChE,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEvD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,GAAG,KAAK,IAAI,CAAC;QACxB,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Save the private key to ~/.envtree/private_key
3
+ */
4
+ export declare function savePrivateKey(privateKey: string): void;
5
+ /**
6
+ * Read the private key from ~/.envtree/private_key
7
+ */
8
+ export declare function getPrivateKey(): string | null;
9
+ /**
10
+ * Get private key or exit with error.
11
+ */
12
+ export declare function requirePrivateKey(): string;
13
+ /**
14
+ * Check if a private key exists locally.
15
+ */
16
+ export declare function hasPrivateKey(): boolean;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.savePrivateKey = savePrivateKey;
37
+ exports.getPrivateKey = getPrivateKey;
38
+ exports.requirePrivateKey = requirePrivateKey;
39
+ exports.hasPrivateKey = hasPrivateKey;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const os = __importStar(require("os"));
43
+ const KEY_DIR = path.join(os.homedir(), ".envtree");
44
+ const KEY_FILE = path.join(KEY_DIR, "private_key");
45
+ function ensureKeyDir() {
46
+ if (!fs.existsSync(KEY_DIR)) {
47
+ fs.mkdirSync(KEY_DIR, { recursive: true, mode: 0o700 });
48
+ }
49
+ }
50
+ /**
51
+ * Save the private key to ~/.envtree/private_key
52
+ */
53
+ function savePrivateKey(privateKey) {
54
+ ensureKeyDir();
55
+ fs.writeFileSync(KEY_FILE, privateKey, { mode: 0o600 });
56
+ }
57
+ /**
58
+ * Read the private key from ~/.envtree/private_key
59
+ */
60
+ function getPrivateKey() {
61
+ if (!fs.existsSync(KEY_FILE)) {
62
+ return null;
63
+ }
64
+ return fs.readFileSync(KEY_FILE, "utf-8").trim();
65
+ }
66
+ /**
67
+ * Get private key or exit with error.
68
+ */
69
+ function requirePrivateKey() {
70
+ const key = getPrivateKey();
71
+ if (!key) {
72
+ console.error("Private key not found. Run: envtree signup (or envtree login)");
73
+ process.exit(1);
74
+ }
75
+ return key;
76
+ }
77
+ /**
78
+ * Check if a private key exists locally.
79
+ */
80
+ function hasPrivateKey() {
81
+ return fs.existsSync(KEY_FILE);
82
+ }
83
+ //# sourceMappingURL=key-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-store.js","sourceRoot":"","sources":["../../src/lib/key-store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,wCAGC;AAKD,sCAKC;AAKD,8CASC;AAKD,sCAEC;AAlDD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAEnD,SAAS,YAAY;IACnB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,UAAkB;IAC/C,YAAY,EAAE,CAAC;IACf,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CACX,+DAA+D,CAChE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};