@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,441 @@
|
|
|
1
|
+
// Path: zn-vault-agent/src/lib/websocket.ts
|
|
2
|
+
// WebSocket client for real-time certificate and secret updates (unified mode)
|
|
3
|
+
import WebSocket from 'ws';
|
|
4
|
+
import { loadConfig } from './config.js';
|
|
5
|
+
import { deployCertificate, deployAllCertificates } from './deployer.js';
|
|
6
|
+
import { deploySecret, deployAllSecrets, findSecretTarget } from './secret-deployer.js';
|
|
7
|
+
import { wsLogger as log } from './logger.js';
|
|
8
|
+
import { metrics, initializeMetrics } from './metrics.js';
|
|
9
|
+
import { setWebSocketStatus, setSecretWebSocketStatus, startHealthServer, stopHealthServer, updateCertStatus, updateSecretStatus, } from './health.js';
|
|
10
|
+
import { flushLogs, setupLogRotation } from './logger.js';
|
|
11
|
+
import { startApiKeyRenewal, stopApiKeyRenewal } from '../services/api-key-renewal.js';
|
|
12
|
+
// Graceful shutdown state
|
|
13
|
+
let isShuttingDown = false;
|
|
14
|
+
let activeDeployments = 0;
|
|
15
|
+
/**
|
|
16
|
+
* Create unified WebSocket client for /v1/ws/agent
|
|
17
|
+
*
|
|
18
|
+
* This client connects to a single endpoint and subscribes to topics:
|
|
19
|
+
* - certificates: certificate rotation events
|
|
20
|
+
* - secrets: secret update events
|
|
21
|
+
* - updates: agent update availability events
|
|
22
|
+
*/
|
|
23
|
+
export function createUnifiedWebSocketClient() {
|
|
24
|
+
let ws = null;
|
|
25
|
+
let reconnectAttempts = 0;
|
|
26
|
+
let reconnectTimer = null;
|
|
27
|
+
let heartbeatTimer = null;
|
|
28
|
+
let shouldReconnect = true;
|
|
29
|
+
let registeredAgentId = null;
|
|
30
|
+
const certEventHandlers = [];
|
|
31
|
+
const secretEventHandlers = [];
|
|
32
|
+
const updateEventHandlers = [];
|
|
33
|
+
const connectHandlers = [];
|
|
34
|
+
const disconnectHandlers = [];
|
|
35
|
+
const errorHandlers = [];
|
|
36
|
+
const MAX_RECONNECT_DELAY = 60000;
|
|
37
|
+
const HEARTBEAT_INTERVAL = 30000;
|
|
38
|
+
function getReconnectDelay() {
|
|
39
|
+
const delay = Math.min(1000 * Math.pow(2, reconnectAttempts), MAX_RECONNECT_DELAY);
|
|
40
|
+
return delay + Math.random() * 1000;
|
|
41
|
+
}
|
|
42
|
+
function buildWebSocketUrl() {
|
|
43
|
+
const config = loadConfig();
|
|
44
|
+
const url = new URL(config.vaultUrl);
|
|
45
|
+
url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
46
|
+
url.pathname = '/v1/ws/agent';
|
|
47
|
+
// Build initial subscription query params
|
|
48
|
+
const certIds = config.targets.map(t => t.certId);
|
|
49
|
+
const secretTargets = config.secretTargets || [];
|
|
50
|
+
const secretIds = secretTargets.map(t => t.secretId);
|
|
51
|
+
if (certIds.length > 0) {
|
|
52
|
+
url.searchParams.set('certIds', certIds.join(','));
|
|
53
|
+
}
|
|
54
|
+
if (secretIds.length > 0) {
|
|
55
|
+
url.searchParams.set('secretIds', secretIds.join(','));
|
|
56
|
+
}
|
|
57
|
+
// Subscribe to stable update channel by default
|
|
58
|
+
url.searchParams.set('updateChannel', 'stable');
|
|
59
|
+
// Authentication
|
|
60
|
+
if (config.auth.apiKey) {
|
|
61
|
+
url.searchParams.set('apiKey', config.auth.apiKey);
|
|
62
|
+
}
|
|
63
|
+
// Hostname for registration
|
|
64
|
+
const hostname = process.env.HOSTNAME || require('os').hostname();
|
|
65
|
+
url.searchParams.set('hostname', hostname);
|
|
66
|
+
url.searchParams.set('version', require('../../package.json').version || 'unknown');
|
|
67
|
+
url.searchParams.set('platform', process.platform);
|
|
68
|
+
return url.toString();
|
|
69
|
+
}
|
|
70
|
+
function startHeartbeat() {
|
|
71
|
+
if (heartbeatTimer)
|
|
72
|
+
clearInterval(heartbeatTimer);
|
|
73
|
+
heartbeatTimer = setInterval(() => {
|
|
74
|
+
if (ws?.readyState === WebSocket.OPEN) {
|
|
75
|
+
// Use protocol ping message
|
|
76
|
+
ws.send(JSON.stringify({ type: 'ping' }));
|
|
77
|
+
log.trace({ ws: 'unified' }, 'Sending heartbeat ping');
|
|
78
|
+
}
|
|
79
|
+
}, HEARTBEAT_INTERVAL);
|
|
80
|
+
}
|
|
81
|
+
function stopHeartbeat() {
|
|
82
|
+
if (heartbeatTimer) {
|
|
83
|
+
clearInterval(heartbeatTimer);
|
|
84
|
+
heartbeatTimer = null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function scheduleReconnect() {
|
|
88
|
+
if (!shouldReconnect || isShuttingDown)
|
|
89
|
+
return;
|
|
90
|
+
if (reconnectTimer)
|
|
91
|
+
clearTimeout(reconnectTimer);
|
|
92
|
+
const delay = getReconnectDelay();
|
|
93
|
+
reconnectAttempts++;
|
|
94
|
+
metrics.wsReconnect();
|
|
95
|
+
log.info({ ws: 'unified', attempt: reconnectAttempts, delay }, 'Scheduling reconnect');
|
|
96
|
+
reconnectTimer = setTimeout(() => {
|
|
97
|
+
connect();
|
|
98
|
+
}, delay);
|
|
99
|
+
}
|
|
100
|
+
function handleMessage(message) {
|
|
101
|
+
switch (message.type) {
|
|
102
|
+
case 'registered':
|
|
103
|
+
registeredAgentId = message.agentId || null;
|
|
104
|
+
log.info({ agentId: registeredAgentId }, 'Agent registered with vault');
|
|
105
|
+
break;
|
|
106
|
+
case 'subscribed':
|
|
107
|
+
log.info({ subscriptions: message.subscriptions }, 'Subscriptions updated');
|
|
108
|
+
break;
|
|
109
|
+
case 'pong':
|
|
110
|
+
log.trace('Received heartbeat pong');
|
|
111
|
+
break;
|
|
112
|
+
case 'event':
|
|
113
|
+
if (message.topic === 'certificates' && message.data) {
|
|
114
|
+
const event = message.data;
|
|
115
|
+
log.info({ event: event.event, certId: event.certificateId }, 'Received certificate event');
|
|
116
|
+
setWebSocketStatus(true, new Date());
|
|
117
|
+
certEventHandlers.forEach(h => h(event));
|
|
118
|
+
}
|
|
119
|
+
else if (message.topic === 'secrets' && message.data) {
|
|
120
|
+
const event = message.data;
|
|
121
|
+
log.info({ event: event.event, secretId: event.secretId }, 'Received secret event');
|
|
122
|
+
setSecretWebSocketStatus(true, new Date());
|
|
123
|
+
secretEventHandlers.forEach(h => h(event));
|
|
124
|
+
}
|
|
125
|
+
else if (message.topic === 'updates' && message.data) {
|
|
126
|
+
const event = message.data;
|
|
127
|
+
log.info({ version: event.version, channel: event.channel }, 'Received update event');
|
|
128
|
+
updateEventHandlers.forEach(h => h(event));
|
|
129
|
+
}
|
|
130
|
+
break;
|
|
131
|
+
case 'error':
|
|
132
|
+
log.error({ message: message.message }, 'Server error');
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function connect() {
|
|
137
|
+
if (isShuttingDown) {
|
|
138
|
+
log.debug({ ws: 'unified' }, 'Shutdown in progress, not connecting');
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const config = loadConfig();
|
|
142
|
+
if (!config.vaultUrl) {
|
|
143
|
+
const err = new Error('Vault URL not configured');
|
|
144
|
+
log.error({ ws: 'unified' }, 'Cannot connect');
|
|
145
|
+
errorHandlers.forEach(h => h(err));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (ws?.readyState === WebSocket.OPEN || ws?.readyState === WebSocket.CONNECTING) {
|
|
149
|
+
log.debug({ ws: 'unified' }, 'Already connected or connecting');
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const wsUrl = buildWebSocketUrl();
|
|
154
|
+
log.info({ ws: 'unified', url: wsUrl.replace(/apiKey=[^&]+/, 'apiKey=***') }, 'Connecting to unified WebSocket');
|
|
155
|
+
ws = new WebSocket(wsUrl, {
|
|
156
|
+
rejectUnauthorized: !config.insecure,
|
|
157
|
+
handshakeTimeout: 10000,
|
|
158
|
+
});
|
|
159
|
+
ws.on('open', () => {
|
|
160
|
+
reconnectAttempts = 0;
|
|
161
|
+
startHeartbeat();
|
|
162
|
+
setWebSocketStatus(true, new Date());
|
|
163
|
+
setSecretWebSocketStatus(true, new Date());
|
|
164
|
+
metrics.wsConnected();
|
|
165
|
+
log.info({ ws: 'unified' }, 'Unified WebSocket connected');
|
|
166
|
+
});
|
|
167
|
+
ws.on('message', (data) => {
|
|
168
|
+
try {
|
|
169
|
+
const message = JSON.parse(data.toString());
|
|
170
|
+
handleMessage(message);
|
|
171
|
+
// Fire connect handlers when we get registered
|
|
172
|
+
if (message.type === 'registered' && registeredAgentId) {
|
|
173
|
+
connectHandlers.forEach(h => h(registeredAgentId));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
log.warn({ ws: 'unified', err, data: data.toString().substring(0, 100) }, 'Failed to parse message');
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
ws.on('close', (code, reason) => {
|
|
181
|
+
stopHeartbeat();
|
|
182
|
+
setWebSocketStatus(false);
|
|
183
|
+
setSecretWebSocketStatus(false);
|
|
184
|
+
metrics.wsDisconnected();
|
|
185
|
+
registeredAgentId = null;
|
|
186
|
+
const reasonStr = reason?.toString() || `Code: ${code}`;
|
|
187
|
+
log.warn({ ws: 'unified', code, reason: reasonStr }, 'WebSocket disconnected');
|
|
188
|
+
disconnectHandlers.forEach(h => h(reasonStr));
|
|
189
|
+
scheduleReconnect();
|
|
190
|
+
});
|
|
191
|
+
ws.on('error', (err) => {
|
|
192
|
+
log.error({ ws: 'unified', err }, 'WebSocket error');
|
|
193
|
+
errorHandlers.forEach(h => h(err));
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
198
|
+
log.error({ ws: 'unified', err: error }, 'Failed to create WebSocket');
|
|
199
|
+
errorHandlers.forEach(h => h(error));
|
|
200
|
+
scheduleReconnect();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function disconnect() {
|
|
204
|
+
shouldReconnect = false;
|
|
205
|
+
if (reconnectTimer) {
|
|
206
|
+
clearTimeout(reconnectTimer);
|
|
207
|
+
reconnectTimer = null;
|
|
208
|
+
}
|
|
209
|
+
stopHeartbeat();
|
|
210
|
+
if (ws) {
|
|
211
|
+
log.info({ ws: 'unified' }, 'Disconnecting WebSocket');
|
|
212
|
+
ws.close();
|
|
213
|
+
ws = null;
|
|
214
|
+
}
|
|
215
|
+
setWebSocketStatus(false);
|
|
216
|
+
setSecretWebSocketStatus(false);
|
|
217
|
+
metrics.wsDisconnected();
|
|
218
|
+
registeredAgentId = null;
|
|
219
|
+
}
|
|
220
|
+
function updateSubscriptions(subs) {
|
|
221
|
+
if (ws?.readyState !== WebSocket.OPEN) {
|
|
222
|
+
log.warn('Cannot update subscriptions: not connected');
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const message = {
|
|
226
|
+
type: 'subscribe',
|
|
227
|
+
topics: [],
|
|
228
|
+
certIds: subs.certIds,
|
|
229
|
+
secretIds: subs.secretIds,
|
|
230
|
+
channel: subs.updateChannel,
|
|
231
|
+
};
|
|
232
|
+
if (subs.certIds?.length)
|
|
233
|
+
message.topics.push('certificates');
|
|
234
|
+
if (subs.secretIds?.length)
|
|
235
|
+
message.topics.push('secrets');
|
|
236
|
+
if (subs.updateChannel)
|
|
237
|
+
message.topics.push('updates');
|
|
238
|
+
ws.send(JSON.stringify(message));
|
|
239
|
+
log.info({ subs }, 'Sent subscription update');
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
connect,
|
|
243
|
+
disconnect,
|
|
244
|
+
isConnected: () => ws?.readyState === WebSocket.OPEN,
|
|
245
|
+
onCertificateEvent: (handler) => certEventHandlers.push(handler),
|
|
246
|
+
onSecretEvent: (handler) => secretEventHandlers.push(handler),
|
|
247
|
+
onUpdateEvent: (handler) => updateEventHandlers.push(handler),
|
|
248
|
+
onConnect: (handler) => connectHandlers.push(handler),
|
|
249
|
+
onDisconnect: (handler) => disconnectHandlers.push(handler),
|
|
250
|
+
onError: (handler) => errorHandlers.push(handler),
|
|
251
|
+
updateSubscriptions,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Start the agent daemon with unified WebSocket connection
|
|
256
|
+
*/
|
|
257
|
+
export async function startDaemon(options = {}) {
|
|
258
|
+
const config = loadConfig();
|
|
259
|
+
const secretTargets = config.secretTargets || [];
|
|
260
|
+
// Initialize metrics
|
|
261
|
+
initializeMetrics();
|
|
262
|
+
// Setup log rotation handler
|
|
263
|
+
setupLogRotation();
|
|
264
|
+
log.info({
|
|
265
|
+
vault: config.vaultUrl,
|
|
266
|
+
certTargets: config.targets.length,
|
|
267
|
+
secretTargets: secretTargets.length,
|
|
268
|
+
}, 'Starting ZN-Vault Agent');
|
|
269
|
+
// Start health server if port specified
|
|
270
|
+
if (options.healthPort) {
|
|
271
|
+
try {
|
|
272
|
+
await startHealthServer(options.healthPort);
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
log.error({ err }, 'Failed to start health server');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Update tracked metrics
|
|
279
|
+
metrics.setCertsTracked(config.targets.length);
|
|
280
|
+
// Create unified WebSocket client
|
|
281
|
+
const unifiedClient = createUnifiedWebSocketClient();
|
|
282
|
+
// Handle certificate events
|
|
283
|
+
unifiedClient.onCertificateEvent(async (event) => {
|
|
284
|
+
if (isShuttingDown) {
|
|
285
|
+
log.debug({ event: event.event }, 'Ignoring certificate event during shutdown');
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
const target = config.targets.find(t => t.certId === event.certificateId);
|
|
289
|
+
if (target) {
|
|
290
|
+
activeDeployments++;
|
|
291
|
+
try {
|
|
292
|
+
log.info({ name: target.name, event: event.event }, 'Processing certificate event');
|
|
293
|
+
const result = await deployCertificate(target, true);
|
|
294
|
+
if (result.success) {
|
|
295
|
+
log.info({ name: target.name, fingerprint: result.fingerprint }, 'Certificate deployed');
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
log.error({ name: target.name, error: result.message }, 'Certificate deployment failed');
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
finally {
|
|
302
|
+
activeDeployments--;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
log.debug({ certId: event.certificateId }, 'Received event for untracked certificate');
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
// Handle secret events
|
|
310
|
+
unifiedClient.onSecretEvent(async (event) => {
|
|
311
|
+
if (isShuttingDown) {
|
|
312
|
+
log.debug({ event: event.event }, 'Ignoring secret event during shutdown');
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
const target = findSecretTarget(event.secretId) || findSecretTarget(event.alias);
|
|
316
|
+
if (target) {
|
|
317
|
+
activeDeployments++;
|
|
318
|
+
try {
|
|
319
|
+
log.info({ name: target.name, event: event.event, version: event.version }, 'Processing secret event');
|
|
320
|
+
const result = await deploySecret(target, true);
|
|
321
|
+
if (result.success) {
|
|
322
|
+
log.info({ name: target.name, version: result.version }, 'Secret deployed');
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
log.error({ name: target.name, error: result.message }, 'Secret deployment failed');
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
finally {
|
|
329
|
+
activeDeployments--;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
log.debug({ secretId: event.secretId, alias: event.alias }, 'Received event for untracked secret');
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
// Handle update events
|
|
337
|
+
unifiedClient.onUpdateEvent((event) => {
|
|
338
|
+
log.info({ version: event.version, channel: event.channel }, 'Update available');
|
|
339
|
+
// Auto-update handling is done by auto-update service
|
|
340
|
+
});
|
|
341
|
+
unifiedClient.onConnect((agentId) => {
|
|
342
|
+
log.info({ agentId }, 'Connected to vault');
|
|
343
|
+
});
|
|
344
|
+
unifiedClient.onDisconnect((reason) => {
|
|
345
|
+
log.warn({ reason }, 'Disconnected from vault');
|
|
346
|
+
});
|
|
347
|
+
unifiedClient.onError((err) => {
|
|
348
|
+
log.error({ err }, 'WebSocket error');
|
|
349
|
+
});
|
|
350
|
+
// Start API key renewal service
|
|
351
|
+
startApiKeyRenewal();
|
|
352
|
+
// Connect unified WebSocket
|
|
353
|
+
unifiedClient.connect();
|
|
354
|
+
// Initial sync - certificates
|
|
355
|
+
if (config.targets.length > 0) {
|
|
356
|
+
log.info('Performing initial certificate sync');
|
|
357
|
+
const certResults = await deployAllCertificates(false);
|
|
358
|
+
const certSuccess = certResults.filter(r => r.success).length;
|
|
359
|
+
const certErrors = certResults.filter(r => !r.success).length;
|
|
360
|
+
updateCertStatus(certSuccess, certErrors);
|
|
361
|
+
log.info({ total: certResults.length, success: certSuccess, errors: certErrors }, 'Certificate sync complete');
|
|
362
|
+
}
|
|
363
|
+
// Initial sync - secrets
|
|
364
|
+
if (secretTargets.length > 0) {
|
|
365
|
+
log.info('Performing initial secret sync');
|
|
366
|
+
const secretResults = await deployAllSecrets(false);
|
|
367
|
+
const secretSuccess = secretResults.filter(r => r.success).length;
|
|
368
|
+
const secretErrors = secretResults.filter(r => !r.success).length;
|
|
369
|
+
updateSecretStatus(secretSuccess, secretErrors);
|
|
370
|
+
log.info({ total: secretResults.length, success: secretSuccess, errors: secretErrors }, 'Secret sync complete');
|
|
371
|
+
}
|
|
372
|
+
// Set up polling interval as fallback
|
|
373
|
+
const pollInterval = (config.pollInterval || 3600) * 1000;
|
|
374
|
+
const poll = async () => {
|
|
375
|
+
if (isShuttingDown)
|
|
376
|
+
return;
|
|
377
|
+
log.debug('Starting periodic poll');
|
|
378
|
+
// Poll certificates
|
|
379
|
+
for (const target of config.targets) {
|
|
380
|
+
if (isShuttingDown)
|
|
381
|
+
break;
|
|
382
|
+
try {
|
|
383
|
+
const result = await deployCertificate(target, false);
|
|
384
|
+
if (result.fingerprint !== target.lastFingerprint) {
|
|
385
|
+
log.info({ name: target.name, message: result.message }, 'Certificate updated during poll');
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
catch (err) {
|
|
389
|
+
log.error({ name: target.name, err }, 'Error polling certificate');
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// Poll secrets
|
|
393
|
+
for (const target of secretTargets) {
|
|
394
|
+
if (isShuttingDown)
|
|
395
|
+
break;
|
|
396
|
+
try {
|
|
397
|
+
const result = await deploySecret(target, false);
|
|
398
|
+
if (result.version !== target.lastVersion) {
|
|
399
|
+
log.info({ name: target.name, message: result.message }, 'Secret updated during poll');
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
catch (err) {
|
|
403
|
+
log.error({ name: target.name, err }, 'Error polling secret');
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
const pollTimer = setInterval(poll, pollInterval);
|
|
408
|
+
// Graceful shutdown handler
|
|
409
|
+
const shutdown = async (signal) => {
|
|
410
|
+
if (isShuttingDown) {
|
|
411
|
+
log.warn('Shutdown already in progress');
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
isShuttingDown = true;
|
|
415
|
+
log.info({ signal }, 'Shutting down');
|
|
416
|
+
// Stop accepting new events
|
|
417
|
+
clearInterval(pollTimer);
|
|
418
|
+
unifiedClient.disconnect();
|
|
419
|
+
stopApiKeyRenewal();
|
|
420
|
+
// Wait for active deployments to complete (max 30 seconds)
|
|
421
|
+
const startTime = Date.now();
|
|
422
|
+
while (activeDeployments > 0 && Date.now() - startTime < 30000) {
|
|
423
|
+
log.info({ active: activeDeployments }, 'Waiting for active deployments');
|
|
424
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
425
|
+
}
|
|
426
|
+
if (activeDeployments > 0) {
|
|
427
|
+
log.warn({ active: activeDeployments }, 'Forcing shutdown with active deployments');
|
|
428
|
+
}
|
|
429
|
+
// Stop health server
|
|
430
|
+
await stopHealthServer();
|
|
431
|
+
// Flush logs
|
|
432
|
+
await flushLogs();
|
|
433
|
+
log.info('Shutdown complete');
|
|
434
|
+
process.exit(0);
|
|
435
|
+
};
|
|
436
|
+
// Handle shutdown signals
|
|
437
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
438
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
439
|
+
log.info({ pollInterval: config.pollInterval || 3600 }, 'Agent running. Press Ctrl+C to stop.');
|
|
440
|
+
}
|
|
441
|
+
//# sourceMappingURL=websocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/lib/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check and renew API key if needed
|
|
3
|
+
*/
|
|
4
|
+
export declare function checkAndRenewApiKey(): Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Start the API key renewal service
|
|
7
|
+
*/
|
|
8
|
+
export declare function startApiKeyRenewal(): void;
|
|
9
|
+
/**
|
|
10
|
+
* Stop the API key renewal service
|
|
11
|
+
*/
|
|
12
|
+
export declare function stopApiKeyRenewal(): void;
|
|
13
|
+
//# sourceMappingURL=api-key-renewal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key-renewal.d.ts","sourceRoot":"","sources":["../../src/services/api-key-renewal.ts"],"names":[],"mappings":"AA+JA;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAiD5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CA+BzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAOxC"}
|