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.
- package/LICENSE +21 -0
- package/README.md +490 -0
- package/dist/bin/minienv-mcp.cjs +17 -0
- package/dist/bin/minienv.cjs +146 -0
- package/dist/cli/commands/delete.d.ts +22 -0
- package/dist/cli/commands/delete.d.ts.map +1 -0
- package/dist/cli/commands/delete.js +85 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/export.d.ts +21 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +126 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/get.d.ts +21 -0
- package/dist/cli/commands/get.d.ts.map +1 -0
- package/dist/cli/commands/get.js +62 -0
- package/dist/cli/commands/get.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +98 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/integrations/helm.d.ts +21 -0
- package/dist/cli/commands/integrations/helm.d.ts.map +1 -0
- package/dist/cli/commands/integrations/helm.js +113 -0
- package/dist/cli/commands/integrations/helm.js.map +1 -0
- package/dist/cli/commands/integrations/kubernetes.d.ts +25 -0
- package/dist/cli/commands/integrations/kubernetes.d.ts.map +1 -0
- package/dist/cli/commands/integrations/kubernetes.js +199 -0
- package/dist/cli/commands/integrations/kubernetes.js.map +1 -0
- package/dist/cli/commands/integrations/terraform.d.ts +25 -0
- package/dist/cli/commands/integrations/terraform.d.ts.map +1 -0
- package/dist/cli/commands/integrations/terraform.js +131 -0
- package/dist/cli/commands/integrations/terraform.js.map +1 -0
- package/dist/cli/commands/key.d.ts +19 -0
- package/dist/cli/commands/key.d.ts.map +1 -0
- package/dist/cli/commands/key.js +247 -0
- package/dist/cli/commands/key.js.map +1 -0
- package/dist/cli/commands/list.d.ts +21 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +94 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/pull.d.ts +22 -0
- package/dist/cli/commands/pull.d.ts.map +1 -0
- package/dist/cli/commands/pull.js +142 -0
- package/dist/cli/commands/pull.js.map +1 -0
- package/dist/cli/commands/push.d.ts +22 -0
- package/dist/cli/commands/push.d.ts.map +1 -0
- package/dist/cli/commands/push.js +181 -0
- package/dist/cli/commands/push.js.map +1 -0
- package/dist/cli/commands/services.d.ts +18 -0
- package/dist/cli/commands/services.d.ts.map +1 -0
- package/dist/cli/commands/services.js +92 -0
- package/dist/cli/commands/services.js.map +1 -0
- package/dist/cli/commands/set.d.ts +22 -0
- package/dist/cli/commands/set.d.ts.map +1 -0
- package/dist/cli/commands/set.js +93 -0
- package/dist/cli/commands/set.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +23 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +362 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +266 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/lib/create-client.d.ts +21 -0
- package/dist/cli/lib/create-client.d.ts.map +1 -0
- package/dist/cli/lib/create-client.js +68 -0
- package/dist/cli/lib/create-client.js.map +1 -0
- package/dist/cli/lib/hooks.d.ts +5 -0
- package/dist/cli/lib/hooks.d.ts.map +1 -0
- package/dist/cli/lib/hooks.js +17 -0
- package/dist/cli/lib/hooks.js.map +1 -0
- package/dist/cli/preload.d.ts +6 -0
- package/dist/cli/preload.d.ts.map +1 -0
- package/dist/cli/preload.js +7 -0
- package/dist/cli/preload.js.map +1 -0
- package/dist/client.d.ts +89 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +350 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/batch-runner.d.ts +39 -0
- package/dist/lib/batch-runner.d.ts.map +1 -0
- package/dist/lib/batch-runner.js +117 -0
- package/dist/lib/batch-runner.js.map +1 -0
- package/dist/lib/config-loader.d.ts +45 -0
- package/dist/lib/config-loader.d.ts.map +1 -0
- package/dist/lib/config-loader.js +357 -0
- package/dist/lib/config-loader.js.map +1 -0
- package/dist/lib/env-parser.d.ts +38 -0
- package/dist/lib/env-parser.d.ts.map +1 -0
- package/dist/lib/env-parser.js +281 -0
- package/dist/lib/env-parser.js.map +1 -0
- package/dist/lib/monorepo.d.ts +39 -0
- package/dist/lib/monorepo.d.ts.map +1 -0
- package/dist/lib/monorepo.js +181 -0
- package/dist/lib/monorepo.js.map +1 -0
- package/dist/lib/pattern-matcher.d.ts +5 -0
- package/dist/lib/pattern-matcher.d.ts.map +1 -0
- package/dist/lib/pattern-matcher.js +18 -0
- package/dist/lib/pattern-matcher.js.map +1 -0
- package/dist/lib/s3-key-loader.d.ts +33 -0
- package/dist/lib/s3-key-loader.d.ts.map +1 -0
- package/dist/lib/s3-key-loader.js +83 -0
- package/dist/lib/s3-key-loader.js.map +1 -0
- package/dist/lib/secret-patterns.d.ts +10 -0
- package/dist/lib/secret-patterns.d.ts.map +1 -0
- package/dist/lib/secret-patterns.js +27 -0
- package/dist/lib/secret-patterns.js.map +1 -0
- package/dist/load.d.ts +14 -0
- package/dist/load.d.ts.map +1 -0
- package/dist/load.js +15 -0
- package/dist/load.js.map +1 -0
- package/dist/loader.d.ts +63 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +50 -0
- package/dist/loader.js.map +1 -0
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +14 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/preload.d.ts +6 -0
- package/dist/mcp/preload.d.ts.map +1 -0
- package/dist/mcp/preload.js +7 -0
- package/dist/mcp/preload.js.map +1 -0
- package/dist/mcp/resources.d.ts +23 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +112 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +16 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +81 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +20 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +405 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/types.d.ts +182 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +37 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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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"}
|