@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,273 @@
|
|
|
1
|
+
// Path: src/lib/metrics.ts
|
|
2
|
+
// Prometheus metrics for zn-vault-agent
|
|
3
|
+
import { metricsLogger as log } from './logger.js';
|
|
4
|
+
// Metric storage
|
|
5
|
+
const counters = new Map();
|
|
6
|
+
const gauges = new Map();
|
|
7
|
+
const histograms = new Map();
|
|
8
|
+
// Metric metadata
|
|
9
|
+
const metricHelp = new Map();
|
|
10
|
+
const metricType = new Map();
|
|
11
|
+
// Default histogram buckets (in seconds)
|
|
12
|
+
const DEFAULT_BUCKETS = [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10];
|
|
13
|
+
/**
|
|
14
|
+
* Register a counter metric
|
|
15
|
+
*/
|
|
16
|
+
export function registerCounter(name, help) {
|
|
17
|
+
if (!counters.has(name)) {
|
|
18
|
+
counters.set(name, []);
|
|
19
|
+
metricHelp.set(name, help);
|
|
20
|
+
metricType.set(name, 'counter');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Increment a counter
|
|
25
|
+
*/
|
|
26
|
+
export function incCounter(name, labels = {}, value = 1) {
|
|
27
|
+
const values = counters.get(name);
|
|
28
|
+
if (!values) {
|
|
29
|
+
log.warn({ name }, 'Counter not registered');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const labelKey = JSON.stringify(labels);
|
|
33
|
+
const existing = values.find((v) => JSON.stringify(v.labels) === labelKey);
|
|
34
|
+
if (existing) {
|
|
35
|
+
existing.value += value;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
values.push({ value, labels });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Register a gauge metric
|
|
43
|
+
*/
|
|
44
|
+
export function registerGauge(name, help) {
|
|
45
|
+
if (!gauges.has(name)) {
|
|
46
|
+
gauges.set(name, []);
|
|
47
|
+
metricHelp.set(name, help);
|
|
48
|
+
metricType.set(name, 'gauge');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Set a gauge value
|
|
53
|
+
*/
|
|
54
|
+
export function setGauge(name, value, labels = {}) {
|
|
55
|
+
const values = gauges.get(name);
|
|
56
|
+
if (!values) {
|
|
57
|
+
log.warn({ name }, 'Gauge not registered');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const labelKey = JSON.stringify(labels);
|
|
61
|
+
const existing = values.find((v) => JSON.stringify(v.labels) === labelKey);
|
|
62
|
+
if (existing) {
|
|
63
|
+
existing.value = value;
|
|
64
|
+
existing.timestamp = Date.now();
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
values.push({ value, labels, timestamp: Date.now() });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Register a histogram metric
|
|
72
|
+
*/
|
|
73
|
+
export function registerHistogram(name, help, buckets = DEFAULT_BUCKETS) {
|
|
74
|
+
if (!histograms.has(name)) {
|
|
75
|
+
histograms.set(name, []);
|
|
76
|
+
metricHelp.set(name, help);
|
|
77
|
+
metricType.set(name, 'histogram');
|
|
78
|
+
// Store bucket boundaries in help text for reference
|
|
79
|
+
metricHelp.set(`${name}_buckets`, buckets.join(','));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Observe a histogram value
|
|
84
|
+
*/
|
|
85
|
+
export function observeHistogram(name, value, labels = {}) {
|
|
86
|
+
const values = histograms.get(name);
|
|
87
|
+
if (!values) {
|
|
88
|
+
log.warn({ name }, 'Histogram not registered');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const bucketBoundaries = metricHelp.get(`${name}_buckets`)?.split(',').map(Number) || DEFAULT_BUCKETS;
|
|
92
|
+
const labelKey = JSON.stringify(labels);
|
|
93
|
+
let existing = values.find((v) => JSON.stringify(v.labels) === labelKey);
|
|
94
|
+
if (!existing) {
|
|
95
|
+
existing = {
|
|
96
|
+
buckets: bucketBoundaries.map((le) => ({ le, count: 0 })),
|
|
97
|
+
sum: 0,
|
|
98
|
+
count: 0,
|
|
99
|
+
labels,
|
|
100
|
+
};
|
|
101
|
+
values.push(existing);
|
|
102
|
+
}
|
|
103
|
+
// Update buckets
|
|
104
|
+
for (const bucket of existing.buckets) {
|
|
105
|
+
if (value <= bucket.le) {
|
|
106
|
+
bucket.count++;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
existing.sum += value;
|
|
110
|
+
existing.count++;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Format labels for Prometheus output
|
|
114
|
+
*/
|
|
115
|
+
function formatLabels(labels) {
|
|
116
|
+
const entries = Object.entries(labels);
|
|
117
|
+
if (entries.length === 0)
|
|
118
|
+
return '';
|
|
119
|
+
return `{${entries.map(([k, v]) => `${k}="${v}"`).join(',')}}`;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Export all metrics in Prometheus text format
|
|
123
|
+
*/
|
|
124
|
+
export function exportMetrics() {
|
|
125
|
+
const lines = [];
|
|
126
|
+
// Add process metrics
|
|
127
|
+
lines.push('# HELP process_uptime_seconds Process uptime in seconds');
|
|
128
|
+
lines.push('# TYPE process_uptime_seconds gauge');
|
|
129
|
+
lines.push(`process_uptime_seconds ${process.uptime().toFixed(3)}`);
|
|
130
|
+
lines.push('# HELP process_heap_bytes Process heap memory in bytes');
|
|
131
|
+
lines.push('# TYPE process_heap_bytes gauge');
|
|
132
|
+
lines.push(`process_heap_bytes ${process.memoryUsage().heapUsed}`);
|
|
133
|
+
lines.push('');
|
|
134
|
+
// Export counters
|
|
135
|
+
for (const [name, values] of counters) {
|
|
136
|
+
const help = metricHelp.get(name);
|
|
137
|
+
if (help)
|
|
138
|
+
lines.push(`# HELP ${name} ${help}`);
|
|
139
|
+
lines.push(`# TYPE ${name} counter`);
|
|
140
|
+
for (const v of values) {
|
|
141
|
+
lines.push(`${name}${formatLabels(v.labels)} ${v.value}`);
|
|
142
|
+
}
|
|
143
|
+
// Add total if no labels
|
|
144
|
+
if (values.length === 0) {
|
|
145
|
+
lines.push(`${name} 0`);
|
|
146
|
+
}
|
|
147
|
+
lines.push('');
|
|
148
|
+
}
|
|
149
|
+
// Export gauges
|
|
150
|
+
for (const [name, values] of gauges) {
|
|
151
|
+
const help = metricHelp.get(name);
|
|
152
|
+
if (help)
|
|
153
|
+
lines.push(`# HELP ${name} ${help}`);
|
|
154
|
+
lines.push(`# TYPE ${name} gauge`);
|
|
155
|
+
for (const v of values) {
|
|
156
|
+
lines.push(`${name}${formatLabels(v.labels)} ${v.value}`);
|
|
157
|
+
}
|
|
158
|
+
if (values.length === 0) {
|
|
159
|
+
lines.push(`${name} 0`);
|
|
160
|
+
}
|
|
161
|
+
lines.push('');
|
|
162
|
+
}
|
|
163
|
+
// Export histograms
|
|
164
|
+
for (const [name, values] of histograms) {
|
|
165
|
+
const help = metricHelp.get(name);
|
|
166
|
+
if (help)
|
|
167
|
+
lines.push(`# HELP ${name} ${help}`);
|
|
168
|
+
lines.push(`# TYPE ${name} histogram`);
|
|
169
|
+
for (const v of values) {
|
|
170
|
+
const labelStr = formatLabels(v.labels);
|
|
171
|
+
for (const bucket of v.buckets) {
|
|
172
|
+
const leLabel = v.labels ? { ...v.labels, le: String(bucket.le) } : { le: String(bucket.le) };
|
|
173
|
+
lines.push(`${name}_bucket${formatLabels(leLabel)} ${bucket.count}`);
|
|
174
|
+
}
|
|
175
|
+
const infLabel = v.labels ? { ...v.labels, le: '+Inf' } : { le: '+Inf' };
|
|
176
|
+
lines.push(`${name}_bucket${formatLabels(infLabel)} ${v.count}`);
|
|
177
|
+
lines.push(`${name}_sum${labelStr} ${v.sum.toFixed(6)}`);
|
|
178
|
+
lines.push(`${name}_count${labelStr} ${v.count}`);
|
|
179
|
+
}
|
|
180
|
+
lines.push('');
|
|
181
|
+
}
|
|
182
|
+
return lines.join('\n');
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Reset all metrics (useful for testing)
|
|
186
|
+
*/
|
|
187
|
+
export function resetMetrics() {
|
|
188
|
+
for (const values of counters.values()) {
|
|
189
|
+
values.length = 0;
|
|
190
|
+
}
|
|
191
|
+
for (const values of gauges.values()) {
|
|
192
|
+
values.length = 0;
|
|
193
|
+
}
|
|
194
|
+
for (const values of histograms.values()) {
|
|
195
|
+
values.length = 0;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Register agent-specific metrics
|
|
199
|
+
export function initializeMetrics() {
|
|
200
|
+
// Counters
|
|
201
|
+
registerCounter('znvault_agent_sync_total', 'Total certificate sync operations');
|
|
202
|
+
registerCounter('znvault_agent_sync_failures_total', 'Total failed sync operations');
|
|
203
|
+
registerCounter('znvault_agent_secret_sync_total', 'Total secret sync operations');
|
|
204
|
+
registerCounter('znvault_agent_secret_sync_failures_total', 'Total failed secret sync operations');
|
|
205
|
+
registerCounter('znvault_agent_websocket_reconnects_total', 'Total WebSocket reconnection attempts');
|
|
206
|
+
registerCounter('znvault_agent_api_requests_total', 'Total API requests made');
|
|
207
|
+
registerCounter('znvault_agent_update_checks_total', 'Total update checks performed');
|
|
208
|
+
registerCounter('znvault_agent_updates_total', 'Total update installations');
|
|
209
|
+
// Gauges
|
|
210
|
+
registerGauge('znvault_agent_connected', 'WebSocket connection status (1=connected, 0=disconnected)');
|
|
211
|
+
registerGauge('znvault_agent_certs_tracked', 'Number of certificates being tracked');
|
|
212
|
+
registerGauge('znvault_agent_secrets_tracked', 'Number of secrets being tracked');
|
|
213
|
+
registerGauge('znvault_agent_last_sync_timestamp', 'Timestamp of last successful sync');
|
|
214
|
+
registerGauge('znvault_agent_cert_expiry_days', 'Days until certificate expiry');
|
|
215
|
+
registerGauge('znvault_agent_version_info', 'Agent version information');
|
|
216
|
+
// Histograms
|
|
217
|
+
registerHistogram('znvault_agent_sync_duration_seconds', 'Certificate sync duration in seconds');
|
|
218
|
+
registerHistogram('znvault_agent_secret_sync_duration_seconds', 'Secret sync duration in seconds');
|
|
219
|
+
registerHistogram('znvault_agent_api_request_duration_seconds', 'API request duration in seconds');
|
|
220
|
+
log.debug('Metrics initialized');
|
|
221
|
+
}
|
|
222
|
+
// Convenience functions for common operations
|
|
223
|
+
export const metrics = {
|
|
224
|
+
// Sync operations
|
|
225
|
+
syncSuccess: (certName) => {
|
|
226
|
+
incCounter('znvault_agent_sync_total', { status: 'success', cert_name: certName });
|
|
227
|
+
setGauge('znvault_agent_last_sync_timestamp', Date.now() / 1000, { cert_name: certName });
|
|
228
|
+
},
|
|
229
|
+
syncFailure: (certName, reason) => {
|
|
230
|
+
incCounter('znvault_agent_sync_total', { status: 'failure', cert_name: certName });
|
|
231
|
+
incCounter('znvault_agent_sync_failures_total', { cert_name: certName, reason });
|
|
232
|
+
},
|
|
233
|
+
syncDuration: (certName, durationMs) => {
|
|
234
|
+
observeHistogram('znvault_agent_sync_duration_seconds', durationMs / 1000, { cert_name: certName });
|
|
235
|
+
},
|
|
236
|
+
// WebSocket
|
|
237
|
+
wsConnected: () => setGauge('znvault_agent_connected', 1),
|
|
238
|
+
wsDisconnected: () => setGauge('znvault_agent_connected', 0),
|
|
239
|
+
wsReconnect: () => incCounter('znvault_agent_websocket_reconnects_total'),
|
|
240
|
+
// API
|
|
241
|
+
apiRequest: (method, status, durationMs) => {
|
|
242
|
+
incCounter('znvault_agent_api_requests_total', { method, status: String(status) });
|
|
243
|
+
observeHistogram('znvault_agent_api_request_duration_seconds', durationMs / 1000, { method });
|
|
244
|
+
},
|
|
245
|
+
// Certificate tracking
|
|
246
|
+
setCertsTracked: (count) => setGauge('znvault_agent_certs_tracked', count),
|
|
247
|
+
setCertExpiry: (certId, certName, days) => {
|
|
248
|
+
setGauge('znvault_agent_cert_expiry_days', days, { cert_id: certId, cert_name: certName });
|
|
249
|
+
},
|
|
250
|
+
// Secret operations
|
|
251
|
+
secretDeployed: (secretName, success, durationMs) => {
|
|
252
|
+
incCounter('znvault_agent_secret_sync_total', { status: success ? 'success' : 'failure', secret_name: secretName });
|
|
253
|
+
if (!success) {
|
|
254
|
+
incCounter('znvault_agent_secret_sync_failures_total', { secret_name: secretName });
|
|
255
|
+
}
|
|
256
|
+
observeHistogram('znvault_agent_secret_sync_duration_seconds', durationMs / 1000, { secret_name: secretName });
|
|
257
|
+
if (success) {
|
|
258
|
+
setGauge('znvault_agent_last_sync_timestamp', Date.now() / 1000, { secret_name: secretName });
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
setSecretsTracked: (count) => setGauge('znvault_agent_secrets_tracked', count),
|
|
262
|
+
// Auto-update
|
|
263
|
+
updateCheck: (status) => {
|
|
264
|
+
incCounter('znvault_agent_update_checks_total', { status });
|
|
265
|
+
},
|
|
266
|
+
updateInstall: (status) => {
|
|
267
|
+
incCounter('znvault_agent_updates_total', { status });
|
|
268
|
+
},
|
|
269
|
+
setVersionInfo: (version, channel) => {
|
|
270
|
+
setGauge('znvault_agent_version_info', 1, { version, channel });
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/lib/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SecretTarget } from './config.js';
|
|
2
|
+
export interface SecretDeployResult {
|
|
3
|
+
success: boolean;
|
|
4
|
+
secretId: string;
|
|
5
|
+
name: string;
|
|
6
|
+
message: string;
|
|
7
|
+
version?: number;
|
|
8
|
+
durationMs?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Deploy a single secret target
|
|
12
|
+
*/
|
|
13
|
+
export declare function deploySecret(target: SecretTarget, force?: boolean): Promise<SecretDeployResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Deploy all configured secret targets
|
|
16
|
+
*/
|
|
17
|
+
export declare function deployAllSecrets(force?: boolean): Promise<SecretDeployResult[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Find secret target by ID or alias
|
|
20
|
+
*/
|
|
21
|
+
export declare function findSecretTarget(secretIdOrAlias: string): SecretTarget | undefined;
|
|
22
|
+
//# sourceMappingURL=secret-deployer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-deployer.d.ts","sourceRoot":"","sources":["../../src/lib/secret-deployer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwGD;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,KAAK,UAAQ,GACZ,OAAO,CAAC,kBAAkB,CAAC,CAoF7B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAwBnF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAOlF"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// Path: src/lib/secret-deployer.ts
|
|
2
|
+
// Secret deployment with atomic writes
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { execSync } from 'node:child_process';
|
|
6
|
+
import { getSecret } from './api.js';
|
|
7
|
+
import { updateSecretTargetVersion, getSecretTargets, loadConfig } from './config.js';
|
|
8
|
+
import { deployLogger as log } from './logger.js';
|
|
9
|
+
import { metrics } from './metrics.js';
|
|
10
|
+
/**
|
|
11
|
+
* Format secret data according to target format
|
|
12
|
+
*/
|
|
13
|
+
function formatSecretData(data, format, options) {
|
|
14
|
+
switch (format) {
|
|
15
|
+
case 'env': {
|
|
16
|
+
const prefix = options.envPrefix || '';
|
|
17
|
+
return Object.entries(data)
|
|
18
|
+
.map(([k, v]) => {
|
|
19
|
+
const key = prefix + k.toUpperCase();
|
|
20
|
+
const value = typeof v === 'string' ? v : JSON.stringify(v);
|
|
21
|
+
return `${key}="${value.replace(/"/g, '\\"')}"`;
|
|
22
|
+
})
|
|
23
|
+
.join('\n') + '\n';
|
|
24
|
+
}
|
|
25
|
+
case 'json':
|
|
26
|
+
return JSON.stringify(data, null, 2) + '\n';
|
|
27
|
+
case 'yaml': {
|
|
28
|
+
// Simple YAML serialization
|
|
29
|
+
return Object.entries(data)
|
|
30
|
+
.map(([k, v]) => {
|
|
31
|
+
if (typeof v === 'string') {
|
|
32
|
+
// Quote strings that might need it
|
|
33
|
+
if (v.includes(':') || v.includes('#') || v.includes('\n')) {
|
|
34
|
+
return `${k}: "${v.replace(/"/g, '\\"')}"`;
|
|
35
|
+
}
|
|
36
|
+
return `${k}: ${v}`;
|
|
37
|
+
}
|
|
38
|
+
return `${k}: ${JSON.stringify(v)}`;
|
|
39
|
+
})
|
|
40
|
+
.join('\n') + '\n';
|
|
41
|
+
}
|
|
42
|
+
case 'raw': {
|
|
43
|
+
if (!options.key) {
|
|
44
|
+
throw new Error('Key must be specified for raw format');
|
|
45
|
+
}
|
|
46
|
+
const value = data[options.key];
|
|
47
|
+
if (value === undefined) {
|
|
48
|
+
throw new Error(`Key "${options.key}" not found in secret data`);
|
|
49
|
+
}
|
|
50
|
+
return typeof value === 'string' ? value : JSON.stringify(value);
|
|
51
|
+
}
|
|
52
|
+
case 'template': {
|
|
53
|
+
if (!options.templatePath) {
|
|
54
|
+
throw new Error('Template path must be specified for template format');
|
|
55
|
+
}
|
|
56
|
+
if (!fs.existsSync(options.templatePath)) {
|
|
57
|
+
throw new Error(`Template file not found: ${options.templatePath}`);
|
|
58
|
+
}
|
|
59
|
+
let template = fs.readFileSync(options.templatePath, 'utf-8');
|
|
60
|
+
// Replace {{ key }} placeholders
|
|
61
|
+
for (const [k, v] of Object.entries(data)) {
|
|
62
|
+
const value = typeof v === 'string' ? v : JSON.stringify(v);
|
|
63
|
+
template = template.replace(new RegExp(`\\{\\{\\s*${k}\\s*\\}\\}`, 'g'), value);
|
|
64
|
+
}
|
|
65
|
+
return template;
|
|
66
|
+
}
|
|
67
|
+
default:
|
|
68
|
+
return JSON.stringify(data, null, 2) + '\n';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Write secret to file with proper permissions (atomic)
|
|
73
|
+
*/
|
|
74
|
+
function writeSecretFile(filePath, content, owner, mode) {
|
|
75
|
+
const dir = path.dirname(filePath);
|
|
76
|
+
if (!fs.existsSync(dir)) {
|
|
77
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
78
|
+
}
|
|
79
|
+
// Write to temp file first (atomic)
|
|
80
|
+
const tempPath = `${filePath}.tmp.${process.pid}`;
|
|
81
|
+
fs.writeFileSync(tempPath, content, { mode: parseInt(mode || '0600', 8) });
|
|
82
|
+
// Set ownership if specified and running as root
|
|
83
|
+
if (owner && process.getuid?.() === 0) {
|
|
84
|
+
try {
|
|
85
|
+
execSync(`chown ${owner} "${tempPath}"`, { stdio: 'ignore' });
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Ignore chown errors
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Atomic rename
|
|
92
|
+
fs.renameSync(tempPath, filePath);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Deploy a single secret target
|
|
96
|
+
*/
|
|
97
|
+
export async function deploySecret(target, force = false) {
|
|
98
|
+
const startTime = Date.now();
|
|
99
|
+
try {
|
|
100
|
+
log.debug({ name: target.name, secretId: target.secretId }, 'Deploying secret');
|
|
101
|
+
// Fetch secret from vault
|
|
102
|
+
const secret = await getSecret(target.secretId);
|
|
103
|
+
// Check if update needed (unless forced)
|
|
104
|
+
if (!force && target.lastVersion === secret.version) {
|
|
105
|
+
return {
|
|
106
|
+
success: true,
|
|
107
|
+
secretId: target.secretId,
|
|
108
|
+
name: target.name,
|
|
109
|
+
message: 'Already up to date',
|
|
110
|
+
version: secret.version,
|
|
111
|
+
durationMs: Date.now() - startTime,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Format the data
|
|
115
|
+
const content = formatSecretData(secret.data, target.format, {
|
|
116
|
+
key: target.key,
|
|
117
|
+
envPrefix: target.envPrefix,
|
|
118
|
+
templatePath: target.templatePath,
|
|
119
|
+
});
|
|
120
|
+
// Write to file
|
|
121
|
+
writeSecretFile(target.output, content, target.owner, target.mode);
|
|
122
|
+
// Update config with new version
|
|
123
|
+
updateSecretTargetVersion(target.secretId, secret.version);
|
|
124
|
+
// Run reload command if specified
|
|
125
|
+
if (target.reloadCmd) {
|
|
126
|
+
try {
|
|
127
|
+
log.debug({ cmd: target.reloadCmd }, 'Running reload command');
|
|
128
|
+
execSync(target.reloadCmd, { stdio: 'pipe' });
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
log.warn({ err, cmd: target.reloadCmd }, 'Reload command failed');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const durationMs = Date.now() - startTime;
|
|
135
|
+
metrics.secretDeployed(target.name, true, durationMs);
|
|
136
|
+
log.info({
|
|
137
|
+
name: target.name,
|
|
138
|
+
secretId: target.secretId,
|
|
139
|
+
version: secret.version,
|
|
140
|
+
output: target.output,
|
|
141
|
+
durationMs,
|
|
142
|
+
}, 'Secret deployed successfully');
|
|
143
|
+
return {
|
|
144
|
+
success: true,
|
|
145
|
+
secretId: target.secretId,
|
|
146
|
+
name: target.name,
|
|
147
|
+
message: 'Deployed successfully',
|
|
148
|
+
version: secret.version,
|
|
149
|
+
durationMs,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
const durationMs = Date.now() - startTime;
|
|
154
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
155
|
+
metrics.secretDeployed(target.name, false, durationMs);
|
|
156
|
+
log.error({
|
|
157
|
+
name: target.name,
|
|
158
|
+
secretId: target.secretId,
|
|
159
|
+
err,
|
|
160
|
+
durationMs,
|
|
161
|
+
}, 'Secret deployment failed');
|
|
162
|
+
return {
|
|
163
|
+
success: false,
|
|
164
|
+
secretId: target.secretId,
|
|
165
|
+
name: target.name,
|
|
166
|
+
message,
|
|
167
|
+
durationMs,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Deploy all configured secret targets
|
|
173
|
+
*/
|
|
174
|
+
export async function deployAllSecrets(force = false) {
|
|
175
|
+
const config = loadConfig();
|
|
176
|
+
const targets = config.secretTargets || [];
|
|
177
|
+
if (targets.length === 0) {
|
|
178
|
+
log.debug('No secret targets configured');
|
|
179
|
+
return [];
|
|
180
|
+
}
|
|
181
|
+
log.info({ count: targets.length }, 'Deploying all secrets');
|
|
182
|
+
const results = [];
|
|
183
|
+
for (const target of targets) {
|
|
184
|
+
const result = await deploySecret(target, force);
|
|
185
|
+
results.push(result);
|
|
186
|
+
}
|
|
187
|
+
const successCount = results.filter(r => r.success).length;
|
|
188
|
+
const errorCount = results.filter(r => !r.success).length;
|
|
189
|
+
log.info({ total: results.length, success: successCount, errors: errorCount }, 'Secret deployment complete');
|
|
190
|
+
return results;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Find secret target by ID or alias
|
|
194
|
+
*/
|
|
195
|
+
export function findSecretTarget(secretIdOrAlias) {
|
|
196
|
+
const targets = getSecretTargets();
|
|
197
|
+
return targets.find(t => t.secretId === secretIdOrAlias ||
|
|
198
|
+
t.secretId === `alias:${secretIdOrAlias}` ||
|
|
199
|
+
secretIdOrAlias.includes(t.secretId));
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=secret-deployer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-deployer.js","sourceRoot":"","sources":["../../src/lib/secret-deployer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AgentConfig } from './config.js';
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
errors: ValidationError[];
|
|
5
|
+
warnings: ValidationWarning[];
|
|
6
|
+
}
|
|
7
|
+
export interface ValidationError {
|
|
8
|
+
field: string;
|
|
9
|
+
message: string;
|
|
10
|
+
value?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface ValidationWarning {
|
|
13
|
+
field: string;
|
|
14
|
+
message: string;
|
|
15
|
+
suggestion?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Validate the full agent configuration
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateConfig(config: AgentConfig): ValidationResult;
|
|
21
|
+
/**
|
|
22
|
+
* Format validation result for display
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatValidationResult(result: ValidationResult): string;
|
|
25
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAG3D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA4HD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,CA8GpE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgCvE"}
|