@vess-id/vess 0.2.0-alpha.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.
- package/LICENSE +64 -0
- package/README.md +223 -0
- package/bin/vess.js +2 -0
- package/dist/__mocks__/@napi-rs/keyring.d.ts +9 -0
- package/dist/__mocks__/@napi-rs/keyring.d.ts.map +1 -0
- package/dist/__mocks__/@napi-rs/keyring.js +33 -0
- package/dist/__mocks__/@napi-rs/keyring.js.map +1 -0
- package/dist/__mocks__/node-mac-auth.d.ts +8 -0
- package/dist/__mocks__/node-mac-auth.d.ts.map +1 -0
- package/dist/__mocks__/node-mac-auth.js +29 -0
- package/dist/__mocks__/node-mac-auth.js.map +1 -0
- package/dist/adapter/mcp/http-transport.d.ts +34 -0
- package/dist/adapter/mcp/http-transport.d.ts.map +1 -0
- package/dist/adapter/mcp/http-transport.js +158 -0
- package/dist/adapter/mcp/http-transport.js.map +1 -0
- package/dist/adapter/mcp/mcp-adapter.d.ts +37 -0
- package/dist/adapter/mcp/mcp-adapter.d.ts.map +1 -0
- package/dist/adapter/mcp/mcp-adapter.js +48 -0
- package/dist/adapter/mcp/mcp-adapter.js.map +1 -0
- package/dist/adapter/mcp/mcp-server.factory.d.ts +35 -0
- package/dist/adapter/mcp/mcp-server.factory.d.ts.map +1 -0
- package/dist/adapter/mcp/mcp-server.factory.js +114 -0
- package/dist/adapter/mcp/mcp-server.factory.js.map +1 -0
- package/dist/adapter/mcp/stdio-transport.d.ts +7 -0
- package/dist/adapter/mcp/stdio-transport.d.ts.map +1 -0
- package/dist/adapter/mcp/stdio-transport.js +13 -0
- package/dist/adapter/mcp/stdio-transport.js.map +1 -0
- package/dist/adapter/mcp/transport.d.ts +10 -0
- package/dist/adapter/mcp/transport.d.ts.map +1 -0
- package/dist/adapter/mcp/transport.js +14 -0
- package/dist/adapter/mcp/transport.js.map +1 -0
- package/dist/approval/approval-token.d.ts +23 -0
- package/dist/approval/approval-token.d.ts.map +1 -0
- package/dist/approval/approval-token.js +81 -0
- package/dist/approval/approval-token.js.map +1 -0
- package/dist/audit/audit-dto-mapper.d.ts +29 -0
- package/dist/audit/audit-dto-mapper.d.ts.map +1 -0
- package/dist/audit/audit-dto-mapper.js +61 -0
- package/dist/audit/audit-dto-mapper.js.map +1 -0
- package/dist/audit/audit-logger.d.ts +35 -0
- package/dist/audit/audit-logger.d.ts.map +1 -0
- package/dist/audit/audit-logger.js +67 -0
- package/dist/audit/audit-logger.js.map +1 -0
- package/dist/audit/audit-sync.d.ts +12 -0
- package/dist/audit/audit-sync.d.ts.map +1 -0
- package/dist/audit/audit-sync.js +65 -0
- package/dist/audit/audit-sync.js.map +1 -0
- package/dist/auth/user-authenticator.d.ts +51 -0
- package/dist/auth/user-authenticator.d.ts.map +1 -0
- package/dist/auth/user-authenticator.js +155 -0
- package/dist/auth/user-authenticator.js.map +1 -0
- package/dist/cli/cli-db.d.ts +12 -0
- package/dist/cli/cli-db.d.ts.map +1 -0
- package/dist/cli/cli-db.js +20 -0
- package/dist/cli/cli-db.js.map +1 -0
- package/dist/cli/cli-utils.d.ts +14 -0
- package/dist/cli/cli-utils.d.ts.map +1 -0
- package/dist/cli/cli-utils.js +57 -0
- package/dist/cli/cli-utils.js.map +1 -0
- package/dist/cli/daemon-utils.d.ts +30 -0
- package/dist/cli/daemon-utils.d.ts.map +1 -0
- package/dist/cli/daemon-utils.js +131 -0
- package/dist/cli/daemon-utils.js.map +1 -0
- package/dist/cli/daemon.d.ts +13 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +207 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +135 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/env-delete.d.ts +6 -0
- package/dist/cli/env-delete.d.ts.map +1 -0
- package/dist/cli/env-delete.js +80 -0
- package/dist/cli/env-delete.js.map +1 -0
- package/dist/cli/env-list.d.ts +5 -0
- package/dist/cli/env-list.d.ts.map +1 -0
- package/dist/cli/env-list.js +42 -0
- package/dist/cli/env-list.js.map +1 -0
- package/dist/cli/env-post-integration.d.ts +21 -0
- package/dist/cli/env-post-integration.d.ts.map +1 -0
- package/dist/cli/env-post-integration.js +300 -0
- package/dist/cli/env-post-integration.js.map +1 -0
- package/dist/cli/env-restore.d.ts +15 -0
- package/dist/cli/env-restore.d.ts.map +1 -0
- package/dist/cli/env-restore.js +130 -0
- package/dist/cli/env-restore.js.map +1 -0
- package/dist/cli/env.d.ts +14 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +182 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/error-handlers.d.ts +13 -0
- package/dist/cli/error-handlers.d.ts.map +1 -0
- package/dist/cli/error-handlers.js +32 -0
- package/dist/cli/error-handlers.js.map +1 -0
- package/dist/cli/hook-check-env.d.ts +12 -0
- package/dist/cli/hook-check-env.d.ts.map +1 -0
- package/dist/cli/hook-check-env.js +117 -0
- package/dist/cli/hook-check-env.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +294 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-guard.d.ts +13 -0
- package/dist/cli/init-guard.d.ts.map +1 -0
- package/dist/cli/init-guard.js +62 -0
- package/dist/cli/init-guard.js.map +1 -0
- package/dist/cli/init.d.ts +19 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +440 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/install.d.ts +14 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +186 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/login.d.ts +6 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +76 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/logs.d.ts +32 -0
- package/dist/cli/logs.d.ts.map +1 -0
- package/dist/cli/logs.js +147 -0
- package/dist/cli/logs.js.map +1 -0
- package/dist/cli/project.d.ts +8 -0
- package/dist/cli/project.d.ts.map +1 -0
- package/dist/cli/project.js +102 -0
- package/dist/cli/project.js.map +1 -0
- package/dist/cli/reset.d.ts +8 -0
- package/dist/cli/reset.d.ts.map +1 -0
- package/dist/cli/reset.js +137 -0
- package/dist/cli/reset.js.map +1 -0
- package/dist/cli/run.d.ts +22 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +103 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/start.d.ts +2 -0
- package/dist/cli/start.d.ts.map +1 -0
- package/dist/cli/start.js +29 -0
- package/dist/cli/start.js.map +1 -0
- package/dist/cli/status.d.ts +12 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +131 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/uninstall.d.ts +8 -0
- package/dist/cli/uninstall.d.ts.map +1 -0
- package/dist/cli/uninstall.js +111 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/config/config.d.ts +10 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +64 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/constants.d.ts +3 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +6 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/paths.d.ts +9 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +58 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/core/execution-engine.d.ts +119 -0
- package/dist/core/execution-engine.d.ts.map +1 -0
- package/dist/core/execution-engine.js +1291 -0
- package/dist/core/execution-engine.js.map +1 -0
- package/dist/core/runtime.d.ts +43 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +143 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/sync-scheduler.d.ts +42 -0
- package/dist/core/sync-scheduler.d.ts.map +1 -0
- package/dist/core/sync-scheduler.js +131 -0
- package/dist/core/sync-scheduler.js.map +1 -0
- package/dist/core/types.d.ts +77 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +7 -0
- package/dist/core/types.js.map +1 -0
- package/dist/daemon/service-manager.d.ts +68 -0
- package/dist/daemon/service-manager.d.ts.map +1 -0
- package/dist/daemon/service-manager.js +303 -0
- package/dist/daemon/service-manager.js.map +1 -0
- package/dist/env/env-classifier.d.ts +14 -0
- package/dist/env/env-classifier.d.ts.map +1 -0
- package/dist/env/env-classifier.js +94 -0
- package/dist/env/env-classifier.js.map +1 -0
- package/dist/env/env-parser.d.ts +13 -0
- package/dist/env/env-parser.d.ts.map +1 -0
- package/dist/env/env-parser.js +33 -0
- package/dist/env/env-parser.js.map +1 -0
- package/dist/env/env-profile-store.d.ts +15 -0
- package/dist/env/env-profile-store.d.ts.map +1 -0
- package/dist/env/env-profile-store.js +35 -0
- package/dist/env/env-profile-store.js.map +1 -0
- package/dist/env/env-reference.d.ts +10 -0
- package/dist/env/env-reference.d.ts.map +1 -0
- package/dist/env/env-reference.js +33 -0
- package/dist/env/env-reference.js.map +1 -0
- package/dist/env/env-resolver.d.ts +18 -0
- package/dist/env/env-resolver.d.ts.map +1 -0
- package/dist/env/env-resolver.js +48 -0
- package/dist/env/env-resolver.js.map +1 -0
- package/dist/env/fs-utils.d.ts +9 -0
- package/dist/env/fs-utils.d.ts.map +1 -0
- package/dist/env/fs-utils.js +59 -0
- package/dist/env/fs-utils.js.map +1 -0
- package/dist/env/secret-backend.d.ts +15 -0
- package/dist/env/secret-backend.d.ts.map +1 -0
- package/dist/env/secret-backend.js +24 -0
- package/dist/env/secret-backend.js.map +1 -0
- package/dist/executor/executor-registry.d.ts +22 -0
- package/dist/executor/executor-registry.d.ts.map +1 -0
- package/dist/executor/executor-registry.js +42 -0
- package/dist/executor/executor-registry.js.map +1 -0
- package/dist/executor/process-launcher.d.ts +26 -0
- package/dist/executor/process-launcher.d.ts.map +1 -0
- package/dist/executor/process-launcher.js +98 -0
- package/dist/executor/process-launcher.js.map +1 -0
- package/dist/executor/secret-file.d.ts +28 -0
- package/dist/executor/secret-file.d.ts.map +1 -0
- package/dist/executor/secret-file.js +127 -0
- package/dist/executor/secret-file.js.map +1 -0
- package/dist/gateway/auth.d.ts +26 -0
- package/dist/gateway/auth.d.ts.map +1 -0
- package/dist/gateway/auth.js +66 -0
- package/dist/gateway/auth.js.map +1 -0
- package/dist/gateway/gateway-client.d.ts +298 -0
- package/dist/gateway/gateway-client.d.ts.map +1 -0
- package/dist/gateway/gateway-client.js +501 -0
- package/dist/gateway/gateway-client.js.map +1 -0
- package/dist/identity/agent-identity.d.ts +29 -0
- package/dist/identity/agent-identity.d.ts.map +1 -0
- package/dist/identity/agent-identity.js +54 -0
- package/dist/identity/agent-identity.js.map +1 -0
- package/dist/identity/did-manager.d.ts +17 -0
- package/dist/identity/did-manager.d.ts.map +1 -0
- package/dist/identity/did-manager.js +29 -0
- package/dist/identity/did-manager.js.map +1 -0
- package/dist/identity/key-manager.d.ts +18 -0
- package/dist/identity/key-manager.d.ts.map +1 -0
- package/dist/identity/key-manager.js +101 -0
- package/dist/identity/key-manager.js.map +1 -0
- package/dist/identity/session-key.d.ts +13 -0
- package/dist/identity/session-key.d.ts.map +1 -0
- package/dist/identity/session-key.js +17 -0
- package/dist/identity/session-key.js.map +1 -0
- package/dist/policy/policy-evaluator.d.ts +63 -0
- package/dist/policy/policy-evaluator.d.ts.map +1 -0
- package/dist/policy/policy-evaluator.js +266 -0
- package/dist/policy/policy-evaluator.js.map +1 -0
- package/dist/policy/policy-loader.d.ts +10 -0
- package/dist/policy/policy-loader.d.ts.map +1 -0
- package/dist/policy/policy-loader.js +71 -0
- package/dist/policy/policy-loader.js.map +1 -0
- package/dist/policy/types.d.ts +21 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +3 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/utils/credential-errors.d.ts +3 -0
- package/dist/utils/credential-errors.d.ts.map +1 -0
- package/dist/utils/credential-errors.js +23 -0
- package/dist/utils/credential-errors.js.map +1 -0
- package/dist/utils/resource-canonicalizer.d.ts +19 -0
- package/dist/utils/resource-canonicalizer.d.ts.map +1 -0
- package/dist/utils/resource-canonicalizer.js +100 -0
- package/dist/utils/resource-canonicalizer.js.map +1 -0
- package/dist/utils/vc-utils.d.ts +23 -0
- package/dist/utils/vc-utils.d.ts.map +1 -0
- package/dist/utils/vc-utils.js +53 -0
- package/dist/utils/vc-utils.js.map +1 -0
- package/dist/wallet/sqlite.d.ts +4 -0
- package/dist/wallet/sqlite.d.ts.map +1 -0
- package/dist/wallet/sqlite.js +158 -0
- package/dist/wallet/sqlite.js.map +1 -0
- package/dist/wallet/vp-builder.d.ts +18 -0
- package/dist/wallet/vp-builder.d.ts.map +1 -0
- package/dist/wallet/vp-builder.js +46 -0
- package/dist/wallet/vp-builder.js.map +1 -0
- package/dist/wallet/wallet.d.ts +58 -0
- package/dist/wallet/wallet.d.ts.map +1 -0
- package/dist/wallet/wallet.js +170 -0
- package/dist/wallet/wallet.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-manager.d.ts","sourceRoot":"","sources":["../../src/daemon/service-manager.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAyBvC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA6BxD;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,OAAO,GAAG,OAAO,GAAG,aAAa;IAWvD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAsCvG;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAmB7F;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAWjC;;OAEG;WACU,OAAO,CAAC,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDrE;;OAEG;WACU,SAAS,CAAC,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BtE;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO;CAM7D"}
|
|
@@ -0,0 +1,303 @@
|
|
|
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.ServiceManager = void 0;
|
|
37
|
+
exports.escapeXml = escapeXml;
|
|
38
|
+
exports.resolveVessBin = resolveVessBin;
|
|
39
|
+
exports.buildMinimalPath = buildMinimalPath;
|
|
40
|
+
/**
|
|
41
|
+
* Cross-platform OS service installer/uninstaller.
|
|
42
|
+
*
|
|
43
|
+
* - macOS: LaunchAgent plist at ~/Library/LaunchAgents/com.vess.agentd.plist
|
|
44
|
+
* - Linux: systemd user unit at ~/.config/systemd/user/vess-agentd.service
|
|
45
|
+
*/
|
|
46
|
+
const fs = __importStar(require("node:fs"));
|
|
47
|
+
const path = __importStar(require("node:path"));
|
|
48
|
+
const os = __importStar(require("node:os"));
|
|
49
|
+
const node_child_process_1 = require("node:child_process");
|
|
50
|
+
const LABEL = 'com.vess.agentd';
|
|
51
|
+
const SYSTEMD_UNIT_NAME = 'vess-agentd.service';
|
|
52
|
+
/**
|
|
53
|
+
* Escape special characters for safe XML embedding.
|
|
54
|
+
*/
|
|
55
|
+
function escapeXml(s) {
|
|
56
|
+
return s
|
|
57
|
+
.replace(/&/g, '&')
|
|
58
|
+
.replace(/</g, '<')
|
|
59
|
+
.replace(/>/g, '>')
|
|
60
|
+
.replace(/"/g, '"')
|
|
61
|
+
.replace(/'/g, ''');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Resolve the absolute path to the `vess` executable.
|
|
65
|
+
* LaunchAgents / systemd units run with a minimal PATH that does not
|
|
66
|
+
* include user-installed package managers (pnpm, npm, etc.), so we
|
|
67
|
+
* must embed the full path at install time.
|
|
68
|
+
*/
|
|
69
|
+
function resolveVessBin() {
|
|
70
|
+
try {
|
|
71
|
+
return (0, node_child_process_1.execFileSync)('which', ['vess'], { encoding: 'utf-8' }).trim();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Fallback 1: derive from process.argv[1] (works when running via the CLI binary)
|
|
75
|
+
if (process.argv[1]) {
|
|
76
|
+
const binDir = path.dirname(process.argv[1]);
|
|
77
|
+
const candidate = path.join(binDir, 'vess');
|
|
78
|
+
if (fs.existsSync(candidate)) {
|
|
79
|
+
return candidate;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Fallback 2: derive from process.execPath (for bundled executables)
|
|
83
|
+
const execBinDir = path.dirname(process.execPath);
|
|
84
|
+
const execCandidate = path.join(execBinDir, 'vess');
|
|
85
|
+
if (fs.existsSync(execCandidate)) {
|
|
86
|
+
return execCandidate;
|
|
87
|
+
}
|
|
88
|
+
throw new Error('Could not locate the vess binary. ' +
|
|
89
|
+
'Please pass the path manually or ensure vess is globally installed.');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build a minimal PATH containing only the directories needed for the daemon:
|
|
94
|
+
* the directory of the vess binary, the directory of the node binary, and
|
|
95
|
+
* standard system directories.
|
|
96
|
+
*/
|
|
97
|
+
function buildMinimalPath(vessBin) {
|
|
98
|
+
const dirs = [];
|
|
99
|
+
// Directory containing the vess binary
|
|
100
|
+
dirs.push(path.dirname(vessBin));
|
|
101
|
+
// Directory containing the real node binary
|
|
102
|
+
try {
|
|
103
|
+
const nodePath = (0, node_child_process_1.execFileSync)('which', ['node'], { encoding: 'utf-8' }).trim();
|
|
104
|
+
dirs.push(path.dirname(nodePath));
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// node not found via which — skip
|
|
108
|
+
}
|
|
109
|
+
// Standard system directories as fallback
|
|
110
|
+
const systemDirs = ['/usr/bin', '/bin', '/usr/sbin', '/sbin'];
|
|
111
|
+
dirs.push(...systemDirs);
|
|
112
|
+
// Deduplicate while preserving order
|
|
113
|
+
const seen = new Set();
|
|
114
|
+
const unique = [];
|
|
115
|
+
for (const d of dirs) {
|
|
116
|
+
if (!seen.has(d)) {
|
|
117
|
+
seen.add(d);
|
|
118
|
+
unique.push(d);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return unique.join(':');
|
|
122
|
+
}
|
|
123
|
+
class ServiceManager {
|
|
124
|
+
/**
|
|
125
|
+
* Detect current platform.
|
|
126
|
+
*/
|
|
127
|
+
static getPlatform() {
|
|
128
|
+
switch (process.platform) {
|
|
129
|
+
case 'darwin':
|
|
130
|
+
return 'macos';
|
|
131
|
+
case 'linux':
|
|
132
|
+
return 'linux';
|
|
133
|
+
default:
|
|
134
|
+
return 'unsupported';
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Generate macOS LaunchAgent plist content.
|
|
139
|
+
* Pure function — all values must be provided explicitly.
|
|
140
|
+
*/
|
|
141
|
+
static generatePlist(opts) {
|
|
142
|
+
const argValues = [opts.vessBin, 'daemon', 'start', '--foreground'];
|
|
143
|
+
if (opts.port) {
|
|
144
|
+
argValues.push('--port', String(opts.port));
|
|
145
|
+
}
|
|
146
|
+
const programArgs = argValues
|
|
147
|
+
.map(v => ` <string>${escapeXml(v)}</string>`)
|
|
148
|
+
.join('\n');
|
|
149
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
150
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
151
|
+
<plist version="1.0">
|
|
152
|
+
<dict>
|
|
153
|
+
<key>Label</key>
|
|
154
|
+
<string>${escapeXml(LABEL)}</string>
|
|
155
|
+
<key>EnvironmentVariables</key>
|
|
156
|
+
<dict>
|
|
157
|
+
<key>PATH</key>
|
|
158
|
+
<string>${escapeXml(opts.envPath)}</string>
|
|
159
|
+
</dict>
|
|
160
|
+
<key>ProgramArguments</key>
|
|
161
|
+
<array>
|
|
162
|
+
${programArgs}
|
|
163
|
+
</array>
|
|
164
|
+
<key>RunAtLoad</key>
|
|
165
|
+
<true/>
|
|
166
|
+
<key>KeepAlive</key>
|
|
167
|
+
<true/>
|
|
168
|
+
<key>StandardOutPath</key>
|
|
169
|
+
<string>${escapeXml(path.join(opts.logDir, 'daemon.log'))}</string>
|
|
170
|
+
<key>StandardErrorPath</key>
|
|
171
|
+
<string>${escapeXml(path.join(opts.logDir, 'daemon.err'))}</string>
|
|
172
|
+
</dict>
|
|
173
|
+
</plist>
|
|
174
|
+
`;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Generate Linux systemd user unit file content.
|
|
178
|
+
* Pure function — all values must be provided explicitly.
|
|
179
|
+
*/
|
|
180
|
+
static generateSystemdUnit(opts) {
|
|
181
|
+
const portArg = opts.port ? ` --port ${opts.port}` : '';
|
|
182
|
+
return `[Unit]
|
|
183
|
+
Description=VESS Agent Daemon
|
|
184
|
+
After=network.target
|
|
185
|
+
|
|
186
|
+
[Service]
|
|
187
|
+
Type=simple
|
|
188
|
+
Environment=PATH=${opts.envPath}
|
|
189
|
+
ExecStart="${opts.vessBin}" daemon start --foreground${portArg}
|
|
190
|
+
Restart=always
|
|
191
|
+
RestartSec=5
|
|
192
|
+
|
|
193
|
+
[Install]
|
|
194
|
+
WantedBy=default.target
|
|
195
|
+
`;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get the path to the service file for the current platform.
|
|
199
|
+
*/
|
|
200
|
+
static getServiceFilePath(homeDir) {
|
|
201
|
+
const platform = ServiceManager.getPlatform();
|
|
202
|
+
if (platform === 'macos') {
|
|
203
|
+
return path.join(homeDir, 'Library', 'LaunchAgents', `${LABEL}.plist`);
|
|
204
|
+
}
|
|
205
|
+
if (platform === 'linux') {
|
|
206
|
+
return path.join(homeDir, '.config', 'systemd', 'user', SYSTEMD_UNIT_NAME);
|
|
207
|
+
}
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Install as OS service.
|
|
212
|
+
*/
|
|
213
|
+
static async install(opts = {}) {
|
|
214
|
+
const platform = ServiceManager.getPlatform();
|
|
215
|
+
const homeDir = opts.homeDir ?? os.homedir();
|
|
216
|
+
if (platform === 'unsupported') {
|
|
217
|
+
throw new Error(`Unsupported platform: ${process.platform}. ` +
|
|
218
|
+
'Service installation is only supported on macOS and Linux.');
|
|
219
|
+
}
|
|
220
|
+
// Resolve vessBin and envPath once, at install time
|
|
221
|
+
const vessBin = resolveVessBin();
|
|
222
|
+
const envPath = buildMinimalPath(vessBin);
|
|
223
|
+
if (platform === 'macos') {
|
|
224
|
+
const launchAgentsDir = path.join(homeDir, 'Library', 'LaunchAgents');
|
|
225
|
+
fs.mkdirSync(launchAgentsDir, { recursive: true });
|
|
226
|
+
const logDir = path.join(homeDir, '.vess', 'logs');
|
|
227
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
228
|
+
const plistPath = path.join(launchAgentsDir, `${LABEL}.plist`);
|
|
229
|
+
const content = ServiceManager.generatePlist({ logDir, port: opts.port, vessBin, envPath });
|
|
230
|
+
fs.writeFileSync(plistPath, content, { encoding: 'utf-8', mode: 0o600 });
|
|
231
|
+
// Load the service (only if not in test with overridden homeDir)
|
|
232
|
+
if (!opts.homeDir) {
|
|
233
|
+
try {
|
|
234
|
+
(0, node_child_process_1.execFileSync)('launchctl', ['load', '-w', plistPath]);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// May fail in CI or restricted environments
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else if (platform === 'linux') {
|
|
242
|
+
const systemdDir = path.join(homeDir, '.config', 'systemd', 'user');
|
|
243
|
+
fs.mkdirSync(systemdDir, { recursive: true });
|
|
244
|
+
const unitPath = path.join(systemdDir, SYSTEMD_UNIT_NAME);
|
|
245
|
+
const content = ServiceManager.generateSystemdUnit({ port: opts.port, vessBin, envPath });
|
|
246
|
+
fs.writeFileSync(unitPath, content, { encoding: 'utf-8', mode: 0o600 });
|
|
247
|
+
// Enable and start the service (only if not in test with overridden homeDir)
|
|
248
|
+
if (!opts.homeDir) {
|
|
249
|
+
try {
|
|
250
|
+
(0, node_child_process_1.execFileSync)('systemctl', ['--user', 'daemon-reload']);
|
|
251
|
+
(0, node_child_process_1.execFileSync)('systemctl', ['--user', 'enable', '--now', SYSTEMD_UNIT_NAME]);
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// May fail in CI or restricted environments
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Uninstall OS service.
|
|
261
|
+
*/
|
|
262
|
+
static async uninstall(opts = {}) {
|
|
263
|
+
const platform = ServiceManager.getPlatform();
|
|
264
|
+
const homeDir = opts.homeDir ?? os.homedir();
|
|
265
|
+
const serviceFile = ServiceManager.getServiceFilePath(homeDir);
|
|
266
|
+
if (!serviceFile || !fs.existsSync(serviceFile)) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
// Stop/unload the service before removing (only if not in test)
|
|
270
|
+
if (!opts.homeDir) {
|
|
271
|
+
try {
|
|
272
|
+
if (platform === 'macos') {
|
|
273
|
+
(0, node_child_process_1.execFileSync)('launchctl', ['unload', '-w', serviceFile]);
|
|
274
|
+
}
|
|
275
|
+
else if (platform === 'linux') {
|
|
276
|
+
(0, node_child_process_1.execFileSync)('systemctl', ['--user', 'disable', '--now', SYSTEMD_UNIT_NAME]);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
// May fail if service is not loaded
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Remove the service file
|
|
284
|
+
try {
|
|
285
|
+
fs.unlinkSync(serviceFile);
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
// Ignore
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Check if installed as OS service.
|
|
293
|
+
*/
|
|
294
|
+
static isInstalled(opts = {}) {
|
|
295
|
+
const homeDir = opts.homeDir ?? os.homedir();
|
|
296
|
+
const serviceFile = ServiceManager.getServiceFilePath(homeDir);
|
|
297
|
+
if (!serviceFile)
|
|
298
|
+
return false;
|
|
299
|
+
return fs.existsSync(serviceFile);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
exports.ServiceManager = ServiceManager;
|
|
303
|
+
//# sourceMappingURL=service-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-manager.js","sourceRoot":"","sources":["../../src/daemon/service-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type SecretMode = 'default' | 'interactive' | 'all-secret' | 'keys';
|
|
2
|
+
export interface ClassifyOptions {
|
|
3
|
+
mode: SecretMode;
|
|
4
|
+
secretKeys?: string[];
|
|
5
|
+
plaintextKeys?: string[];
|
|
6
|
+
promptFn?: (key: string, value: string) => Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
export interface ClassifyResult {
|
|
9
|
+
isSecret: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function isPlaintextByDefault(key: string, value: string): boolean;
|
|
12
|
+
export declare function validateClassifyOptions(options: ClassifyOptions): void;
|
|
13
|
+
export declare function classifyEnvEntry(key: string, value: string, options: ClassifyOptions): Promise<ClassifyResult>;
|
|
14
|
+
//# sourceMappingURL=env-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-classifier.d.ts","sourceRoot":"","sources":["../../src/env/env-classifier.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,CAAA;AAE1E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC5D;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAwCD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAYxE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CA2BtE;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAyBzB"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isPlaintextByDefault = isPlaintextByDefault;
|
|
4
|
+
exports.validateClassifyOptions = validateClassifyOptions;
|
|
5
|
+
exports.classifyEnvEntry = classifyEnvEntry;
|
|
6
|
+
const PLAINTEXT_EXACT_KEYS = new Set([
|
|
7
|
+
'node_env',
|
|
8
|
+
'port',
|
|
9
|
+
'host',
|
|
10
|
+
'hostname',
|
|
11
|
+
'log_level',
|
|
12
|
+
'debug',
|
|
13
|
+
'tz',
|
|
14
|
+
'lang',
|
|
15
|
+
'node_options',
|
|
16
|
+
]);
|
|
17
|
+
const PLAINTEXT_PREFIXES = ['LC_', 'NEXT_PUBLIC_', 'REACT_APP_', 'VITE_'];
|
|
18
|
+
const PLAINTEXT_SUFFIXES = [
|
|
19
|
+
'_PORT',
|
|
20
|
+
'_HOST',
|
|
21
|
+
'_HOSTNAME',
|
|
22
|
+
'_TIMEOUT',
|
|
23
|
+
'_RETRIES',
|
|
24
|
+
'_LIMIT',
|
|
25
|
+
'_COUNT',
|
|
26
|
+
'_SIZE',
|
|
27
|
+
'_MAX',
|
|
28
|
+
'_MIN',
|
|
29
|
+
'_ENABLED',
|
|
30
|
+
'_DISABLED',
|
|
31
|
+
'_VERBOSE',
|
|
32
|
+
'_MODE',
|
|
33
|
+
'_FORMAT',
|
|
34
|
+
'_VERSION',
|
|
35
|
+
'_NAME',
|
|
36
|
+
'_REGION',
|
|
37
|
+
'_DIR',
|
|
38
|
+
'_PATH',
|
|
39
|
+
'_LEVEL',
|
|
40
|
+
];
|
|
41
|
+
function isPlaintextByDefault(key, value) {
|
|
42
|
+
const upper = key.toUpperCase();
|
|
43
|
+
if (PLAINTEXT_EXACT_KEYS.has(key.toLowerCase()))
|
|
44
|
+
return true;
|
|
45
|
+
if (PLAINTEXT_PREFIXES.some((p) => upper.startsWith(p)))
|
|
46
|
+
return true;
|
|
47
|
+
if (PLAINTEXT_SUFFIXES.some((s) => upper.endsWith(s)))
|
|
48
|
+
return true;
|
|
49
|
+
if (/^(true|false|yes|no)$/i.test(value))
|
|
50
|
+
return true;
|
|
51
|
+
if (/^\d+$/.test(value))
|
|
52
|
+
return true;
|
|
53
|
+
if (/^\d+\.\d+\.\d+(-[\w.]+)?$/.test(value))
|
|
54
|
+
return true;
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
function validateClassifyOptions(options) {
|
|
58
|
+
if (options.mode === 'keys' &&
|
|
59
|
+
(!options.secretKeys || options.secretKeys.length === 0)) {
|
|
60
|
+
throw new Error("mode 'keys' requires a non-empty secretKeys array");
|
|
61
|
+
}
|
|
62
|
+
if (options.mode === 'interactive' && !options.promptFn) {
|
|
63
|
+
throw new Error("mode 'interactive' requires a promptFn");
|
|
64
|
+
}
|
|
65
|
+
if (options.secretKeys && options.mode !== 'keys') {
|
|
66
|
+
throw new Error("secretKeys can only be provided when mode is 'keys'");
|
|
67
|
+
}
|
|
68
|
+
if (options.plaintextKeys && options.mode !== 'default') {
|
|
69
|
+
throw new Error("plaintextKeys can only be provided when mode is 'default'");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function classifyEnvEntry(key, value, options) {
|
|
73
|
+
const upper = key.toUpperCase();
|
|
74
|
+
switch (options.mode) {
|
|
75
|
+
case 'all-secret':
|
|
76
|
+
return { isSecret: true };
|
|
77
|
+
case 'keys': {
|
|
78
|
+
const normalizedKeys = options.secretKeys.map(k => k.toUpperCase());
|
|
79
|
+
return { isSecret: normalizedKeys.includes(upper) };
|
|
80
|
+
}
|
|
81
|
+
case 'interactive':
|
|
82
|
+
return { isSecret: await options.promptFn(key, value) };
|
|
83
|
+
case 'default': {
|
|
84
|
+
if (options.plaintextKeys) {
|
|
85
|
+
const normalizedPlaintext = options.plaintextKeys.map(k => k.toUpperCase());
|
|
86
|
+
if (normalizedPlaintext.includes(upper)) {
|
|
87
|
+
return { isSecret: false };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { isSecret: !isPlaintextByDefault(key, value) };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=env-classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-classifier.js","sourceRoot":"","sources":["../../src/env/env-classifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface EnvLine {
|
|
2
|
+
key: string;
|
|
3
|
+
value: string;
|
|
4
|
+
originalLine: string;
|
|
5
|
+
isComment: boolean;
|
|
6
|
+
isEmpty: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Parse .env file content into structured lines.
|
|
10
|
+
* Handles comments, blank lines, quoted values, and `export` prefix.
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseEnvLines(content: string): EnvLine[];
|
|
13
|
+
//# sourceMappingURL=env-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-parser.d.ts","sourceRoot":"","sources":["../../src/env/env-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CA8BxD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseEnvLines = parseEnvLines;
|
|
4
|
+
/**
|
|
5
|
+
* Parse .env file content into structured lines.
|
|
6
|
+
* Handles comments, blank lines, quoted values, and `export` prefix.
|
|
7
|
+
*/
|
|
8
|
+
function parseEnvLines(content) {
|
|
9
|
+
return content.split('\n').map(line => {
|
|
10
|
+
const trimmed = line.trim();
|
|
11
|
+
if (!trimmed) {
|
|
12
|
+
return { key: '', value: '', originalLine: line, isComment: false, isEmpty: true };
|
|
13
|
+
}
|
|
14
|
+
if (trimmed.startsWith('#')) {
|
|
15
|
+
return { key: '', value: '', originalLine: line, isComment: true, isEmpty: false };
|
|
16
|
+
}
|
|
17
|
+
// Strip optional `export ` prefix
|
|
18
|
+
const stripped = trimmed.replace(/^export\s+/, '');
|
|
19
|
+
const eqIndex = stripped.indexOf('=');
|
|
20
|
+
if (eqIndex === -1) {
|
|
21
|
+
return { key: '', value: '', originalLine: line, isComment: false, isEmpty: true };
|
|
22
|
+
}
|
|
23
|
+
const key = stripped.substring(0, eqIndex).trim();
|
|
24
|
+
let value = stripped.substring(eqIndex + 1).trim();
|
|
25
|
+
// Strip surrounding quotes
|
|
26
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
27
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
28
|
+
value = value.slice(1, -1);
|
|
29
|
+
}
|
|
30
|
+
return { key, value, originalLine: line, isComment: false, isEmpty: false };
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=env-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-parser.js","sourceRoot":"","sources":["../../src/env/env-parser.ts"],"names":[],"mappings":";;AAYA,sCA8BC;AAlCD;;;GAGG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAE3B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QACpF,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QACpF,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;QAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QACpF,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;QACjD,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAElD,2BAA2B;QAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC7E,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
export interface ProfileKeyInfo {
|
|
3
|
+
keyName: string;
|
|
4
|
+
backendType: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class EnvProfileStore {
|
|
7
|
+
private readonly db;
|
|
8
|
+
constructor(db: Database.Database);
|
|
9
|
+
addKey(profile: string, keyName: string, backendType?: string): void;
|
|
10
|
+
listKeys(profile: string): ProfileKeyInfo[];
|
|
11
|
+
listProfiles(): string[];
|
|
12
|
+
removeKey(profile: string, keyName: string): void;
|
|
13
|
+
removeProfile(profile: string): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=env-profile-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-profile-store.d.ts","sourceRoot":"","sources":["../../src/env/env-profile-store.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAGrC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,SAAa,GAAG,IAAI;IAUxE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE;IAO3C,YAAY,IAAI,MAAM,EAAE;IAOxB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAKrC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnvProfileStore = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
class EnvProfileStore {
|
|
6
|
+
db;
|
|
7
|
+
constructor(db) {
|
|
8
|
+
this.db = db;
|
|
9
|
+
}
|
|
10
|
+
addKey(profile, keyName, backendType = 'keychain') {
|
|
11
|
+
this.db.prepare(`
|
|
12
|
+
INSERT INTO env_profiles (id, profile_name, key_name, backend_type, imported_at)
|
|
13
|
+
VALUES (?, ?, ?, ?, ?)
|
|
14
|
+
ON CONFLICT(profile_name, key_name) DO UPDATE SET
|
|
15
|
+
backend_type = excluded.backend_type,
|
|
16
|
+
imported_at = excluded.imported_at
|
|
17
|
+
`).run((0, crypto_1.randomUUID)(), profile, keyName, backendType, Date.now());
|
|
18
|
+
}
|
|
19
|
+
listKeys(profile) {
|
|
20
|
+
const rows = this.db.prepare('SELECT key_name, backend_type FROM env_profiles WHERE profile_name = ? ORDER BY key_name').all(profile);
|
|
21
|
+
return rows.map(r => ({ keyName: r.key_name, backendType: r.backend_type }));
|
|
22
|
+
}
|
|
23
|
+
listProfiles() {
|
|
24
|
+
const rows = this.db.prepare('SELECT DISTINCT profile_name FROM env_profiles ORDER BY profile_name').all();
|
|
25
|
+
return rows.map(r => r.profile_name);
|
|
26
|
+
}
|
|
27
|
+
removeKey(profile, keyName) {
|
|
28
|
+
this.db.prepare('DELETE FROM env_profiles WHERE profile_name = ? AND key_name = ?').run(profile, keyName);
|
|
29
|
+
}
|
|
30
|
+
removeProfile(profile) {
|
|
31
|
+
this.db.prepare('DELETE FROM env_profiles WHERE profile_name = ?').run(profile);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.EnvProfileStore = EnvProfileStore;
|
|
35
|
+
//# sourceMappingURL=env-profile-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-profile-store.js","sourceRoot":"","sources":["../../src/env/env-profile-store.ts"],"names":[],"mappings":";;;AACA,mCAAmC;AAOnC,MAAa,eAAe;IACG;IAA7B,YAA6B,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAEtD,MAAM,CAAC,OAAe,EAAE,OAAe,EAAE,WAAW,GAAG,UAAU;QAC/D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;KAMf,CAAC,CAAC,GAAG,CAAC,IAAA,mBAAU,GAAE,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACjE,CAAC;IAED,QAAQ,CAAC,OAAe;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,0FAA0F,CAC3F,CAAC,GAAG,CAAC,OAAO,CAAsD,CAAA;QACnE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,YAAY;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,sEAAsE,CACvE,CAAC,GAAG,EAAqC,CAAA;QAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IACtC,CAAC;IAED,SAAS,CAAC,OAAe,EAAE,OAAe;QACxC,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,kEAAkE,CACnE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;IAED,aAAa,CAAC,OAAe;QAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,iDAAiD,CAClD,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAChB,CAAC;CACF;AAtCD,0CAsCC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface EnvReference {
|
|
2
|
+
scheme: 'vess';
|
|
3
|
+
kind: 'env';
|
|
4
|
+
profile: string;
|
|
5
|
+
key: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseEnvReference(value: string): EnvReference | null;
|
|
8
|
+
export declare function isEnvReference(value: string): boolean;
|
|
9
|
+
export declare function formatEnvReference(profile: string, key: string): string;
|
|
10
|
+
//# sourceMappingURL=env-reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-reference.d.ts","sourceRoot":"","sources":["../../src/env/env-reference.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,KAAK,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ;AAID,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAapE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQvE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseEnvReference = parseEnvReference;
|
|
4
|
+
exports.isEnvReference = isEnvReference;
|
|
5
|
+
exports.formatEnvReference = formatEnvReference;
|
|
6
|
+
const ENV_REF_PATTERN = /^vess:\/\/env\/([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_]+)$/;
|
|
7
|
+
function parseEnvReference(value) {
|
|
8
|
+
const trimmed = value.trim();
|
|
9
|
+
if (!trimmed)
|
|
10
|
+
return null;
|
|
11
|
+
const match = trimmed.match(ENV_REF_PATTERN);
|
|
12
|
+
if (!match)
|
|
13
|
+
return null;
|
|
14
|
+
return {
|
|
15
|
+
scheme: 'vess',
|
|
16
|
+
kind: 'env',
|
|
17
|
+
profile: match[1],
|
|
18
|
+
key: match[2],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function isEnvReference(value) {
|
|
22
|
+
return ENV_REF_PATTERN.test(value.trim());
|
|
23
|
+
}
|
|
24
|
+
function formatEnvReference(profile, key) {
|
|
25
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(profile)) {
|
|
26
|
+
throw new Error(`Invalid profile name: "${profile}". Only alphanumeric, underscore, and hyphen are allowed.`);
|
|
27
|
+
}
|
|
28
|
+
if (!/^[a-zA-Z0-9_]+$/.test(key)) {
|
|
29
|
+
throw new Error(`Invalid key name: "${key}". Only alphanumeric and underscore are allowed.`);
|
|
30
|
+
}
|
|
31
|
+
return `vess://env/${profile}/${key}`;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=env-reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-reference.js","sourceRoot":"","sources":["../../src/env/env-reference.ts"],"names":[],"mappings":";;AASA,8CAaC;AAED,wCAEC;AAED,gDAQC;AA7BD,MAAM,eAAe,GAAG,mDAAmD,CAAA;AAE3E,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAA;IAEvB,OAAO;QACL,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACjB,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;KACd,CAAA;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;AAC3C,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAe,EAAE,GAAW;IAC7D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,2DAA2D,CAAC,CAAA;IAC/G,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,kDAAkD,CAAC,CAAA;IAC9F,CAAC;IACD,OAAO,cAAc,OAAO,IAAI,GAAG,EAAE,CAAA;AACvC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SecretBackend } from './secret-backend';
|
|
2
|
+
export interface ResolveResult {
|
|
3
|
+
env: Record<string, string>;
|
|
4
|
+
warnings: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare class EnvResolver {
|
|
7
|
+
private readonly backend;
|
|
8
|
+
constructor(backend: SecretBackend);
|
|
9
|
+
/**
|
|
10
|
+
* Resolve env content, skipping unresolvable references with warnings.
|
|
11
|
+
* Previously this threw on any resolution failure; now it collects
|
|
12
|
+
* warnings and continues so that a single missing key does not block
|
|
13
|
+
* the entire process.
|
|
14
|
+
*/
|
|
15
|
+
resolveEnvContent(content: string): Promise<Record<string, string>>;
|
|
16
|
+
resolveEnvContentWithWarnings(content: string): Promise<ResolveResult>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=env-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-resolver.d.ts","sourceRoot":"","sources":["../../src/env/env-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,aAAa;IAEnD;;;;;OAKG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAKnE,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CA6B7E"}
|