@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,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuditSync = void 0;
|
|
4
|
+
const audit_dto_mapper_1 = require("./audit-dto-mapper");
|
|
5
|
+
/**
|
|
6
|
+
* Async batch sync of audit events to Gateway (spec §9.2).
|
|
7
|
+
*
|
|
8
|
+
* Transforms agentd's AuditEntry format into the API's CreateAuditEventDto
|
|
9
|
+
* format before sending.
|
|
10
|
+
*/
|
|
11
|
+
/** Default batch size for audit sync */
|
|
12
|
+
const AUDIT_SYNC_DEFAULT_BATCH_SIZE = 100;
|
|
13
|
+
class AuditSync {
|
|
14
|
+
auditLogger;
|
|
15
|
+
gatewayUrl;
|
|
16
|
+
sessionToken;
|
|
17
|
+
constructor(auditLogger, gatewayUrl, sessionToken) {
|
|
18
|
+
this.auditLogger = auditLogger;
|
|
19
|
+
this.gatewayUrl = gatewayUrl;
|
|
20
|
+
this.sessionToken = sessionToken;
|
|
21
|
+
}
|
|
22
|
+
async syncPendingEvents(batchSize = AUDIT_SYNC_DEFAULT_BATCH_SIZE) {
|
|
23
|
+
const pending = this.auditLogger.getPendingEvents(batchSize);
|
|
24
|
+
if (pending.length === 0) {
|
|
25
|
+
return { synced: 0, failed: 0 };
|
|
26
|
+
}
|
|
27
|
+
// Filter out gateway-executed events — they are already recorded server-side
|
|
28
|
+
const gatewayEvents = pending.filter(e => e.executionType === 'gateway');
|
|
29
|
+
const localEvents = pending.filter(e => e.executionType !== 'gateway');
|
|
30
|
+
// Mark gateway events as synced immediately to prevent re-processing
|
|
31
|
+
if (gatewayEvents.length > 0) {
|
|
32
|
+
this.auditLogger.markSynced(gatewayEvents.map(e => e.id));
|
|
33
|
+
console.info(`[AuditSync] Skipped ${gatewayEvents.length} gateway-executed event(s) (already recorded server-side)`);
|
|
34
|
+
}
|
|
35
|
+
if (localEvents.length === 0) {
|
|
36
|
+
return { synced: 0, failed: 0 };
|
|
37
|
+
}
|
|
38
|
+
const events = localEvents.map(e => (0, audit_dto_mapper_1.auditEntryToApiDto)(e));
|
|
39
|
+
try {
|
|
40
|
+
const response = await fetch(`${this.gatewayUrl}/api/v1/audit/batch`, {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
headers: {
|
|
43
|
+
'Content-Type': 'application/json',
|
|
44
|
+
'X-Device-Session-Token': this.sessionToken,
|
|
45
|
+
},
|
|
46
|
+
body: JSON.stringify({ events }),
|
|
47
|
+
signal: AbortSignal.timeout(10000),
|
|
48
|
+
});
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
const body = await response.text().catch(() => '');
|
|
51
|
+
console.warn(`[AuditSync] Audit sync failed: ${response.status} - ${body}`);
|
|
52
|
+
return { synced: 0, failed: localEvents.length };
|
|
53
|
+
}
|
|
54
|
+
const ids = localEvents.map(e => e.id);
|
|
55
|
+
this.auditLogger.markSynced(ids);
|
|
56
|
+
return { synced: localEvents.length, failed: 0 };
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
console.warn(`[AuditSync] Audit sync network error: ${err instanceof Error ? err.message : String(err)}`);
|
|
60
|
+
return { synced: 0, failed: localEvents.length };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.AuditSync = AuditSync;
|
|
65
|
+
//# sourceMappingURL=audit-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-sync.js","sourceRoot":"","sources":["../../src/audit/audit-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { execFileSync as _execFileSync } from 'child_process';
|
|
2
|
+
/** @internal Test-only: override execFileSync for mocking */
|
|
3
|
+
export declare function _setExecFileSync(fn: typeof _execFileSync): void;
|
|
4
|
+
/** Platform-agnostic user-authentication contract. */
|
|
5
|
+
export interface UserAuthenticator {
|
|
6
|
+
/** Check if authentication is available on this platform */
|
|
7
|
+
isAvailable(): Promise<boolean>;
|
|
8
|
+
/** Request user authentication. Throws if denied or unavailable. */
|
|
9
|
+
authenticate(reason: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare class AuthenticationDeniedError extends Error {
|
|
12
|
+
constructor(message?: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class AuthenticationUnavailableError extends Error {
|
|
15
|
+
constructor(message?: string);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* macOS authenticator with Touch ID → system password fallback.
|
|
19
|
+
*
|
|
20
|
+
* 1. If Touch ID hardware is available, uses node-mac-auth (biometric prompt)
|
|
21
|
+
* 2. If not (Mac mini, old MacBook, lid closed), falls back to osascript
|
|
22
|
+
* confirmation dialog (no admin privileges required)
|
|
23
|
+
*
|
|
24
|
+
* Security note (Phase 1): Both Touch ID and password dialog serve as UX
|
|
25
|
+
* gates — they prevent accidental secret exposure by requiring physical
|
|
26
|
+
* user presence. The authentication and Keychain read are separate
|
|
27
|
+
* operations. Phase 2 will merge these into a single native call using
|
|
28
|
+
* Security.framework's kSecAccessControlUserPresence for OS-level protection.
|
|
29
|
+
*/
|
|
30
|
+
export declare class MacOSAuthenticator implements UserAuthenticator {
|
|
31
|
+
isAvailable(): Promise<boolean>;
|
|
32
|
+
authenticate(reason: string): Promise<void>;
|
|
33
|
+
private tryTouchId;
|
|
34
|
+
private promptSystemPassword;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Fallback authenticator for platforms without supported authentication.
|
|
38
|
+
* Always reports unavailable and throws on authenticate().
|
|
39
|
+
*/
|
|
40
|
+
export declare class NoopAuthenticator implements UserAuthenticator {
|
|
41
|
+
isAvailable(): Promise<boolean>;
|
|
42
|
+
authenticate(_reason: string): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a platform-appropriate authenticator.
|
|
46
|
+
* - macOS: Touch ID with system password fallback
|
|
47
|
+
* - Others: NoopAuthenticator (restore not available)
|
|
48
|
+
* @param platform - Override for testing (defaults to process.platform)
|
|
49
|
+
*/
|
|
50
|
+
export declare function createAuthenticator(platform?: string): UserAuthenticator;
|
|
51
|
+
//# sourceMappingURL=user-authenticator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-authenticator.d.ts","sourceRoot":"","sources":["../../src/auth/user-authenticator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,eAAe,CAAA;AAK7D,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,aAAa,GAAG,IAAI,CAE/D;AAMD,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,oEAAoE;IACpE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C;AAMD,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,SAAkC;CAItD;AAED,qBAAa,8BAA+B,SAAQ,KAAK;gBAC3C,OAAO,SAA0D;CAI9E;AAMD;;;;;;;;;;;;GAYG;AACH,qBAAa,kBAAmB,YAAW,iBAAiB;IACpD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQnC,UAAU;IAWxB,OAAO,CAAC,oBAAoB;CAqB7B;AAMD;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,iBAAiB;IACnD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGnD;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,MAAyB,GAAG,iBAAiB,CAK1F"}
|
|
@@ -0,0 +1,155 @@
|
|
|
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.NoopAuthenticator = exports.MacOSAuthenticator = exports.AuthenticationUnavailableError = exports.AuthenticationDeniedError = void 0;
|
|
37
|
+
exports._setExecFileSync = _setExecFileSync;
|
|
38
|
+
exports.createAuthenticator = createAuthenticator;
|
|
39
|
+
const child_process_1 = require("child_process");
|
|
40
|
+
// Indirection for testability — tests can swap this via _setExecFileSync
|
|
41
|
+
let execFileSyncFn = child_process_1.execFileSync;
|
|
42
|
+
/** @internal Test-only: override execFileSync for mocking */
|
|
43
|
+
function _setExecFileSync(fn) {
|
|
44
|
+
execFileSyncFn = fn;
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Error types
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
class AuthenticationDeniedError extends Error {
|
|
50
|
+
constructor(message = 'Authentication denied by user') {
|
|
51
|
+
super(message);
|
|
52
|
+
this.name = 'AuthenticationDeniedError';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.AuthenticationDeniedError = AuthenticationDeniedError;
|
|
56
|
+
class AuthenticationUnavailableError extends Error {
|
|
57
|
+
constructor(message = 'User authentication is not available on this platform') {
|
|
58
|
+
super(message);
|
|
59
|
+
this.name = 'AuthenticationUnavailableError';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.AuthenticationUnavailableError = AuthenticationUnavailableError;
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// MacOSAuthenticator
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
/**
|
|
67
|
+
* macOS authenticator with Touch ID → system password fallback.
|
|
68
|
+
*
|
|
69
|
+
* 1. If Touch ID hardware is available, uses node-mac-auth (biometric prompt)
|
|
70
|
+
* 2. If not (Mac mini, old MacBook, lid closed), falls back to osascript
|
|
71
|
+
* confirmation dialog (no admin privileges required)
|
|
72
|
+
*
|
|
73
|
+
* Security note (Phase 1): Both Touch ID and password dialog serve as UX
|
|
74
|
+
* gates — they prevent accidental secret exposure by requiring physical
|
|
75
|
+
* user presence. The authentication and Keychain read are separate
|
|
76
|
+
* operations. Phase 2 will merge these into a single native call using
|
|
77
|
+
* Security.framework's kSecAccessControlUserPresence for OS-level protection.
|
|
78
|
+
*/
|
|
79
|
+
class MacOSAuthenticator {
|
|
80
|
+
async isAvailable() {
|
|
81
|
+
return true; // macOS always has at least password-based auth
|
|
82
|
+
}
|
|
83
|
+
async authenticate(reason) {
|
|
84
|
+
// Try Touch ID first
|
|
85
|
+
if (await this.tryTouchId(reason))
|
|
86
|
+
return;
|
|
87
|
+
// Fall back to confirmation dialog via osascript
|
|
88
|
+
this.promptSystemPassword(reason);
|
|
89
|
+
}
|
|
90
|
+
async tryTouchId(reason) {
|
|
91
|
+
try {
|
|
92
|
+
const mod = await Promise.resolve().then(() => __importStar(require('node-mac-auth')));
|
|
93
|
+
if (!mod.canPromptTouchID())
|
|
94
|
+
return false;
|
|
95
|
+
await mod.promptTouchID({ reason });
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
promptSystemPassword(reason) {
|
|
103
|
+
// osascript presents a native macOS confirmation dialog that cannot be
|
|
104
|
+
// bypassed by a non-interactive process. The dialog blocks until the user
|
|
105
|
+
// clicks OK or Cancel. No admin privileges are required — this is purely
|
|
106
|
+
// a UX gate to confirm user presence.
|
|
107
|
+
// Using execFileSync with arguments array to prevent shell injection.
|
|
108
|
+
const script = `display dialog ${JSON.stringify(reason)} ` +
|
|
109
|
+
`buttons {"Cancel", "OK"} default button "OK" ` +
|
|
110
|
+
`with title "VESS Authentication" ` +
|
|
111
|
+
`with icon caution`;
|
|
112
|
+
try {
|
|
113
|
+
execFileSyncFn('osascript', ['-e', script], {
|
|
114
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
115
|
+
timeout: 120_000, // 2 minute timeout for user response
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
throw new AuthenticationDeniedError('System password authentication denied or cancelled');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.MacOSAuthenticator = MacOSAuthenticator;
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
// NoopAuthenticator
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
/**
|
|
128
|
+
* Fallback authenticator for platforms without supported authentication.
|
|
129
|
+
* Always reports unavailable and throws on authenticate().
|
|
130
|
+
*/
|
|
131
|
+
class NoopAuthenticator {
|
|
132
|
+
async isAvailable() {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
async authenticate(_reason) {
|
|
136
|
+
throw new AuthenticationUnavailableError();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.NoopAuthenticator = NoopAuthenticator;
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
// Factory
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
/**
|
|
144
|
+
* Create a platform-appropriate authenticator.
|
|
145
|
+
* - macOS: Touch ID with system password fallback
|
|
146
|
+
* - Others: NoopAuthenticator (restore not available)
|
|
147
|
+
* @param platform - Override for testing (defaults to process.platform)
|
|
148
|
+
*/
|
|
149
|
+
function createAuthenticator(platform = process.platform) {
|
|
150
|
+
if (platform === 'darwin') {
|
|
151
|
+
return new MacOSAuthenticator();
|
|
152
|
+
}
|
|
153
|
+
return new NoopAuthenticator();
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=user-authenticator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-authenticator.js","sourceRoot":"","sources":["../../src/auth/user-authenticator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EnvProfileStore } from '../env/env-profile-store';
|
|
2
|
+
import type Database from 'better-sqlite3';
|
|
3
|
+
export interface ProfileStoreContext {
|
|
4
|
+
db: Database.Database;
|
|
5
|
+
profileStore: EnvProfileStore;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Open the profile store database with standard initialization.
|
|
9
|
+
* Returns null if VESS is not initialized (ensureInitialized fails).
|
|
10
|
+
*/
|
|
11
|
+
export declare function openProfileStore(command: string): ProfileStoreContext | null;
|
|
12
|
+
//# sourceMappingURL=cli-db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-db.d.ts","sourceRoot":"","sources":["../../src/cli/cli-db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAE1C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAA;IACrB,YAAY,EAAE,eAAe,CAAA;CAC9B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAM5E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openProfileStore = openProfileStore;
|
|
4
|
+
const paths_1 = require("../config/paths");
|
|
5
|
+
const sqlite_1 = require("../wallet/sqlite");
|
|
6
|
+
const env_profile_store_1 = require("../env/env-profile-store");
|
|
7
|
+
const init_guard_1 = require("./init-guard");
|
|
8
|
+
/**
|
|
9
|
+
* Open the profile store database with standard initialization.
|
|
10
|
+
* Returns null if VESS is not initialized (ensureInitialized fails).
|
|
11
|
+
*/
|
|
12
|
+
function openProfileStore(command) {
|
|
13
|
+
const paths = new paths_1.VessPaths();
|
|
14
|
+
if (!(0, init_guard_1.ensureInitialized)(paths, command))
|
|
15
|
+
return null;
|
|
16
|
+
const db = (0, sqlite_1.openDatabase)(paths.walletDb);
|
|
17
|
+
(0, sqlite_1.initSchema)(db);
|
|
18
|
+
return { db, profileStore: new env_profile_store_1.EnvProfileStore(db) };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=cli-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-db.js","sourceRoot":"","sources":["../../src/cli/cli-db.ts"],"names":[],"mappings":";;AAeA,4CAMC;AArBD,2CAA2C;AAC3C,6CAA2D;AAC3D,gEAA0D;AAC1D,6CAAgD;AAQhD;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,IAAI,iBAAS,EAAE,CAAA;IAC7B,IAAI,CAAC,IAAA,8BAAiB,EAAC,KAAK,EAAE,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IACnD,MAAM,EAAE,GAAG,IAAA,qBAAY,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACvC,IAAA,mBAAU,EAAC,EAAE,CAAC,CAAA;IACd,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,mCAAe,CAAC,EAAE,CAAC,EAAE,CAAA;AACtD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as readline from 'node:readline/promises';
|
|
2
|
+
/** Log to stderr (used by all CLI commands) */
|
|
3
|
+
export declare function log(msg: string): void;
|
|
4
|
+
/** Open a URL in the default browser (fire-and-forget). Only http(s) URLs are allowed. */
|
|
5
|
+
export declare function openBrowser(url: string): void;
|
|
6
|
+
/**
|
|
7
|
+
* If running in a TTY, listen for a single Enter keypress and open the
|
|
8
|
+
* given URL in the default browser. Returns a cleanup function that
|
|
9
|
+
* removes the listener, or `undefined` when not in a TTY.
|
|
10
|
+
*/
|
|
11
|
+
export declare function promptEnterToOpenBrowser(url: string): (() => void) | undefined;
|
|
12
|
+
/** Prompt yes/no with default yes. Returns false on 'n', EOF, or error. */
|
|
13
|
+
export declare function promptYesNo(rl: readline.Interface, question: string): Promise<boolean>;
|
|
14
|
+
//# sourceMappingURL=cli-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../../src/cli/cli-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAGlD,+CAA+C;AAC/C,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAErC;AAED,0FAA0F;AAC1F,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ7C;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAoB9E;AAED,2EAA2E;AAC3E,wBAAsB,WAAW,CAC/B,EAAE,EAAE,QAAQ,CAAC,SAAS,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAOlB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.log = log;
|
|
4
|
+
exports.openBrowser = openBrowser;
|
|
5
|
+
exports.promptEnterToOpenBrowser = promptEnterToOpenBrowser;
|
|
6
|
+
exports.promptYesNo = promptYesNo;
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
/** Log to stderr (used by all CLI commands) */
|
|
9
|
+
function log(msg) {
|
|
10
|
+
process.stderr.write(`${msg}\n`);
|
|
11
|
+
}
|
|
12
|
+
/** Open a URL in the default browser (fire-and-forget). Only http(s) URLs are allowed. */
|
|
13
|
+
function openBrowser(url) {
|
|
14
|
+
if (!/^https?:\/\//i.test(url))
|
|
15
|
+
return;
|
|
16
|
+
if (process.platform === 'win32') {
|
|
17
|
+
(0, node_child_process_1.execFile)('cmd', ['/c', 'start', '', url], () => { });
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const cmd = process.platform === 'darwin' ? 'open' : 'xdg-open';
|
|
21
|
+
(0, node_child_process_1.execFile)(cmd, [url], () => { });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* If running in a TTY, listen for a single Enter keypress and open the
|
|
26
|
+
* given URL in the default browser. Returns a cleanup function that
|
|
27
|
+
* removes the listener, or `undefined` when not in a TTY.
|
|
28
|
+
*/
|
|
29
|
+
function promptEnterToOpenBrowser(url) {
|
|
30
|
+
if (!process.stdin.isTTY)
|
|
31
|
+
return undefined;
|
|
32
|
+
log('Press Enter to open in browser (or copy the URL above)');
|
|
33
|
+
const wasPaused = process.stdin.isPaused();
|
|
34
|
+
process.stdin.resume();
|
|
35
|
+
const onData = () => {
|
|
36
|
+
openBrowser(url);
|
|
37
|
+
cleanup();
|
|
38
|
+
};
|
|
39
|
+
const cleanup = () => {
|
|
40
|
+
process.stdin.removeListener('data', onData);
|
|
41
|
+
if (wasPaused)
|
|
42
|
+
process.stdin.pause();
|
|
43
|
+
};
|
|
44
|
+
process.stdin.once('data', onData);
|
|
45
|
+
return cleanup;
|
|
46
|
+
}
|
|
47
|
+
/** Prompt yes/no with default yes. Returns false on 'n', EOF, or error. */
|
|
48
|
+
async function promptYesNo(rl, question) {
|
|
49
|
+
try {
|
|
50
|
+
const answer = await rl.question(`${question} (Y/n): `);
|
|
51
|
+
return answer.trim().toLowerCase() !== 'n';
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false; // EOF or error — treat as decline
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=cli-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../../src/cli/cli-utils.ts"],"names":[],"mappings":";;AAIA,kBAEC;AAGD,kCAQC;AAOD,4DAoBC;AAGD,kCAUC;AAxDD,2DAA6C;AAE7C,+CAA+C;AAC/C,SAAgB,GAAG,CAAC,GAAW;IAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,0FAA0F;AAC1F,SAAgB,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAM;IACtC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,IAAA,6BAAQ,EAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACrD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAA;QAC/D,IAAA,6BAAQ,EAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAChC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,wBAAwB,CAAC,GAAW;IAClD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAE1C,GAAG,CAAC,wDAAwD,CAAC,CAAA;IAE7D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC1C,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;IAEtB,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,WAAW,CAAC,GAAG,CAAC,CAAA;QAChB,OAAO,EAAE,CAAA;IACX,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5C,IAAI,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACtC,CAAC,CAAA;IAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,2EAA2E;AACpE,KAAK,UAAU,WAAW,CAC/B,EAAsB,EACtB,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,UAAU,CAAC,CAAA;QACvD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA,CAAC,kCAAkC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write PID to file. Creates parent directories if needed.
|
|
3
|
+
*/
|
|
4
|
+
export declare function writePidFile(filePath: string, pid: number): void;
|
|
5
|
+
/**
|
|
6
|
+
* Read PID from file. Returns null if file doesn't exist or contains invalid data.
|
|
7
|
+
*/
|
|
8
|
+
export declare function readPidFile(filePath: string): number | null;
|
|
9
|
+
/**
|
|
10
|
+
* Write port number to file. Creates parent directories if needed.
|
|
11
|
+
*/
|
|
12
|
+
export declare function writePortFile(filePath: string, port: number): void;
|
|
13
|
+
/**
|
|
14
|
+
* Read port from file. Returns null if file doesn't exist or contains invalid data.
|
|
15
|
+
*/
|
|
16
|
+
export declare function readPortFile(filePath: string): number | null;
|
|
17
|
+
/**
|
|
18
|
+
* Remove PID file. No-op if file doesn't exist.
|
|
19
|
+
*/
|
|
20
|
+
export declare function removePidFile(filePath: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Remove port file. No-op if file doesn't exist.
|
|
23
|
+
*/
|
|
24
|
+
export declare function removePortFile(filePath: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Check if a process with the given PID is running.
|
|
27
|
+
* Uses kill(pid, 0) which checks existence without sending a signal.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isDaemonRunning(pid: number): boolean;
|
|
30
|
+
//# sourceMappingURL=daemon-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-utils.d.ts","sourceRoot":"","sources":["../../src/cli/daemon-utils.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQpD"}
|
|
@@ -0,0 +1,131 @@
|
|
|
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.writePidFile = writePidFile;
|
|
37
|
+
exports.readPidFile = readPidFile;
|
|
38
|
+
exports.writePortFile = writePortFile;
|
|
39
|
+
exports.readPortFile = readPortFile;
|
|
40
|
+
exports.removePidFile = removePidFile;
|
|
41
|
+
exports.removePortFile = removePortFile;
|
|
42
|
+
exports.isDaemonRunning = isDaemonRunning;
|
|
43
|
+
/**
|
|
44
|
+
* Daemon utility functions for PID/port file management.
|
|
45
|
+
*/
|
|
46
|
+
const fs = __importStar(require("node:fs"));
|
|
47
|
+
const path = __importStar(require("node:path"));
|
|
48
|
+
/**
|
|
49
|
+
* Write PID to file. Creates parent directories if needed.
|
|
50
|
+
*/
|
|
51
|
+
function writePidFile(filePath, pid) {
|
|
52
|
+
const dir = path.dirname(filePath);
|
|
53
|
+
if (!fs.existsSync(dir)) {
|
|
54
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
55
|
+
}
|
|
56
|
+
fs.writeFileSync(filePath, String(pid), { encoding: 'utf-8', mode: 0o600 });
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Read PID from file. Returns null if file doesn't exist or contains invalid data.
|
|
60
|
+
*/
|
|
61
|
+
function readPidFile(filePath) {
|
|
62
|
+
try {
|
|
63
|
+
const content = fs.readFileSync(filePath, 'utf-8').trim();
|
|
64
|
+
const pid = parseInt(content, 10);
|
|
65
|
+
return Number.isFinite(pid) && pid > 0 ? pid : null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Write port number to file. Creates parent directories if needed.
|
|
73
|
+
*/
|
|
74
|
+
function writePortFile(filePath, port) {
|
|
75
|
+
const dir = path.dirname(filePath);
|
|
76
|
+
if (!fs.existsSync(dir)) {
|
|
77
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
78
|
+
}
|
|
79
|
+
fs.writeFileSync(filePath, String(port), { encoding: 'utf-8', mode: 0o600 });
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Read port from file. Returns null if file doesn't exist or contains invalid data.
|
|
83
|
+
*/
|
|
84
|
+
function readPortFile(filePath) {
|
|
85
|
+
try {
|
|
86
|
+
const content = fs.readFileSync(filePath, 'utf-8').trim();
|
|
87
|
+
const port = parseInt(content, 10);
|
|
88
|
+
return Number.isFinite(port) && port > 0 ? port : null;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Remove PID file. No-op if file doesn't exist.
|
|
96
|
+
*/
|
|
97
|
+
function removePidFile(filePath) {
|
|
98
|
+
try {
|
|
99
|
+
fs.unlinkSync(filePath);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Ignore errors (file may not exist)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Remove port file. No-op if file doesn't exist.
|
|
107
|
+
*/
|
|
108
|
+
function removePortFile(filePath) {
|
|
109
|
+
try {
|
|
110
|
+
fs.unlinkSync(filePath);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Ignore errors (file may not exist)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if a process with the given PID is running.
|
|
118
|
+
* Uses kill(pid, 0) which checks existence without sending a signal.
|
|
119
|
+
*/
|
|
120
|
+
function isDaemonRunning(pid) {
|
|
121
|
+
if (pid <= 0)
|
|
122
|
+
return false;
|
|
123
|
+
try {
|
|
124
|
+
process.kill(pid, 0);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=daemon-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-utils.js","sourceRoot":"","sources":["../../src/cli/daemon-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start the daemon in foreground mode.
|
|
3
|
+
*/
|
|
4
|
+
export declare function runDaemonStart(opts: {
|
|
5
|
+
port?: number;
|
|
6
|
+
host?: string;
|
|
7
|
+
foreground?: boolean;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Stop the running daemon.
|
|
11
|
+
*/
|
|
12
|
+
export declare function runDaemonStop(): void;
|
|
13
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"AA0CA;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8HhB;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CA8BpC"}
|