@zincapp/zn-vault-agent 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +701 -0
- package/deploy/logrotate.d/zn-vault-agent +14 -0
- package/deploy/systemd/zn-vault-agent.service +75 -0
- package/dist/commands/certs.d.ts +3 -0
- package/dist/commands/certs.d.ts.map +1 -0
- package/dist/commands/certs.js +369 -0
- package/dist/commands/certs.js.map +1 -0
- package/dist/commands/exec.d.ts +3 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +193 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +234 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/secrets.d.ts +3 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +445 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/setup.d.ts +9 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +346 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +3 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +113 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +85 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +3 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +126 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +104 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +338 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +164 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +299 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/deployer.d.ts +22 -0
- package/dist/lib/deployer.d.ts.map +1 -0
- package/dist/lib/deployer.js +407 -0
- package/dist/lib/deployer.js.map +1 -0
- package/dist/lib/health.d.ts +68 -0
- package/dist/lib/health.d.ts.map +1 -0
- package/dist/lib/health.js +216 -0
- package/dist/lib/health.js.map +1 -0
- package/dist/lib/logger.d.ts +38 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +161 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/metrics.d.ts +50 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +273 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/secret-deployer.d.ts +22 -0
- package/dist/lib/secret-deployer.d.ts.map +1 -0
- package/dist/lib/secret-deployer.js +201 -0
- package/dist/lib/secret-deployer.js.map +1 -0
- package/dist/lib/validation.d.ts +25 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +257 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/websocket.d.ts +74 -0
- package/dist/lib/websocket.d.ts.map +1 -0
- package/dist/lib/websocket.js +441 -0
- package/dist/lib/websocket.js.map +1 -0
- package/dist/services/api-key-renewal.d.ts +13 -0
- package/dist/services/api-key-renewal.d.ts.map +1 -0
- package/dist/services/api-key-renewal.js +204 -0
- package/dist/services/api-key-renewal.js.map +1 -0
- package/dist/services/npm-auto-update.d.ts +60 -0
- package/dist/services/npm-auto-update.d.ts.map +1 -0
- package/dist/services/npm-auto-update.js +245 -0
- package/dist/services/npm-auto-update.js.map +1 -0
- package/dist/types/update.d.ts +19 -0
- package/dist/types/update.d.ts.map +1 -0
- package/dist/types/update.js +7 -0
- package/dist/types/update.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Certificate target configuration
|
|
3
|
+
*/
|
|
4
|
+
export interface CertTarget {
|
|
5
|
+
/** Certificate ID in vault */
|
|
6
|
+
certId: string;
|
|
7
|
+
/** Human-readable name */
|
|
8
|
+
name: string;
|
|
9
|
+
/** Output paths for certificate components */
|
|
10
|
+
outputs: {
|
|
11
|
+
/** Combined cert+key (for HAProxy) */
|
|
12
|
+
combined?: string;
|
|
13
|
+
/** Certificate only */
|
|
14
|
+
cert?: string;
|
|
15
|
+
/** Private key only */
|
|
16
|
+
key?: string;
|
|
17
|
+
/** CA chain */
|
|
18
|
+
chain?: string;
|
|
19
|
+
/** Full chain (cert + chain) */
|
|
20
|
+
fullchain?: string;
|
|
21
|
+
};
|
|
22
|
+
/** File ownership (user:group) */
|
|
23
|
+
owner?: string;
|
|
24
|
+
/** File permissions (e.g., "0640") */
|
|
25
|
+
mode?: string;
|
|
26
|
+
/** Command to run after cert update */
|
|
27
|
+
reloadCmd?: string;
|
|
28
|
+
/** Health check command (must return 0 for success) */
|
|
29
|
+
healthCheckCmd?: string;
|
|
30
|
+
/** Last known fingerprint */
|
|
31
|
+
lastFingerprint?: string;
|
|
32
|
+
/** Last sync timestamp */
|
|
33
|
+
lastSync?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Secret target configuration
|
|
37
|
+
*/
|
|
38
|
+
export interface SecretTarget {
|
|
39
|
+
/** Secret ID or alias in vault (e.g., "alias:db/credentials") */
|
|
40
|
+
secretId: string;
|
|
41
|
+
/** Human-readable name */
|
|
42
|
+
name: string;
|
|
43
|
+
/** Output format */
|
|
44
|
+
format: 'env' | 'json' | 'yaml' | 'raw' | 'template';
|
|
45
|
+
/** Output file path */
|
|
46
|
+
output: string;
|
|
47
|
+
/** For 'raw' format: which key from the secret data to extract */
|
|
48
|
+
key?: string;
|
|
49
|
+
/** For 'template' format: path to template file */
|
|
50
|
+
templatePath?: string;
|
|
51
|
+
/** For 'env' format: prefix for variable names */
|
|
52
|
+
envPrefix?: string;
|
|
53
|
+
/** File ownership (user:group) */
|
|
54
|
+
owner?: string;
|
|
55
|
+
/** File permissions (e.g., "0600") */
|
|
56
|
+
mode?: string;
|
|
57
|
+
/** Command to run after secret update */
|
|
58
|
+
reloadCmd?: string;
|
|
59
|
+
/** Last known version */
|
|
60
|
+
lastVersion?: number;
|
|
61
|
+
/** Last sync timestamp */
|
|
62
|
+
lastSync?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Agent configuration
|
|
66
|
+
*/
|
|
67
|
+
export interface AgentConfig {
|
|
68
|
+
/** Vault server URL */
|
|
69
|
+
vaultUrl: string;
|
|
70
|
+
/** Tenant ID */
|
|
71
|
+
tenantId: string;
|
|
72
|
+
/** Authentication */
|
|
73
|
+
auth: {
|
|
74
|
+
/** API key (preferred) */
|
|
75
|
+
apiKey?: string;
|
|
76
|
+
/** Or username/password */
|
|
77
|
+
username?: string;
|
|
78
|
+
password?: string;
|
|
79
|
+
};
|
|
80
|
+
/** Skip TLS verification */
|
|
81
|
+
insecure?: boolean;
|
|
82
|
+
/** Certificate targets */
|
|
83
|
+
targets: CertTarget[];
|
|
84
|
+
/** Secret targets */
|
|
85
|
+
secretTargets?: SecretTarget[];
|
|
86
|
+
/** Global reload command (if not set per-target) */
|
|
87
|
+
globalReloadCmd?: string;
|
|
88
|
+
/** Polling interval in seconds (fallback if WebSocket disconnects) */
|
|
89
|
+
pollInterval?: number;
|
|
90
|
+
/** Enable verbose logging */
|
|
91
|
+
verbose?: boolean;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Load configuration from file or user config, with environment variable overrides
|
|
95
|
+
*
|
|
96
|
+
* Environment variables:
|
|
97
|
+
* - ZNVAULT_URL: Override vault URL
|
|
98
|
+
* - ZNVAULT_TENANT_ID: Override tenant ID
|
|
99
|
+
* - ZNVAULT_API_KEY: Override API key (preferred over config file)
|
|
100
|
+
* - ZNVAULT_USERNAME: Override username
|
|
101
|
+
* - ZNVAULT_PASSWORD: Override password (preferred over config file)
|
|
102
|
+
* - ZNVAULT_INSECURE: Set to "true" to skip TLS verification
|
|
103
|
+
*/
|
|
104
|
+
export declare function loadConfig(): AgentConfig;
|
|
105
|
+
/**
|
|
106
|
+
* Save configuration
|
|
107
|
+
*/
|
|
108
|
+
export declare function saveConfig(config: AgentConfig): void;
|
|
109
|
+
/**
|
|
110
|
+
* Get a specific config value
|
|
111
|
+
*/
|
|
112
|
+
export declare function getConfig<K extends keyof AgentConfig>(key: K): AgentConfig[K];
|
|
113
|
+
/**
|
|
114
|
+
* Set a specific config value
|
|
115
|
+
*/
|
|
116
|
+
export declare function setConfig<K extends keyof AgentConfig>(key: K, value: AgentConfig[K]): void;
|
|
117
|
+
/**
|
|
118
|
+
* Check if agent is configured
|
|
119
|
+
* Considers both config file and environment variables
|
|
120
|
+
*/
|
|
121
|
+
export declare function isConfigured(): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Get config file path for display
|
|
124
|
+
*/
|
|
125
|
+
export declare function getConfigPath(): string;
|
|
126
|
+
/**
|
|
127
|
+
* Add a certificate target
|
|
128
|
+
*/
|
|
129
|
+
export declare function addTarget(target: CertTarget): void;
|
|
130
|
+
/**
|
|
131
|
+
* Remove a certificate target
|
|
132
|
+
*/
|
|
133
|
+
export declare function removeTarget(certIdOrName: string): boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Get all targets
|
|
136
|
+
*/
|
|
137
|
+
export declare function getTargets(): CertTarget[];
|
|
138
|
+
/**
|
|
139
|
+
* Update target fingerprint after successful sync
|
|
140
|
+
*/
|
|
141
|
+
export declare function updateTargetFingerprint(certId: string, fingerprint: string): void;
|
|
142
|
+
/**
|
|
143
|
+
* Add a secret target
|
|
144
|
+
*/
|
|
145
|
+
export declare function addSecretTarget(target: SecretTarget): void;
|
|
146
|
+
/**
|
|
147
|
+
* Remove a secret target
|
|
148
|
+
*/
|
|
149
|
+
export declare function removeSecretTarget(secretIdOrName: string): boolean;
|
|
150
|
+
/**
|
|
151
|
+
* Get all secret targets
|
|
152
|
+
*/
|
|
153
|
+
export declare function getSecretTargets(): SecretTarget[];
|
|
154
|
+
/**
|
|
155
|
+
* Update secret target version after successful sync
|
|
156
|
+
*/
|
|
157
|
+
export declare function updateSecretTargetVersion(secretId: string, version: number): void;
|
|
158
|
+
/**
|
|
159
|
+
* Update API key in config file after rotation
|
|
160
|
+
* This directly modifies the config file without going through loadConfig
|
|
161
|
+
* to avoid environment variable overrides being persisted.
|
|
162
|
+
*/
|
|
163
|
+
export declare function updateApiKey(newKey: string): void;
|
|
164
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import Conf from 'conf';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { configLogger as log } from './logger.js';
|
|
5
|
+
// Default config location - computed dynamically to support test isolation
|
|
6
|
+
function getConfigDir() {
|
|
7
|
+
return process.env.ZNVAULT_AGENT_CONFIG_DIR || '/etc/zn-vault-agent';
|
|
8
|
+
}
|
|
9
|
+
function getConfigFile() {
|
|
10
|
+
return path.join(getConfigDir(), 'config.json');
|
|
11
|
+
}
|
|
12
|
+
// Use Conf for user-level config (development), file for system-level (production)
|
|
13
|
+
const userConfig = new Conf({
|
|
14
|
+
projectName: 'zn-vault-agent',
|
|
15
|
+
defaults: {
|
|
16
|
+
vaultUrl: '',
|
|
17
|
+
tenantId: '',
|
|
18
|
+
auth: {},
|
|
19
|
+
targets: [],
|
|
20
|
+
secretTargets: [],
|
|
21
|
+
pollInterval: 3600,
|
|
22
|
+
verbose: false,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* Load configuration from file or user config, with environment variable overrides
|
|
27
|
+
*
|
|
28
|
+
* Environment variables:
|
|
29
|
+
* - ZNVAULT_URL: Override vault URL
|
|
30
|
+
* - ZNVAULT_TENANT_ID: Override tenant ID
|
|
31
|
+
* - ZNVAULT_API_KEY: Override API key (preferred over config file)
|
|
32
|
+
* - ZNVAULT_USERNAME: Override username
|
|
33
|
+
* - ZNVAULT_PASSWORD: Override password (preferred over config file)
|
|
34
|
+
* - ZNVAULT_INSECURE: Set to "true" to skip TLS verification
|
|
35
|
+
*/
|
|
36
|
+
export function loadConfig() {
|
|
37
|
+
let config;
|
|
38
|
+
// Default empty config (used when custom config dir is set but file doesn't exist)
|
|
39
|
+
const emptyConfig = {
|
|
40
|
+
vaultUrl: '',
|
|
41
|
+
tenantId: '',
|
|
42
|
+
auth: {},
|
|
43
|
+
targets: [],
|
|
44
|
+
secretTargets: [],
|
|
45
|
+
pollInterval: 3600,
|
|
46
|
+
verbose: false,
|
|
47
|
+
};
|
|
48
|
+
// Try system config first
|
|
49
|
+
const configFile = getConfigFile();
|
|
50
|
+
if (fs.existsSync(configFile)) {
|
|
51
|
+
try {
|
|
52
|
+
const content = fs.readFileSync(configFile, 'utf-8');
|
|
53
|
+
config = JSON.parse(content);
|
|
54
|
+
log.debug({ path: configFile }, 'Loaded system config');
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
log.error({ err, path: configFile }, 'Failed to load system config');
|
|
58
|
+
// If custom config dir is set, use empty config instead of userConfig
|
|
59
|
+
// This ensures test isolation and custom deployments work correctly
|
|
60
|
+
config = process.env.ZNVAULT_AGENT_CONFIG_DIR ? emptyConfig : userConfig.store;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (process.env.ZNVAULT_AGENT_CONFIG_DIR) {
|
|
64
|
+
// Custom config dir is set but file doesn't exist yet - use empty config
|
|
65
|
+
// Don't fall back to userConfig to ensure isolation
|
|
66
|
+
config = emptyConfig;
|
|
67
|
+
log.debug({ path: configFile }, 'Using empty config for custom config dir');
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Fall back to user config
|
|
71
|
+
config = userConfig.store;
|
|
72
|
+
log.debug({ path: userConfig.path }, 'Loaded user config');
|
|
73
|
+
}
|
|
74
|
+
// Apply environment variable overrides
|
|
75
|
+
if (process.env.ZNVAULT_URL) {
|
|
76
|
+
config.vaultUrl = process.env.ZNVAULT_URL;
|
|
77
|
+
}
|
|
78
|
+
if (process.env.ZNVAULT_TENANT_ID) {
|
|
79
|
+
config.tenantId = process.env.ZNVAULT_TENANT_ID;
|
|
80
|
+
}
|
|
81
|
+
if (process.env.ZNVAULT_API_KEY) {
|
|
82
|
+
config.auth = config.auth || {};
|
|
83
|
+
config.auth.apiKey = process.env.ZNVAULT_API_KEY;
|
|
84
|
+
}
|
|
85
|
+
if (process.env.ZNVAULT_USERNAME) {
|
|
86
|
+
config.auth = config.auth || {};
|
|
87
|
+
config.auth.username = process.env.ZNVAULT_USERNAME;
|
|
88
|
+
}
|
|
89
|
+
if (process.env.ZNVAULT_PASSWORD) {
|
|
90
|
+
config.auth = config.auth || {};
|
|
91
|
+
config.auth.password = process.env.ZNVAULT_PASSWORD;
|
|
92
|
+
}
|
|
93
|
+
if (process.env.ZNVAULT_INSECURE === 'true') {
|
|
94
|
+
config.insecure = true;
|
|
95
|
+
}
|
|
96
|
+
return config;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Save configuration
|
|
100
|
+
*/
|
|
101
|
+
export function saveConfig(config) {
|
|
102
|
+
const configDir = getConfigDir();
|
|
103
|
+
const configFile = getConfigFile();
|
|
104
|
+
// If ZNVAULT_AGENT_CONFIG_DIR is set, always use that directory
|
|
105
|
+
// This allows tests and custom deployments to override the default behavior
|
|
106
|
+
if (process.env.ZNVAULT_AGENT_CONFIG_DIR) {
|
|
107
|
+
if (!fs.existsSync(configDir)) {
|
|
108
|
+
fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
|
|
109
|
+
}
|
|
110
|
+
fs.writeFileSync(configFile, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// If running as root, save to system config
|
|
114
|
+
if (process.getuid?.() === 0) {
|
|
115
|
+
if (!fs.existsSync(configDir)) {
|
|
116
|
+
fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
|
|
117
|
+
}
|
|
118
|
+
fs.writeFileSync(configFile, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Save to user config
|
|
122
|
+
userConfig.store = config;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get a specific config value
|
|
127
|
+
*/
|
|
128
|
+
export function getConfig(key) {
|
|
129
|
+
const config = loadConfig();
|
|
130
|
+
return config[key];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Set a specific config value
|
|
134
|
+
*/
|
|
135
|
+
export function setConfig(key, value) {
|
|
136
|
+
const config = loadConfig();
|
|
137
|
+
config[key] = value;
|
|
138
|
+
saveConfig(config);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Check if agent is configured
|
|
142
|
+
* Considers both config file and environment variables
|
|
143
|
+
*/
|
|
144
|
+
export function isConfigured() {
|
|
145
|
+
const config = loadConfig();
|
|
146
|
+
const hasAuth = !!(config.auth.apiKey ||
|
|
147
|
+
process.env.ZNVAULT_API_KEY ||
|
|
148
|
+
config.auth.username ||
|
|
149
|
+
process.env.ZNVAULT_USERNAME);
|
|
150
|
+
return !!(config.vaultUrl && config.tenantId && hasAuth);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get config file path for display
|
|
154
|
+
*/
|
|
155
|
+
export function getConfigPath() {
|
|
156
|
+
const configFile = getConfigFile();
|
|
157
|
+
if (process.getuid?.() === 0 && fs.existsSync(configFile)) {
|
|
158
|
+
return configFile;
|
|
159
|
+
}
|
|
160
|
+
return userConfig.path;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Add a certificate target
|
|
164
|
+
*/
|
|
165
|
+
export function addTarget(target) {
|
|
166
|
+
const config = loadConfig();
|
|
167
|
+
// Check if target with same certId exists
|
|
168
|
+
const existingIndex = config.targets.findIndex(t => t.certId === target.certId);
|
|
169
|
+
if (existingIndex >= 0) {
|
|
170
|
+
config.targets[existingIndex] = target;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
config.targets.push(target);
|
|
174
|
+
}
|
|
175
|
+
saveConfig(config);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Remove a certificate target
|
|
179
|
+
*/
|
|
180
|
+
export function removeTarget(certIdOrName) {
|
|
181
|
+
const config = loadConfig();
|
|
182
|
+
const initialLength = config.targets.length;
|
|
183
|
+
config.targets = config.targets.filter(t => t.certId !== certIdOrName && t.name !== certIdOrName);
|
|
184
|
+
if (config.targets.length < initialLength) {
|
|
185
|
+
saveConfig(config);
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get all targets
|
|
192
|
+
*/
|
|
193
|
+
export function getTargets() {
|
|
194
|
+
return loadConfig().targets;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Update target fingerprint after successful sync
|
|
198
|
+
*/
|
|
199
|
+
export function updateTargetFingerprint(certId, fingerprint) {
|
|
200
|
+
const config = loadConfig();
|
|
201
|
+
const target = config.targets.find(t => t.certId === certId);
|
|
202
|
+
if (target) {
|
|
203
|
+
target.lastFingerprint = fingerprint;
|
|
204
|
+
target.lastSync = new Date().toISOString();
|
|
205
|
+
saveConfig(config);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Add a secret target
|
|
210
|
+
*/
|
|
211
|
+
export function addSecretTarget(target) {
|
|
212
|
+
const config = loadConfig();
|
|
213
|
+
config.secretTargets = config.secretTargets || [];
|
|
214
|
+
// Check if target with same name exists (allows same secret with different output configs)
|
|
215
|
+
const existingIndex = config.secretTargets.findIndex(t => t.name === target.name);
|
|
216
|
+
if (existingIndex >= 0) {
|
|
217
|
+
config.secretTargets[existingIndex] = target;
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
config.secretTargets.push(target);
|
|
221
|
+
}
|
|
222
|
+
saveConfig(config);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Remove a secret target
|
|
226
|
+
*/
|
|
227
|
+
export function removeSecretTarget(secretIdOrName) {
|
|
228
|
+
const config = loadConfig();
|
|
229
|
+
if (!config.secretTargets)
|
|
230
|
+
return false;
|
|
231
|
+
const initialLength = config.secretTargets.length;
|
|
232
|
+
config.secretTargets = config.secretTargets.filter(t => t.secretId !== secretIdOrName && t.name !== secretIdOrName);
|
|
233
|
+
if (config.secretTargets.length < initialLength) {
|
|
234
|
+
saveConfig(config);
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get all secret targets
|
|
241
|
+
*/
|
|
242
|
+
export function getSecretTargets() {
|
|
243
|
+
return loadConfig().secretTargets || [];
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Update secret target version after successful sync
|
|
247
|
+
*/
|
|
248
|
+
export function updateSecretTargetVersion(secretId, version) {
|
|
249
|
+
const config = loadConfig();
|
|
250
|
+
const target = config.secretTargets?.find(t => t.secretId === secretId);
|
|
251
|
+
if (target) {
|
|
252
|
+
target.lastVersion = version;
|
|
253
|
+
target.lastSync = new Date().toISOString();
|
|
254
|
+
saveConfig(config);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Update API key in config file after rotation
|
|
259
|
+
* This directly modifies the config file without going through loadConfig
|
|
260
|
+
* to avoid environment variable overrides being persisted.
|
|
261
|
+
*/
|
|
262
|
+
export function updateApiKey(newKey) {
|
|
263
|
+
let configPath;
|
|
264
|
+
let config;
|
|
265
|
+
const configFile = getConfigFile();
|
|
266
|
+
// Determine which config file to update
|
|
267
|
+
if (process.getuid?.() === 0 && fs.existsSync(configFile)) {
|
|
268
|
+
configPath = configFile;
|
|
269
|
+
}
|
|
270
|
+
else if (fs.existsSync(configFile)) {
|
|
271
|
+
configPath = configFile;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
// User config via Conf
|
|
275
|
+
const currentConfig = userConfig.store;
|
|
276
|
+
currentConfig.auth = currentConfig.auth || {};
|
|
277
|
+
currentConfig.auth.apiKey = newKey;
|
|
278
|
+
userConfig.store = currentConfig;
|
|
279
|
+
log.info({ path: userConfig.path }, 'API key updated in user config');
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
// Load and update system config file
|
|
283
|
+
try {
|
|
284
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
285
|
+
config = JSON.parse(content);
|
|
286
|
+
config.auth = config.auth || {};
|
|
287
|
+
config.auth.apiKey = newKey;
|
|
288
|
+
// Write back with atomic rename
|
|
289
|
+
const tempPath = `${configPath}.tmp`;
|
|
290
|
+
fs.writeFileSync(tempPath, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
291
|
+
fs.renameSync(tempPath, configPath);
|
|
292
|
+
log.info({ path: configPath }, 'API key updated in config file');
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
log.error({ err, path: configPath }, 'Failed to update API key in config');
|
|
296
|
+
throw err;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CertTarget } from './config.js';
|
|
2
|
+
export interface DeployResult {
|
|
3
|
+
success: boolean;
|
|
4
|
+
certId: string;
|
|
5
|
+
name: string;
|
|
6
|
+
message: string;
|
|
7
|
+
fingerprint?: string;
|
|
8
|
+
filesWritten?: string[];
|
|
9
|
+
reloadOutput?: string;
|
|
10
|
+
healthCheckPassed?: boolean;
|
|
11
|
+
rolledBack?: boolean;
|
|
12
|
+
durationMs?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Deploy a certificate to its target locations
|
|
16
|
+
*/
|
|
17
|
+
export declare function deployCertificate(target: CertTarget, force?: boolean): Promise<DeployResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Deploy all configured certificate targets
|
|
20
|
+
*/
|
|
21
|
+
export declare function deployAllCertificates(force?: boolean): Promise<DeployResult[]>;
|
|
22
|
+
//# sourceMappingURL=deployer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployer.d.ts","sourceRoot":"","sources":["../../src/lib/deployer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsMD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,UAAU,EAClB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,YAAY,CAAC,CAoNvB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAyB3F"}
|