vaulter 0.2.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 (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +490 -0
  3. package/dist/bin/minienv-mcp.cjs +17 -0
  4. package/dist/bin/minienv.cjs +146 -0
  5. package/dist/cli/commands/delete.d.ts +22 -0
  6. package/dist/cli/commands/delete.d.ts.map +1 -0
  7. package/dist/cli/commands/delete.js +85 -0
  8. package/dist/cli/commands/delete.js.map +1 -0
  9. package/dist/cli/commands/export.d.ts +21 -0
  10. package/dist/cli/commands/export.d.ts.map +1 -0
  11. package/dist/cli/commands/export.js +126 -0
  12. package/dist/cli/commands/export.js.map +1 -0
  13. package/dist/cli/commands/get.d.ts +21 -0
  14. package/dist/cli/commands/get.d.ts.map +1 -0
  15. package/dist/cli/commands/get.js +62 -0
  16. package/dist/cli/commands/get.js.map +1 -0
  17. package/dist/cli/commands/init.d.ts +20 -0
  18. package/dist/cli/commands/init.d.ts.map +1 -0
  19. package/dist/cli/commands/init.js +98 -0
  20. package/dist/cli/commands/init.js.map +1 -0
  21. package/dist/cli/commands/integrations/helm.d.ts +21 -0
  22. package/dist/cli/commands/integrations/helm.d.ts.map +1 -0
  23. package/dist/cli/commands/integrations/helm.js +113 -0
  24. package/dist/cli/commands/integrations/helm.js.map +1 -0
  25. package/dist/cli/commands/integrations/kubernetes.d.ts +25 -0
  26. package/dist/cli/commands/integrations/kubernetes.d.ts.map +1 -0
  27. package/dist/cli/commands/integrations/kubernetes.js +199 -0
  28. package/dist/cli/commands/integrations/kubernetes.js.map +1 -0
  29. package/dist/cli/commands/integrations/terraform.d.ts +25 -0
  30. package/dist/cli/commands/integrations/terraform.d.ts.map +1 -0
  31. package/dist/cli/commands/integrations/terraform.js +131 -0
  32. package/dist/cli/commands/integrations/terraform.js.map +1 -0
  33. package/dist/cli/commands/key.d.ts +19 -0
  34. package/dist/cli/commands/key.d.ts.map +1 -0
  35. package/dist/cli/commands/key.js +247 -0
  36. package/dist/cli/commands/key.js.map +1 -0
  37. package/dist/cli/commands/list.d.ts +21 -0
  38. package/dist/cli/commands/list.d.ts.map +1 -0
  39. package/dist/cli/commands/list.js +94 -0
  40. package/dist/cli/commands/list.js.map +1 -0
  41. package/dist/cli/commands/pull.d.ts +22 -0
  42. package/dist/cli/commands/pull.d.ts.map +1 -0
  43. package/dist/cli/commands/pull.js +142 -0
  44. package/dist/cli/commands/pull.js.map +1 -0
  45. package/dist/cli/commands/push.d.ts +22 -0
  46. package/dist/cli/commands/push.d.ts.map +1 -0
  47. package/dist/cli/commands/push.js +181 -0
  48. package/dist/cli/commands/push.js.map +1 -0
  49. package/dist/cli/commands/services.d.ts +18 -0
  50. package/dist/cli/commands/services.d.ts.map +1 -0
  51. package/dist/cli/commands/services.js +92 -0
  52. package/dist/cli/commands/services.js.map +1 -0
  53. package/dist/cli/commands/set.d.ts +22 -0
  54. package/dist/cli/commands/set.d.ts.map +1 -0
  55. package/dist/cli/commands/set.js +93 -0
  56. package/dist/cli/commands/set.js.map +1 -0
  57. package/dist/cli/commands/sync.d.ts +23 -0
  58. package/dist/cli/commands/sync.d.ts.map +1 -0
  59. package/dist/cli/commands/sync.js +362 -0
  60. package/dist/cli/commands/sync.js.map +1 -0
  61. package/dist/cli/index.d.ts +7 -0
  62. package/dist/cli/index.d.ts.map +1 -0
  63. package/dist/cli/index.js +266 -0
  64. package/dist/cli/index.js.map +1 -0
  65. package/dist/cli/lib/create-client.d.ts +21 -0
  66. package/dist/cli/lib/create-client.d.ts.map +1 -0
  67. package/dist/cli/lib/create-client.js +68 -0
  68. package/dist/cli/lib/create-client.js.map +1 -0
  69. package/dist/cli/lib/hooks.d.ts +5 -0
  70. package/dist/cli/lib/hooks.d.ts.map +1 -0
  71. package/dist/cli/lib/hooks.js +17 -0
  72. package/dist/cli/lib/hooks.js.map +1 -0
  73. package/dist/cli/preload.d.ts +6 -0
  74. package/dist/cli/preload.d.ts.map +1 -0
  75. package/dist/cli/preload.js +7 -0
  76. package/dist/cli/preload.js.map +1 -0
  77. package/dist/client.d.ts +89 -0
  78. package/dist/client.d.ts.map +1 -0
  79. package/dist/client.js +350 -0
  80. package/dist/client.js.map +1 -0
  81. package/dist/index.d.ts +20 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +33 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/lib/batch-runner.d.ts +39 -0
  86. package/dist/lib/batch-runner.d.ts.map +1 -0
  87. package/dist/lib/batch-runner.js +117 -0
  88. package/dist/lib/batch-runner.js.map +1 -0
  89. package/dist/lib/config-loader.d.ts +45 -0
  90. package/dist/lib/config-loader.d.ts.map +1 -0
  91. package/dist/lib/config-loader.js +357 -0
  92. package/dist/lib/config-loader.js.map +1 -0
  93. package/dist/lib/env-parser.d.ts +38 -0
  94. package/dist/lib/env-parser.d.ts.map +1 -0
  95. package/dist/lib/env-parser.js +281 -0
  96. package/dist/lib/env-parser.js.map +1 -0
  97. package/dist/lib/monorepo.d.ts +39 -0
  98. package/dist/lib/monorepo.d.ts.map +1 -0
  99. package/dist/lib/monorepo.js +181 -0
  100. package/dist/lib/monorepo.js.map +1 -0
  101. package/dist/lib/pattern-matcher.d.ts +5 -0
  102. package/dist/lib/pattern-matcher.d.ts.map +1 -0
  103. package/dist/lib/pattern-matcher.js +18 -0
  104. package/dist/lib/pattern-matcher.js.map +1 -0
  105. package/dist/lib/s3-key-loader.d.ts +33 -0
  106. package/dist/lib/s3-key-loader.d.ts.map +1 -0
  107. package/dist/lib/s3-key-loader.js +83 -0
  108. package/dist/lib/s3-key-loader.js.map +1 -0
  109. package/dist/lib/secret-patterns.d.ts +10 -0
  110. package/dist/lib/secret-patterns.d.ts.map +1 -0
  111. package/dist/lib/secret-patterns.js +27 -0
  112. package/dist/lib/secret-patterns.js.map +1 -0
  113. package/dist/load.d.ts +14 -0
  114. package/dist/load.d.ts.map +1 -0
  115. package/dist/load.js +15 -0
  116. package/dist/load.js.map +1 -0
  117. package/dist/loader.d.ts +63 -0
  118. package/dist/loader.d.ts.map +1 -0
  119. package/dist/loader.js +50 -0
  120. package/dist/loader.js.map +1 -0
  121. package/dist/mcp/index.d.ts +8 -0
  122. package/dist/mcp/index.d.ts.map +1 -0
  123. package/dist/mcp/index.js +14 -0
  124. package/dist/mcp/index.js.map +1 -0
  125. package/dist/mcp/preload.d.ts +6 -0
  126. package/dist/mcp/preload.d.ts.map +1 -0
  127. package/dist/mcp/preload.js +7 -0
  128. package/dist/mcp/preload.js.map +1 -0
  129. package/dist/mcp/resources.d.ts +23 -0
  130. package/dist/mcp/resources.d.ts.map +1 -0
  131. package/dist/mcp/resources.js +112 -0
  132. package/dist/mcp/resources.js.map +1 -0
  133. package/dist/mcp/server.d.ts +16 -0
  134. package/dist/mcp/server.d.ts.map +1 -0
  135. package/dist/mcp/server.js +81 -0
  136. package/dist/mcp/server.js.map +1 -0
  137. package/dist/mcp/tools.d.ts +20 -0
  138. package/dist/mcp/tools.d.ts.map +1 -0
  139. package/dist/mcp/tools.js +405 -0
  140. package/dist/mcp/tools.js.map +1 -0
  141. package/dist/types.d.ts +182 -0
  142. package/dist/types.d.ts.map +1 -0
  143. package/dist/types.js +37 -0
  144. package/dist/types.js.map +1 -0
  145. package/package.json +114 -0
@@ -0,0 +1,362 @@
1
+ /**
2
+ * Vaulter CLI - Sync Command
3
+ *
4
+ * Bidirectional sync between local .env file and backend
5
+ * with conflict detection
6
+ */
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+ import { createClientFromConfig } from '../lib/create-client.js';
10
+ import { runHook } from '../lib/hooks.js';
11
+ import { findConfigDir, getEnvFilePath } from '../../lib/config-loader.js';
12
+ import { parseEnvFile, hasStdinData, parseEnvFromStdin, serializeEnv } from '../../lib/env-parser.js';
13
+ import { compileGlobPatterns } from '../../lib/pattern-matcher.js';
14
+ import { discoverServices, filterServices, findMonorepoRoot, formatServiceList } from '../../lib/monorepo.js';
15
+ import { runBatch, formatBatchResult, formatBatchResultJson } from '../../lib/batch-runner.js';
16
+ /**
17
+ * Check if this is a production environment
18
+ */
19
+ function isProdEnvironment(env) {
20
+ return env === 'prd' || env === 'dr';
21
+ }
22
+ /**
23
+ * Run sync for a single service
24
+ */
25
+ async function syncSingleService(context, serviceInfo) {
26
+ const { args, config, project, service, environment, verbose, dryRun } = context;
27
+ // Use service info if provided (batch mode)
28
+ const effectiveConfig = serviceInfo?.config || config;
29
+ const effectiveProject = serviceInfo?.config.project || project;
30
+ const effectiveService = serviceInfo?.name || service;
31
+ const syncConfig = effectiveConfig?.sync;
32
+ const conflictMode = syncConfig?.conflict || 'local';
33
+ const ignorePatterns = syncConfig?.ignore || [];
34
+ const requiredKeys = syncConfig?.required?.[environment] || [];
35
+ const isIgnored = compileGlobPatterns(ignorePatterns);
36
+ // Determine source of variables
37
+ let localVars;
38
+ let envFilePath = null;
39
+ if (hasStdinData() && !serviceInfo) {
40
+ // Read from stdin (only for single service mode)
41
+ if (verbose) {
42
+ console.error('Reading variables from stdin...');
43
+ }
44
+ localVars = await parseEnvFromStdin();
45
+ }
46
+ else {
47
+ // Read from file
48
+ const filePath = args.file || args.f;
49
+ let resolvedPath;
50
+ if (filePath && !serviceInfo) {
51
+ resolvedPath = path.resolve(filePath);
52
+ }
53
+ else {
54
+ // Default to .vaulter/environments/<env>.env
55
+ const configDir = serviceInfo?.configDir || findConfigDir();
56
+ if (!configDir) {
57
+ throw new Error('No config directory found and no file specified');
58
+ }
59
+ resolvedPath = getEnvFilePath(configDir, environment);
60
+ }
61
+ if (!fs.existsSync(resolvedPath)) {
62
+ throw new Error(`File not found: ${resolvedPath}`);
63
+ }
64
+ if (verbose) {
65
+ console.error(`Reading variables from ${resolvedPath}`);
66
+ }
67
+ envFilePath = resolvedPath;
68
+ localVars = parseEnvFile(resolvedPath);
69
+ }
70
+ if (verbose) {
71
+ console.error(`Found ${Object.keys(localVars).length} local variables`);
72
+ }
73
+ if (!dryRun) {
74
+ runHook(effectiveConfig?.hooks?.pre_sync, 'pre_sync', verbose);
75
+ }
76
+ const client = await createClientFromConfig({ args, config: effectiveConfig, verbose });
77
+ try {
78
+ await client.connect();
79
+ const remoteVars = await client.export(effectiveProject, environment, effectiveService);
80
+ const mergedVars = { ...localVars };
81
+ const syncVars = {};
82
+ const added = [];
83
+ const updated = [];
84
+ const unchanged = [];
85
+ const localAdded = [];
86
+ const localUpdated = [];
87
+ const conflicts = [];
88
+ const canUpdateLocal = !!envFilePath;
89
+ const allKeys = new Set([
90
+ ...Object.keys(localVars),
91
+ ...Object.keys(remoteVars)
92
+ ]);
93
+ for (const key of allKeys) {
94
+ if (isIgnored(key)) {
95
+ continue;
96
+ }
97
+ const localValue = localVars[key];
98
+ const remoteValue = remoteVars[key];
99
+ if (localValue !== undefined && remoteValue !== undefined) {
100
+ if (localValue === remoteValue) {
101
+ syncVars[key] = localValue;
102
+ unchanged.push(key);
103
+ continue;
104
+ }
105
+ if (conflictMode === 'local') {
106
+ syncVars[key] = localValue;
107
+ updated.push(key);
108
+ continue;
109
+ }
110
+ if (conflictMode === 'remote') {
111
+ if (!canUpdateLocal) {
112
+ conflicts.push({ key, localValue, remoteValue });
113
+ continue;
114
+ }
115
+ mergedVars[key] = remoteValue;
116
+ localUpdated.push(key);
117
+ syncVars[key] = remoteValue;
118
+ continue;
119
+ }
120
+ conflicts.push({ key, localValue, remoteValue });
121
+ continue;
122
+ }
123
+ if (localValue !== undefined) {
124
+ syncVars[key] = localValue;
125
+ added.push(key);
126
+ continue;
127
+ }
128
+ if (remoteValue !== undefined) {
129
+ if (!canUpdateLocal) {
130
+ if (conflictMode === 'remote' || conflictMode === 'prompt' || conflictMode === 'error') {
131
+ conflicts.push({ key, localValue: '', remoteValue });
132
+ }
133
+ syncVars[key] = remoteValue;
134
+ continue;
135
+ }
136
+ mergedVars[key] = remoteValue;
137
+ localAdded.push(key);
138
+ syncVars[key] = remoteValue;
139
+ }
140
+ }
141
+ const missingRequired = requiredKeys
142
+ .filter(key => !isIgnored(key))
143
+ .filter(key => !(key in syncVars));
144
+ if (missingRequired.length > 0) {
145
+ throw new Error(`Missing required keys for ${environment}: ${missingRequired.join(', ')}`);
146
+ }
147
+ const isBlockingConflict = (conflictMode === 'prompt' || conflictMode === 'error') &&
148
+ conflicts.length > 0;
149
+ if (isBlockingConflict && !dryRun) {
150
+ const conflictKeys = conflicts.map(c => c.key).join(', ');
151
+ throw new Error(`Sync conflicts detected: ${conflictKeys}`);
152
+ }
153
+ if (!dryRun) {
154
+ if (canUpdateLocal && envFilePath && (localAdded.length > 0 || localUpdated.length > 0)) {
155
+ const envContent = serializeEnv(mergedVars);
156
+ fs.writeFileSync(envFilePath, envContent + '\n');
157
+ }
158
+ for (const key of [...added, ...updated]) {
159
+ await client.set({
160
+ key,
161
+ value: syncVars[key],
162
+ project: effectiveProject,
163
+ environment,
164
+ service: effectiveService,
165
+ metadata: {
166
+ source: 'sync'
167
+ }
168
+ });
169
+ }
170
+ runHook(effectiveConfig?.hooks?.post_sync, 'post_sync', verbose);
171
+ }
172
+ return {
173
+ added,
174
+ updated,
175
+ deleted: [],
176
+ unchanged,
177
+ conflicts,
178
+ localAdded,
179
+ localUpdated
180
+ };
181
+ }
182
+ finally {
183
+ await client.disconnect();
184
+ }
185
+ }
186
+ /**
187
+ * Run the sync command
188
+ */
189
+ export async function runSync(context) {
190
+ const { args, config, project, service, environment, verbose, dryRun, jsonOutput } = context;
191
+ // Check for batch mode (--all or multiple services with -s)
192
+ const allServices = args.all;
193
+ const serviceFilter = args.service || args.s;
194
+ if (allServices || (serviceFilter && serviceFilter.includes(','))) {
195
+ await runBatchSync(context);
196
+ return;
197
+ }
198
+ if (!project) {
199
+ console.error('Error: Project not specified and no config found');
200
+ console.error('Run "vaulter init" or specify --project');
201
+ process.exit(1);
202
+ }
203
+ // Production confirmation
204
+ if (isProdEnvironment(environment) && config?.security?.confirm_production && !args.force) {
205
+ console.error(`Warning: You are syncing to ${environment} (production) environment`);
206
+ console.error('Use --force to confirm this action');
207
+ process.exit(1);
208
+ }
209
+ try {
210
+ const result = await syncSingleService(context);
211
+ if (jsonOutput) {
212
+ console.log(JSON.stringify({
213
+ success: true,
214
+ dryRun,
215
+ project,
216
+ service,
217
+ environment,
218
+ added: result.added,
219
+ updated: result.updated,
220
+ deleted: result.deleted,
221
+ unchanged: result.unchanged,
222
+ conflicts: result.conflicts,
223
+ localAdded: result.localAdded || [],
224
+ localUpdated: result.localUpdated || [],
225
+ localDeleted: result.localDeleted || []
226
+ }));
227
+ }
228
+ else if (dryRun) {
229
+ console.log('Dry run - changes that would be made:');
230
+ if (result.added.length > 0) {
231
+ console.log(` Remote add (${result.added.length}): ${result.added.join(', ')}`);
232
+ }
233
+ if (result.updated.length > 0) {
234
+ console.log(` Remote update (${result.updated.length}): ${result.updated.join(', ')}`);
235
+ }
236
+ if ((result.localAdded || []).length > 0) {
237
+ console.log(` Local add (${result.localAdded?.length}): ${result.localAdded?.join(', ')}`);
238
+ }
239
+ if ((result.localUpdated || []).length > 0) {
240
+ console.log(` Local update (${result.localUpdated?.length}): ${result.localUpdated?.join(', ')}`);
241
+ }
242
+ if (result.unchanged.length > 0) {
243
+ console.log(` Unchanged: ${result.unchanged.length} variables`);
244
+ }
245
+ if (result.conflicts.length > 0) {
246
+ console.log(` Conflicts (${result.conflicts.length}): ${result.conflicts.map(c => c.key).join(', ')}`);
247
+ }
248
+ if (result.added.length === 0 &&
249
+ result.updated.length === 0 &&
250
+ (result.localAdded || []).length === 0 &&
251
+ (result.localUpdated || []).length === 0) {
252
+ console.log(' No changes needed');
253
+ }
254
+ }
255
+ else {
256
+ console.log(`✓ Synced ${project}/${environment}`);
257
+ if (result.added.length > 0) {
258
+ console.log(` Remote added: ${result.added.length} (${result.added.join(', ')})`);
259
+ }
260
+ if (result.updated.length > 0) {
261
+ console.log(` Remote updated: ${result.updated.length} (${result.updated.join(', ')})`);
262
+ }
263
+ if ((result.localAdded || []).length > 0) {
264
+ console.log(` Local added: ${result.localAdded?.length} (${result.localAdded?.join(', ')})`);
265
+ }
266
+ if ((result.localUpdated || []).length > 0) {
267
+ console.log(` Local updated: ${result.localUpdated?.length} (${result.localUpdated?.join(', ')})`);
268
+ }
269
+ if (result.unchanged.length > 0) {
270
+ console.log(` Unchanged: ${result.unchanged.length}`);
271
+ }
272
+ if (result.conflicts.length > 0) {
273
+ console.log(` Conflicts: ${result.conflicts.map(c => c.key).join(', ')}`);
274
+ }
275
+ }
276
+ }
277
+ catch (err) {
278
+ console.error(`Error: ${err.message}`);
279
+ process.exit(1);
280
+ }
281
+ }
282
+ /**
283
+ * Run batch sync across multiple services
284
+ */
285
+ async function runBatchSync(context) {
286
+ const { args, environment, verbose, dryRun, jsonOutput } = context;
287
+ // Find monorepo root
288
+ const root = findMonorepoRoot();
289
+ if (!root) {
290
+ console.error('Error: Not inside a monorepo');
291
+ console.error('Run this command from within a project that has nested .vaulter directories');
292
+ process.exit(1);
293
+ }
294
+ // Discover services
295
+ let services = discoverServices(root);
296
+ if (services.length === 0) {
297
+ console.error('Error: No services found in monorepo');
298
+ process.exit(1);
299
+ }
300
+ // Filter services if pattern specified
301
+ const serviceFilter = args.service || args.s;
302
+ if (serviceFilter && !args.all) {
303
+ services = filterServices(services, serviceFilter);
304
+ if (services.length === 0) {
305
+ console.error(`Error: No services match pattern: ${serviceFilter}`);
306
+ console.error('');
307
+ console.error('Available services:');
308
+ const allServices = discoverServices(root);
309
+ for (const svc of allServices) {
310
+ console.error(` • ${svc.name}`);
311
+ }
312
+ process.exit(1);
313
+ }
314
+ }
315
+ if (verbose) {
316
+ console.error(formatServiceList(services));
317
+ console.error('');
318
+ }
319
+ // Production confirmation for batch
320
+ if (isProdEnvironment(environment) && !args.force) {
321
+ console.error(`Warning: You are syncing ${services.length} services to ${environment} (production)`);
322
+ console.error('Use --force to confirm this action');
323
+ process.exit(1);
324
+ }
325
+ // Run batch operation
326
+ const batchResult = await runBatch(services, environment, async (service, env) => {
327
+ return syncSingleService({ ...context, config: service.config }, service);
328
+ }, {
329
+ verbose,
330
+ onProgress: verbose ? (completed, total, current) => {
331
+ console.error(`[${completed + 1}/${total}] Syncing ${current.name}...`);
332
+ } : undefined
333
+ });
334
+ // Output results
335
+ if (jsonOutput) {
336
+ console.log(JSON.stringify(formatBatchResultJson(batchResult)));
337
+ }
338
+ else {
339
+ console.log(formatBatchResult(batchResult, (op) => {
340
+ if (op.error) {
341
+ return `✗ ${op.service.name}: ${op.error.message}`;
342
+ }
343
+ const r = op.result;
344
+ const remoteChanges = r.added.length + r.updated.length + r.deleted.length;
345
+ const localChanges = (r.localAdded?.length || 0) + (r.localUpdated?.length || 0) + (r.localDeleted?.length || 0);
346
+ const parts = [];
347
+ if (remoteChanges > 0) {
348
+ parts.push(`remote ${remoteChanges}`);
349
+ }
350
+ if (localChanges > 0) {
351
+ parts.push(`local ${localChanges}`);
352
+ }
353
+ const summary = parts.length > 0 ? parts.join(', ') : 'no changes';
354
+ return `✓ ${op.service.name}: ${summary} (${op.duration}ms)`;
355
+ }));
356
+ }
357
+ // Exit with error if any failed
358
+ if (batchResult.failed > 0) {
359
+ process.exit(1);
360
+ }
361
+ }
362
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/cli/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Vaulter CLI
3
+ *
4
+ * Multi-backend environment variable and secrets manager
5
+ */
6
+ import './preload.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,cAAc,CAAA"}
@@ -0,0 +1,266 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Vaulter CLI
4
+ *
5
+ * Multi-backend environment variable and secrets manager
6
+ */
7
+ // Preload must be first - sets process.maxListeners before other imports
8
+ import './preload.js';
9
+ import minimist from 'minimist';
10
+ import { loadConfig, getProjectName } from '../lib/config-loader.js';
11
+ // Version is injected at build time or read from package.json
12
+ const VERSION = process.env.VAULTER_VERSION || '0.1.0';
13
+ // CLI commands
14
+ import { runInit } from './commands/init.js';
15
+ import { runGet } from './commands/get.js';
16
+ import { runSet } from './commands/set.js';
17
+ import { runDelete } from './commands/delete.js';
18
+ import { runList } from './commands/list.js';
19
+ import { runExport } from './commands/export.js';
20
+ import { runSync } from './commands/sync.js';
21
+ import { runPull } from './commands/pull.js';
22
+ import { runPush } from './commands/push.js';
23
+ import { runK8sSecret, runK8sConfigMap } from './commands/integrations/kubernetes.js';
24
+ import { runHelmValues } from './commands/integrations/helm.js';
25
+ import { runTfVars, runTfJson } from './commands/integrations/terraform.js';
26
+ import { runKey } from './commands/key.js';
27
+ import { runServices } from './commands/services.js';
28
+ import { startServer as startMcpServer } from '../mcp/server.js';
29
+ /**
30
+ * Parse command line arguments
31
+ */
32
+ function parseArgs() {
33
+ return minimist(process.argv.slice(2), {
34
+ string: ['project', 'p', 'service', 's', 'env', 'e', 'backend', 'b', 'key', 'k', 'file', 'f', 'output', 'o', 'namespace', 'n', 'format'],
35
+ boolean: ['verbose', 'v', 'dry-run', 'json', 'no-color', 'help', 'h', 'version', 'force', 'all'],
36
+ alias: {
37
+ p: 'project',
38
+ s: 'service',
39
+ e: 'env',
40
+ b: 'backend',
41
+ k: 'key',
42
+ v: 'verbose',
43
+ f: 'file',
44
+ o: 'output',
45
+ h: 'help',
46
+ n: 'namespace'
47
+ },
48
+ default: {
49
+ verbose: false,
50
+ 'dry-run': false,
51
+ json: false,
52
+ 'no-color': false
53
+ }
54
+ });
55
+ }
56
+ /**
57
+ * Show help
58
+ */
59
+ function showHelp() {
60
+ console.log(`
61
+ vaulter - Multi-backend environment variable and secrets manager
62
+
63
+ Usage:
64
+ vaulter <command> [options]
65
+
66
+ Commands:
67
+ init Initialize a new .vaulter configuration
68
+ get <key> Get a single environment variable
69
+ set <key> <value> Set an environment variable
70
+ delete <key> Delete an environment variable
71
+ list List all environment variables
72
+ export Export variables for shell evaluation
73
+ sync Merge local .env file with backend
74
+ pull Pull variables from backend to local .env
75
+ push Push local .env to backend
76
+ key generate Generate a new encryption key
77
+ services List services in monorepo
78
+ config Manage configuration
79
+ mcp Start MCP server for Claude integration
80
+
81
+ Integration Commands:
82
+ k8s:secret Generate Kubernetes Secret YAML
83
+ k8s:configmap Generate Kubernetes ConfigMap YAML
84
+ helm:values Generate Helm values.yaml
85
+ tf:vars Generate Terraform .tfvars
86
+ tf:json Generate Terraform JSON
87
+
88
+ Global Options:
89
+ -p, --project <name> Project name (default: from config or directory)
90
+ -s, --service <name> Service name (for monorepos, supports comma-separated)
91
+ -e, --env <env> Environment (dev/stg/prd/sbx/dr)
92
+ -b, --backend <url> Backend URL override
93
+ -k, --key <path> Encryption key path or raw key
94
+ -v, --verbose Enable verbose output
95
+ --all Apply to all services in monorepo
96
+ --dry-run Show what would be done without making changes
97
+ --json Output in JSON format
98
+ --no-color Disable colored output
99
+ -h, --help Show this help message
100
+ --version Show version
101
+
102
+ Examples:
103
+ # Initialize project
104
+ vaulter init
105
+
106
+ # Get a variable
107
+ vaulter get DATABASE_URL -e prd
108
+
109
+ # Set a variable
110
+ vaulter set API_KEY "sk-..." -e prd
111
+
112
+ # Export for shell
113
+ eval $(vaulter export -e dev)
114
+
115
+ # Sync local .env
116
+ vaulter sync -f .env.local -e dev
117
+
118
+ # Sync all services in monorepo
119
+ vaulter sync -e dev --all
120
+
121
+ # Sync specific services
122
+ vaulter sync -e dev -s svc-auth,svc-api
123
+
124
+ # List services in monorepo
125
+ vaulter services
126
+
127
+ # Generate K8s secret
128
+ vaulter k8s:secret -e prd | kubectl apply -f -
129
+
130
+ Documentation: https://github.com/tetis-io/vaulter
131
+ `);
132
+ }
133
+ /**
134
+ * Show version
135
+ */
136
+ function showVersion() {
137
+ console.log(`vaulter v${VERSION}`);
138
+ }
139
+ /**
140
+ * Main entry point
141
+ */
142
+ async function main() {
143
+ const args = parseArgs();
144
+ // Handle version
145
+ if (args.version) {
146
+ showVersion();
147
+ return;
148
+ }
149
+ // Handle help
150
+ if (args.help || args.h || args._.length === 0) {
151
+ showHelp();
152
+ return;
153
+ }
154
+ const command = args._[0];
155
+ // Load configuration
156
+ let config;
157
+ try {
158
+ config = loadConfig();
159
+ }
160
+ catch (err) {
161
+ // Config not found is OK for some commands
162
+ config = null;
163
+ }
164
+ // Resolve options
165
+ const environment = (args.env || args.e || config?.default_environment || 'dev');
166
+ const project = args.project || args.p || (config ? getProjectName(config) : '');
167
+ const service = args.service || args.s || config?.service;
168
+ const verbose = args.verbose || args.v || false;
169
+ const dryRun = args['dry-run'] || false;
170
+ const jsonOutput = args.json || false;
171
+ const noColor = args['no-color'] || false;
172
+ // Context for commands
173
+ const context = {
174
+ args,
175
+ config,
176
+ project,
177
+ service,
178
+ environment,
179
+ verbose,
180
+ dryRun,
181
+ jsonOutput,
182
+ noColor
183
+ };
184
+ try {
185
+ switch (command) {
186
+ case 'init':
187
+ await runInit(context);
188
+ break;
189
+ case 'get':
190
+ await runGet(context);
191
+ break;
192
+ case 'set':
193
+ await runSet(context);
194
+ break;
195
+ case 'delete':
196
+ case 'rm':
197
+ case 'remove':
198
+ await runDelete(context);
199
+ break;
200
+ case 'list':
201
+ case 'ls':
202
+ await runList(context);
203
+ break;
204
+ case 'export':
205
+ await runExport(context);
206
+ break;
207
+ case 'sync':
208
+ await runSync(context);
209
+ break;
210
+ case 'pull':
211
+ await runPull(context);
212
+ break;
213
+ case 'push':
214
+ await runPush(context);
215
+ break;
216
+ case 'key':
217
+ await runKey(context);
218
+ break;
219
+ case 'services':
220
+ case 'svc':
221
+ await runServices(context);
222
+ break;
223
+ case 'mcp':
224
+ // MCP server doesn't need config context, it runs standalone
225
+ await startMcpServer();
226
+ break;
227
+ case 'config':
228
+ console.log('config command not yet implemented');
229
+ break;
230
+ case 'k8s:secret':
231
+ await runK8sSecret(context);
232
+ break;
233
+ case 'k8s:configmap':
234
+ await runK8sConfigMap(context);
235
+ break;
236
+ case 'helm:values':
237
+ await runHelmValues(context);
238
+ break;
239
+ case 'tf:vars':
240
+ await runTfVars(context);
241
+ break;
242
+ case 'tf:json':
243
+ await runTfJson(context);
244
+ break;
245
+ default:
246
+ console.error(`Unknown command: ${command}`);
247
+ console.error('Run "vaulter --help" for usage information');
248
+ process.exit(1);
249
+ }
250
+ }
251
+ catch (err) {
252
+ if (verbose) {
253
+ console.error(err);
254
+ }
255
+ else {
256
+ console.error(`Error: ${err.message}`);
257
+ }
258
+ process.exit(1);
259
+ }
260
+ }
261
+ // Run
262
+ main().catch(err => {
263
+ console.error('Fatal error:', err.message);
264
+ process.exit(1);
265
+ });
266
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}