@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.
Files changed (88) hide show
  1. package/README.md +701 -0
  2. package/deploy/logrotate.d/zn-vault-agent +14 -0
  3. package/deploy/systemd/zn-vault-agent.service +75 -0
  4. package/dist/commands/certs.d.ts +3 -0
  5. package/dist/commands/certs.d.ts.map +1 -0
  6. package/dist/commands/certs.js +369 -0
  7. package/dist/commands/certs.js.map +1 -0
  8. package/dist/commands/exec.d.ts +3 -0
  9. package/dist/commands/exec.d.ts.map +1 -0
  10. package/dist/commands/exec.js +193 -0
  11. package/dist/commands/exec.js.map +1 -0
  12. package/dist/commands/login.d.ts +3 -0
  13. package/dist/commands/login.d.ts.map +1 -0
  14. package/dist/commands/login.js +234 -0
  15. package/dist/commands/login.js.map +1 -0
  16. package/dist/commands/secrets.d.ts +3 -0
  17. package/dist/commands/secrets.d.ts.map +1 -0
  18. package/dist/commands/secrets.js +445 -0
  19. package/dist/commands/secrets.js.map +1 -0
  20. package/dist/commands/setup.d.ts +9 -0
  21. package/dist/commands/setup.d.ts.map +1 -0
  22. package/dist/commands/setup.js +346 -0
  23. package/dist/commands/setup.js.map +1 -0
  24. package/dist/commands/start.d.ts +3 -0
  25. package/dist/commands/start.d.ts.map +1 -0
  26. package/dist/commands/start.js +113 -0
  27. package/dist/commands/start.js.map +1 -0
  28. package/dist/commands/status.d.ts +3 -0
  29. package/dist/commands/status.d.ts.map +1 -0
  30. package/dist/commands/status.js +85 -0
  31. package/dist/commands/status.js.map +1 -0
  32. package/dist/commands/sync.d.ts +3 -0
  33. package/dist/commands/sync.d.ts.map +1 -0
  34. package/dist/commands/sync.js +126 -0
  35. package/dist/commands/sync.js.map +1 -0
  36. package/dist/index.d.ts +3 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +28 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/lib/api.d.ts +104 -0
  41. package/dist/lib/api.d.ts.map +1 -0
  42. package/dist/lib/api.js +338 -0
  43. package/dist/lib/api.js.map +1 -0
  44. package/dist/lib/config.d.ts +164 -0
  45. package/dist/lib/config.d.ts.map +1 -0
  46. package/dist/lib/config.js +299 -0
  47. package/dist/lib/config.js.map +1 -0
  48. package/dist/lib/deployer.d.ts +22 -0
  49. package/dist/lib/deployer.d.ts.map +1 -0
  50. package/dist/lib/deployer.js +407 -0
  51. package/dist/lib/deployer.js.map +1 -0
  52. package/dist/lib/health.d.ts +68 -0
  53. package/dist/lib/health.d.ts.map +1 -0
  54. package/dist/lib/health.js +216 -0
  55. package/dist/lib/health.js.map +1 -0
  56. package/dist/lib/logger.d.ts +38 -0
  57. package/dist/lib/logger.d.ts.map +1 -0
  58. package/dist/lib/logger.js +161 -0
  59. package/dist/lib/logger.js.map +1 -0
  60. package/dist/lib/metrics.d.ts +50 -0
  61. package/dist/lib/metrics.d.ts.map +1 -0
  62. package/dist/lib/metrics.js +273 -0
  63. package/dist/lib/metrics.js.map +1 -0
  64. package/dist/lib/secret-deployer.d.ts +22 -0
  65. package/dist/lib/secret-deployer.d.ts.map +1 -0
  66. package/dist/lib/secret-deployer.js +201 -0
  67. package/dist/lib/secret-deployer.js.map +1 -0
  68. package/dist/lib/validation.d.ts +25 -0
  69. package/dist/lib/validation.d.ts.map +1 -0
  70. package/dist/lib/validation.js +257 -0
  71. package/dist/lib/validation.js.map +1 -0
  72. package/dist/lib/websocket.d.ts +74 -0
  73. package/dist/lib/websocket.d.ts.map +1 -0
  74. package/dist/lib/websocket.js +441 -0
  75. package/dist/lib/websocket.js.map +1 -0
  76. package/dist/services/api-key-renewal.d.ts +13 -0
  77. package/dist/services/api-key-renewal.d.ts.map +1 -0
  78. package/dist/services/api-key-renewal.js +204 -0
  79. package/dist/services/api-key-renewal.js.map +1 -0
  80. package/dist/services/npm-auto-update.d.ts +60 -0
  81. package/dist/services/npm-auto-update.d.ts.map +1 -0
  82. package/dist/services/npm-auto-update.js +245 -0
  83. package/dist/services/npm-auto-update.js.map +1 -0
  84. package/dist/types/update.d.ts +19 -0
  85. package/dist/types/update.d.ts.map +1 -0
  86. package/dist/types/update.js +7 -0
  87. package/dist/types/update.js.map +1 -0
  88. package/package.json +74 -0
@@ -0,0 +1,257 @@
1
+ // Path: src/lib/validation.ts
2
+ // Configuration validation for zn-vault-agent
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import { configLogger as log } from './logger.js';
6
+ /**
7
+ * Validate a URL format
8
+ */
9
+ function isValidUrl(url) {
10
+ try {
11
+ const parsed = new URL(url);
12
+ return parsed.protocol === 'http:' || parsed.protocol === 'https:';
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ }
18
+ /**
19
+ * Validate octal permission format (e.g., "0640", "0600")
20
+ */
21
+ function isValidPermissions(mode) {
22
+ return /^0[0-7]{3}$/.test(mode);
23
+ }
24
+ /**
25
+ * Check if a directory exists or can be created
26
+ */
27
+ function isValidOutputPath(filePath) {
28
+ const dir = path.dirname(filePath);
29
+ if (fs.existsSync(dir)) {
30
+ return { valid: true };
31
+ }
32
+ // Check if parent of parent exists (one level of mkdir is OK)
33
+ const parentDir = path.dirname(dir);
34
+ if (fs.existsSync(parentDir)) {
35
+ return { valid: true };
36
+ }
37
+ return {
38
+ valid: false,
39
+ reason: `Parent directory does not exist: ${parentDir}`,
40
+ };
41
+ }
42
+ /**
43
+ * Validate a certificate target configuration
44
+ */
45
+ function validateTarget(target, index) {
46
+ const errors = [];
47
+ const warnings = [];
48
+ const prefix = `targets[${index}]`;
49
+ // Required fields
50
+ if (!target.certId || typeof target.certId !== 'string') {
51
+ errors.push({ field: `${prefix}.certId`, message: 'Certificate ID is required', value: target.certId });
52
+ }
53
+ if (!target.name || typeof target.name !== 'string') {
54
+ errors.push({ field: `${prefix}.name`, message: 'Target name is required', value: target.name });
55
+ }
56
+ // Outputs validation
57
+ if (!target.outputs || typeof target.outputs !== 'object') {
58
+ errors.push({ field: `${prefix}.outputs`, message: 'At least one output path is required' });
59
+ }
60
+ else {
61
+ const outputPaths = Object.entries(target.outputs).filter(([, v]) => v);
62
+ if (outputPaths.length === 0) {
63
+ errors.push({ field: `${prefix}.outputs`, message: 'At least one output path must be configured' });
64
+ }
65
+ for (const [key, outputPath] of outputPaths) {
66
+ if (typeof outputPath !== 'string')
67
+ continue;
68
+ // Check path is absolute
69
+ if (!path.isAbsolute(outputPath)) {
70
+ errors.push({
71
+ field: `${prefix}.outputs.${key}`,
72
+ message: 'Output path must be absolute',
73
+ value: outputPath,
74
+ });
75
+ }
76
+ else {
77
+ // Check parent directory exists
78
+ const pathCheck = isValidOutputPath(outputPath);
79
+ if (!pathCheck.valid) {
80
+ warnings.push({
81
+ field: `${prefix}.outputs.${key}`,
82
+ message: pathCheck.reason || 'Output directory may not exist',
83
+ suggestion: `Ensure directory exists: mkdir -p ${path.dirname(outputPath)}`,
84
+ });
85
+ }
86
+ }
87
+ }
88
+ }
89
+ // Mode validation
90
+ if (target.mode && !isValidPermissions(target.mode)) {
91
+ errors.push({
92
+ field: `${prefix}.mode`,
93
+ message: 'Invalid permission format. Use octal format like "0640" or "0600"',
94
+ value: target.mode,
95
+ });
96
+ }
97
+ // Owner validation (basic format check)
98
+ if (target.owner && !/^[a-z_][a-z0-9_-]*(:([a-z_][a-z0-9_-]*))?$/i.test(target.owner)) {
99
+ warnings.push({
100
+ field: `${prefix}.owner`,
101
+ message: 'Owner format may be invalid',
102
+ suggestion: 'Use format "user" or "user:group"',
103
+ });
104
+ }
105
+ // Reload command warning
106
+ if (target.reloadCmd) {
107
+ warnings.push({
108
+ field: `${prefix}.reloadCmd`,
109
+ message: 'Reload command will be executed with agent privileges',
110
+ suggestion: 'Ensure command is safe and necessary',
111
+ });
112
+ }
113
+ return { errors, warnings };
114
+ }
115
+ /**
116
+ * Validate the full agent configuration
117
+ */
118
+ export function validateConfig(config) {
119
+ const errors = [];
120
+ const warnings = [];
121
+ // Vault URL
122
+ if (!config.vaultUrl) {
123
+ errors.push({ field: 'vaultUrl', message: 'Vault URL is required' });
124
+ }
125
+ else if (!isValidUrl(config.vaultUrl)) {
126
+ errors.push({ field: 'vaultUrl', message: 'Invalid URL format', value: config.vaultUrl });
127
+ }
128
+ else if (config.vaultUrl.startsWith('http://')) {
129
+ warnings.push({
130
+ field: 'vaultUrl',
131
+ message: 'Using HTTP instead of HTTPS',
132
+ suggestion: 'Use HTTPS for production deployments',
133
+ });
134
+ }
135
+ // Tenant ID
136
+ if (!config.tenantId) {
137
+ errors.push({ field: 'tenantId', message: 'Tenant ID is required' });
138
+ }
139
+ // Authentication
140
+ if (!config.auth) {
141
+ errors.push({ field: 'auth', message: 'Authentication configuration is required' });
142
+ }
143
+ else {
144
+ const hasApiKey = !!config.auth.apiKey || !!process.env.ZNVAULT_API_KEY;
145
+ const hasPassword = (!!config.auth.username && !!config.auth.password) ||
146
+ (!!config.auth.username && !!process.env.ZNVAULT_PASSWORD);
147
+ if (!hasApiKey && !hasPassword) {
148
+ errors.push({
149
+ field: 'auth',
150
+ message: 'Either API key or username/password is required',
151
+ });
152
+ }
153
+ // Warn if credentials in config file
154
+ if (config.auth.apiKey) {
155
+ warnings.push({
156
+ field: 'auth.apiKey',
157
+ message: 'API key stored in config file',
158
+ suggestion: 'Use ZNVAULT_API_KEY environment variable instead',
159
+ });
160
+ }
161
+ if (config.auth.password) {
162
+ warnings.push({
163
+ field: 'auth.password',
164
+ message: 'Password stored in config file',
165
+ suggestion: 'Use ZNVAULT_PASSWORD environment variable instead',
166
+ });
167
+ }
168
+ }
169
+ // Insecure mode warning
170
+ if (config.insecure) {
171
+ warnings.push({
172
+ field: 'insecure',
173
+ message: 'TLS verification is disabled',
174
+ suggestion: 'Enable TLS verification for production deployments',
175
+ });
176
+ }
177
+ // Targets
178
+ if (!config.targets || !Array.isArray(config.targets)) {
179
+ warnings.push({
180
+ field: 'targets',
181
+ message: 'No certificate targets configured',
182
+ suggestion: 'Add targets using: zn-vault-agent add <cert-id>',
183
+ });
184
+ }
185
+ else if (config.targets.length === 0) {
186
+ warnings.push({
187
+ field: 'targets',
188
+ message: 'No certificate targets configured',
189
+ suggestion: 'Add targets using: zn-vault-agent add <cert-id>',
190
+ });
191
+ }
192
+ else {
193
+ for (let i = 0; i < config.targets.length; i++) {
194
+ const targetValidation = validateTarget(config.targets[i], i);
195
+ errors.push(...targetValidation.errors);
196
+ warnings.push(...targetValidation.warnings);
197
+ }
198
+ }
199
+ // Poll interval
200
+ if (config.pollInterval !== undefined) {
201
+ if (typeof config.pollInterval !== 'number' || config.pollInterval < 60) {
202
+ warnings.push({
203
+ field: 'pollInterval',
204
+ message: 'Poll interval is less than 60 seconds',
205
+ suggestion: 'Consider using at least 300 seconds (5 minutes) to reduce load',
206
+ });
207
+ }
208
+ }
209
+ const result = {
210
+ valid: errors.length === 0,
211
+ errors,
212
+ warnings,
213
+ };
214
+ // Log validation results
215
+ if (errors.length > 0) {
216
+ log.error({ errors }, 'Configuration validation failed');
217
+ }
218
+ if (warnings.length > 0) {
219
+ log.warn({ warnings }, 'Configuration has warnings');
220
+ }
221
+ return result;
222
+ }
223
+ /**
224
+ * Format validation result for display
225
+ */
226
+ export function formatValidationResult(result) {
227
+ const lines = [];
228
+ if (result.errors.length > 0) {
229
+ lines.push('Errors:');
230
+ for (const error of result.errors) {
231
+ lines.push(` ✗ ${error.field}: ${error.message}`);
232
+ if (error.value !== undefined) {
233
+ lines.push(` Value: ${JSON.stringify(error.value)}`);
234
+ }
235
+ }
236
+ }
237
+ if (result.warnings.length > 0) {
238
+ if (lines.length > 0)
239
+ lines.push('');
240
+ lines.push('Warnings:');
241
+ for (const warning of result.warnings) {
242
+ lines.push(` ⚠ ${warning.field}: ${warning.message}`);
243
+ if (warning.suggestion) {
244
+ lines.push(` Suggestion: ${warning.suggestion}`);
245
+ }
246
+ }
247
+ }
248
+ if (result.valid && result.warnings.length === 0) {
249
+ lines.push('✓ Configuration is valid');
250
+ }
251
+ else if (result.valid) {
252
+ lines.push('');
253
+ lines.push('✓ Configuration is valid (with warnings)');
254
+ }
255
+ return lines.join('\n');
256
+ }
257
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ export interface CertificateEvent {
2
+ event: 'certificate.rotated' | 'certificate.created' | 'certificate.deleted';
3
+ certificateId: string;
4
+ fingerprint: string;
5
+ version: number;
6
+ timestamp: string;
7
+ }
8
+ export interface SecretEvent {
9
+ event: 'secret.created' | 'secret.updated' | 'secret.rotated' | 'secret.deleted';
10
+ secretId: string;
11
+ alias: string;
12
+ version: number;
13
+ timestamp: string;
14
+ tenantId: string;
15
+ }
16
+ export interface AgentUpdateEvent {
17
+ event: 'update.available';
18
+ channel: 'stable' | 'beta' | 'staging';
19
+ version: string;
20
+ releaseNotes?: string;
21
+ timestamp: string;
22
+ }
23
+ /**
24
+ * Unified agent event (from /v1/ws/agent)
25
+ */
26
+ export interface UnifiedAgentEvent {
27
+ type: 'pong' | 'event' | 'subscribed' | 'registered' | 'error';
28
+ topic?: 'certificates' | 'secrets' | 'updates';
29
+ data?: CertificateEvent | SecretEvent | AgentUpdateEvent;
30
+ subscriptions?: {
31
+ certificates: string[];
32
+ secrets: string[];
33
+ updates: string | null;
34
+ };
35
+ agentId?: string;
36
+ message?: string;
37
+ timestamp?: string;
38
+ }
39
+ /**
40
+ * Unified WebSocket client interface for /v1/ws/agent
41
+ */
42
+ export interface UnifiedWebSocketClient {
43
+ connect(): void;
44
+ disconnect(): void;
45
+ isConnected(): boolean;
46
+ onCertificateEvent(handler: (event: CertificateEvent) => void): void;
47
+ onSecretEvent(handler: (event: SecretEvent) => void): void;
48
+ onUpdateEvent(handler: (event: AgentUpdateEvent) => void): void;
49
+ onConnect(handler: (agentId: string) => void): void;
50
+ onDisconnect(handler: (reason: string) => void): void;
51
+ onError(handler: (error: Error) => void): void;
52
+ updateSubscriptions(subs: {
53
+ certIds?: string[];
54
+ secretIds?: string[];
55
+ updateChannel?: string;
56
+ }): void;
57
+ }
58
+ /**
59
+ * Create unified WebSocket client for /v1/ws/agent
60
+ *
61
+ * This client connects to a single endpoint and subscribes to topics:
62
+ * - certificates: certificate rotation events
63
+ * - secrets: secret update events
64
+ * - updates: agent update availability events
65
+ */
66
+ export declare function createUnifiedWebSocketClient(): UnifiedWebSocketClient;
67
+ /**
68
+ * Start the agent daemon with unified WebSocket connection
69
+ */
70
+ export declare function startDaemon(options?: {
71
+ verbose?: boolean;
72
+ healthPort?: number;
73
+ }): Promise<void>;
74
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/lib/websocket.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC;IAC/D,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;IAC/C,IAAI,CAAC,EAAE,gBAAgB,GAAG,WAAW,GAAG,gBAAgB,CAAC;IACzD,aAAa,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,IAAI,IAAI,CAAC;IAChB,UAAU,IAAI,IAAI,CAAC;IACnB,WAAW,IAAI,OAAO,CAAC;IACvB,kBAAkB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAC;IACrE,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3D,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAC;IAChE,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IACpD,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IACtD,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/C,mBAAmB,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACvG;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CAwQrE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiNrB"}