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,19 @@
1
+ /**
2
+ * Vaulter CLI - Key Management Commands
3
+ *
4
+ * Generate and manage encryption keys
5
+ */
6
+ import type { CLIArgs, VaulterConfig } from '../../types.js';
7
+ interface KeyContext {
8
+ args: CLIArgs;
9
+ config: VaulterConfig | null;
10
+ verbose: boolean;
11
+ dryRun: boolean;
12
+ jsonOutput: boolean;
13
+ }
14
+ /**
15
+ * Run the key command
16
+ */
17
+ export declare function runKey(context: KeyContext): Promise<void>;
18
+ export {};
19
+ //# sourceMappingURL=key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAG5D,UAAU,UAAU;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,OAAO,CAAA;CACpB;AAWD;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/D"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * Vaulter CLI - Key Management Commands
3
+ *
4
+ * Generate and manage encryption keys
5
+ */
6
+ import crypto from 'node:crypto';
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+ /**
10
+ * Generate a new AES-256 encryption key
11
+ */
12
+ function generateKey() {
13
+ // Generate 32 bytes (256 bits) for AES-256
14
+ const key = crypto.randomBytes(32);
15
+ return key.toString('base64');
16
+ }
17
+ /**
18
+ * Run the key command
19
+ */
20
+ export async function runKey(context) {
21
+ const { args, config, verbose, dryRun, jsonOutput } = context;
22
+ const subcommand = args._[1];
23
+ switch (subcommand) {
24
+ case 'generate':
25
+ case 'gen':
26
+ await runKeyGenerate(context);
27
+ break;
28
+ case 'show':
29
+ await runKeyShow(context);
30
+ break;
31
+ case 'rotate':
32
+ await runKeyRotate(context);
33
+ break;
34
+ default:
35
+ console.error(`Unknown key subcommand: ${subcommand || '(none)'}`);
36
+ console.error('Available subcommands: generate, show, rotate');
37
+ console.error('');
38
+ console.error('Examples:');
39
+ console.error(' vaulter key generate # Generate new key to stdout');
40
+ console.error(' vaulter key generate -o .key # Generate key to file');
41
+ console.error(' vaulter key show # Show current key source');
42
+ process.exit(1);
43
+ }
44
+ }
45
+ /**
46
+ * Generate a new encryption key
47
+ */
48
+ async function runKeyGenerate(context) {
49
+ const { args, verbose, dryRun, jsonOutput } = context;
50
+ const outputPath = args.output || args.o;
51
+ if (verbose) {
52
+ console.error('Generating new AES-256 encryption key...');
53
+ }
54
+ const key = generateKey();
55
+ if (dryRun) {
56
+ if (jsonOutput) {
57
+ console.log(JSON.stringify({
58
+ dryRun: true,
59
+ action: 'generate_key',
60
+ outputPath: outputPath || 'stdout',
61
+ keyLength: 32,
62
+ algorithm: 'aes-256-gcm'
63
+ }));
64
+ }
65
+ else {
66
+ console.log('Dry run - would generate new encryption key');
67
+ if (outputPath) {
68
+ console.log(` Output: ${outputPath}`);
69
+ }
70
+ else {
71
+ console.log(' Output: stdout');
72
+ }
73
+ }
74
+ return;
75
+ }
76
+ if (outputPath) {
77
+ // Write to file
78
+ const absPath = path.resolve(outputPath);
79
+ // Check if file exists
80
+ if (fs.existsSync(absPath) && !args.force) {
81
+ console.error(`Error: File exists: ${absPath}`);
82
+ console.error('Use --force to overwrite');
83
+ process.exit(1);
84
+ }
85
+ // Ensure directory exists
86
+ const dir = path.dirname(absPath);
87
+ if (!fs.existsSync(dir)) {
88
+ fs.mkdirSync(dir, { recursive: true });
89
+ }
90
+ // Write key with restricted permissions
91
+ fs.writeFileSync(absPath, key + '\n', { mode: 0o600 });
92
+ if (jsonOutput) {
93
+ console.log(JSON.stringify({
94
+ success: true,
95
+ outputPath: absPath,
96
+ keyLength: 32,
97
+ algorithm: 'aes-256-gcm'
98
+ }));
99
+ }
100
+ else {
101
+ console.log(`✓ Generated encryption key: ${absPath}`);
102
+ console.log(' Store this key securely - it cannot be recovered!');
103
+ console.log('');
104
+ console.log('To use this key:');
105
+ console.log(` 1. Set environment variable: export VAULTER_KEY=$(cat ${absPath})`);
106
+ console.log(` 2. Or configure in .vaulter/config.yaml:`);
107
+ console.log(` encryption:`);
108
+ console.log(` key_source:`);
109
+ console.log(` - file: ${outputPath}`);
110
+ }
111
+ }
112
+ else {
113
+ // Output to stdout (for piping)
114
+ if (jsonOutput) {
115
+ console.log(JSON.stringify({
116
+ key,
117
+ keyLength: 32,
118
+ algorithm: 'aes-256-gcm'
119
+ }));
120
+ }
121
+ else {
122
+ console.log(key);
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * Show current key configuration
128
+ */
129
+ async function runKeyShow(context) {
130
+ const { config, jsonOutput } = context;
131
+ if (!config) {
132
+ console.error('Error: No vaulter configuration found');
133
+ console.error('Run "vaulter init" first');
134
+ process.exit(1);
135
+ }
136
+ const keySources = config.encryption?.key_source || [];
137
+ // Check each source
138
+ const sources = [];
139
+ for (const source of keySources) {
140
+ if ('env' in source) {
141
+ sources.push({
142
+ type: 'env',
143
+ source: source.env,
144
+ available: !!process.env[source.env]
145
+ });
146
+ }
147
+ else if ('file' in source) {
148
+ sources.push({
149
+ type: 'file',
150
+ source: source.file,
151
+ available: fs.existsSync(path.resolve(source.file))
152
+ });
153
+ }
154
+ else if ('s3' in source) {
155
+ sources.push({
156
+ type: 's3',
157
+ source: source.s3,
158
+ available: false // Would need to check S3
159
+ });
160
+ }
161
+ }
162
+ // Also check VAULTER_KEY env var
163
+ if (!sources.some(s => s.type === 'env' && s.source === 'VAULTER_KEY')) {
164
+ sources.push({
165
+ type: 'env',
166
+ source: 'VAULTER_KEY',
167
+ available: !!process.env.VAULTER_KEY
168
+ });
169
+ }
170
+ if (jsonOutput) {
171
+ console.log(JSON.stringify({
172
+ configured: keySources.length > 0,
173
+ sources,
174
+ activeSource: sources.find(s => s.available)?.source || null
175
+ }));
176
+ }
177
+ else {
178
+ console.log('Key Sources:');
179
+ if (sources.length === 0) {
180
+ console.log(' (none configured)');
181
+ }
182
+ else {
183
+ for (const source of sources) {
184
+ const status = source.available ? '✓' : '✗';
185
+ console.log(` ${status} ${source.type}: ${source.source}`);
186
+ }
187
+ }
188
+ const active = sources.find(s => s.available);
189
+ if (active) {
190
+ console.log('');
191
+ console.log(`Active key source: ${active.type}:${active.source}`);
192
+ }
193
+ else {
194
+ console.log('');
195
+ console.log('Warning: No encryption key available');
196
+ console.log('Run "vaulter key generate -o .vaulter/.key" to create one');
197
+ }
198
+ }
199
+ }
200
+ /**
201
+ * Rotate encryption key (re-encrypt all values with new key)
202
+ */
203
+ async function runKeyRotate(context) {
204
+ const { config, dryRun, jsonOutput } = context;
205
+ if (!config) {
206
+ console.error('Error: No vaulter configuration found');
207
+ console.error('Run "vaulter init" first');
208
+ process.exit(1);
209
+ }
210
+ // Key rotation is a complex operation that would need to:
211
+ // 1. Generate new key
212
+ // 2. Decrypt all values with old key
213
+ // 3. Re-encrypt all values with new key
214
+ // 4. Update key storage
215
+ // For now, show a message about manual rotation
216
+ if (jsonOutput) {
217
+ console.log(JSON.stringify({
218
+ error: 'not_implemented',
219
+ message: 'Key rotation is not yet fully automated'
220
+ }));
221
+ }
222
+ else {
223
+ console.log('Key rotation steps:');
224
+ console.log('');
225
+ console.log('1. Generate a new key:');
226
+ console.log(' vaulter key generate -o .vaulter/.key.new');
227
+ console.log('');
228
+ console.log('2. Export current values (with old key):');
229
+ console.log(' vaulter export -e <env> > vars.env');
230
+ console.log('');
231
+ console.log('3. Update to new key:');
232
+ console.log(' mv .vaulter/.key.new .vaulter/.key');
233
+ console.log('');
234
+ console.log('4. Re-import values (with new key):');
235
+ console.log(' cat vars.env | vaulter sync -e <env>');
236
+ console.log('');
237
+ console.log('5. Clean up:');
238
+ console.log(' rm vars.env');
239
+ console.log('');
240
+ console.log('Note: Repeat steps 2-4 for each environment.');
241
+ if (dryRun) {
242
+ console.log('');
243
+ console.log('(dry-run mode - no changes made)');
244
+ }
245
+ }
246
+ }
247
+ //# sourceMappingURL=key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key.js","sourceRoot":"","sources":["../../../src/cli/commands/key.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Vaulter CLI - List Command
3
+ *
4
+ * List all environment variables
5
+ */
6
+ import type { CLIArgs, VaulterConfig, Environment } from '../../types.js';
7
+ interface ListContext {
8
+ args: CLIArgs;
9
+ config: VaulterConfig | null;
10
+ project: string;
11
+ service?: string;
12
+ environment: Environment;
13
+ verbose: boolean;
14
+ jsonOutput: boolean;
15
+ }
16
+ /**
17
+ * Run the list command
18
+ */
19
+ export declare function runList(context: ListContext): Promise<void>;
20
+ export {};
21
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAU,MAAM,gBAAgB,CAAA;AAGjF,UAAU,WAAW;IACnB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB;AA6CD;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDjE"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Vaulter CLI - List Command
3
+ *
4
+ * List all environment variables
5
+ */
6
+ import { createClientFromConfig } from '../lib/create-client.js';
7
+ /**
8
+ * Mask sensitive values for display
9
+ */
10
+ function maskValue(value, showFull = false) {
11
+ if (showFull)
12
+ return value;
13
+ if (value.length <= 8)
14
+ return '****';
15
+ return value.substring(0, 4) + '****' + value.substring(value.length - 4);
16
+ }
17
+ /**
18
+ * Format table output
19
+ */
20
+ function formatTable(vars, showValues) {
21
+ if (vars.length === 0) {
22
+ return 'No variables found';
23
+ }
24
+ // Calculate column widths
25
+ const keyWidth = Math.max(4, ...vars.map(v => v.key.length));
26
+ const valueWidth = showValues ? Math.max(5, ...vars.map(v => maskValue(v.value, showValues).length)) : 12;
27
+ const envWidth = 3;
28
+ // Header
29
+ const lines = [];
30
+ lines.push('KEY'.padEnd(keyWidth) + ' ' +
31
+ 'VALUE'.padEnd(valueWidth) + ' ' +
32
+ 'ENV');
33
+ lines.push('-'.repeat(keyWidth + valueWidth + envWidth + 4));
34
+ // Rows
35
+ for (const v of vars) {
36
+ lines.push(v.key.padEnd(keyWidth) + ' ' +
37
+ maskValue(v.value, showValues).padEnd(valueWidth) + ' ' +
38
+ v.environment);
39
+ }
40
+ return lines.join('\n');
41
+ }
42
+ /**
43
+ * Run the list command
44
+ */
45
+ export async function runList(context) {
46
+ const { args, config, project, service, environment, verbose, jsonOutput } = context;
47
+ if (!project) {
48
+ console.error('Error: Project not specified and no config found');
49
+ console.error('Run "vaulter init" or specify --project');
50
+ process.exit(1);
51
+ }
52
+ if (verbose) {
53
+ console.error(`Listing variables for ${project}/${service || '(no service)'}/${environment}`);
54
+ }
55
+ const client = await createClientFromConfig({ args, config, verbose });
56
+ try {
57
+ await client.connect();
58
+ const vars = await client.list({
59
+ project,
60
+ service,
61
+ environment: args.all ? undefined : environment
62
+ });
63
+ if (jsonOutput) {
64
+ console.log(JSON.stringify({
65
+ project,
66
+ service,
67
+ environment: args.all ? 'all' : environment,
68
+ count: vars.length,
69
+ variables: vars.map(v => ({
70
+ key: v.key,
71
+ value: v.value,
72
+ environment: v.environment,
73
+ tags: v.tags,
74
+ metadata: v.metadata,
75
+ createdAt: v.createdAt,
76
+ updatedAt: v.updatedAt
77
+ }))
78
+ }));
79
+ }
80
+ else {
81
+ // Table format
82
+ const showValues = args.verbose || args.v || false;
83
+ console.log(formatTable(vars, showValues));
84
+ if (!showValues && vars.length > 0) {
85
+ console.log('');
86
+ console.log('(use -v to show full values)');
87
+ }
88
+ }
89
+ }
90
+ finally {
91
+ await client.disconnect();
92
+ }
93
+ }
94
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Vaulter CLI - Pull Command
3
+ *
4
+ * Pull variables from backend to local .env file
5
+ */
6
+ import type { CLIArgs, VaulterConfig, Environment } from '../../types.js';
7
+ interface PullContext {
8
+ args: CLIArgs;
9
+ config: VaulterConfig | null;
10
+ project: string;
11
+ service?: string;
12
+ environment: Environment;
13
+ verbose: boolean;
14
+ dryRun: boolean;
15
+ jsonOutput: boolean;
16
+ }
17
+ /**
18
+ * Run the pull command
19
+ */
20
+ export declare function runPull(context: PullContext): Promise<void>;
21
+ export {};
22
+ //# sourceMappingURL=pull.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAMzE,UAAU,WAAW;IACnB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsIjE"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Vaulter CLI - Pull Command
3
+ *
4
+ * Pull variables from backend to local .env file
5
+ */
6
+ import fs from 'node:fs';
7
+ import path from 'node:path';
8
+ import { createClientFromConfig } from '../lib/create-client.js';
9
+ import { runHook } from '../lib/hooks.js';
10
+ import { findConfigDir, getEnvFilePath } from '../../lib/config-loader.js';
11
+ import { serializeEnv } from '../../lib/env-parser.js';
12
+ /**
13
+ * Run the pull command
14
+ */
15
+ export async function runPull(context) {
16
+ const { args, config, project, service, environment, verbose, dryRun, jsonOutput } = context;
17
+ if (!project) {
18
+ console.error('Error: Project not specified and no config found');
19
+ console.error('Run "vaulter init" or specify --project');
20
+ process.exit(1);
21
+ }
22
+ // Determine output destination
23
+ const outputPath = args.output || args.o || args.file || args.f;
24
+ let envFilePath = null;
25
+ if (outputPath) {
26
+ envFilePath = path.resolve(outputPath);
27
+ }
28
+ else {
29
+ // Default to .vaulter/environments/<env>.env if config exists
30
+ const configDir = findConfigDir();
31
+ if (configDir) {
32
+ envFilePath = getEnvFilePath(configDir, environment);
33
+ }
34
+ }
35
+ if (verbose) {
36
+ console.error(`Pulling ${project}/${service || '(no service)'}/${environment}`);
37
+ if (envFilePath) {
38
+ console.error(`Output: ${envFilePath}`);
39
+ }
40
+ else {
41
+ console.error('Output: stdout');
42
+ }
43
+ }
44
+ if (!dryRun) {
45
+ runHook(config?.hooks?.pre_pull, 'pre_pull', verbose);
46
+ }
47
+ const client = await createClientFromConfig({ args, config, verbose });
48
+ try {
49
+ await client.connect();
50
+ const vars = await client.export(project, environment, service);
51
+ const varCount = Object.keys(vars).length;
52
+ if (varCount === 0) {
53
+ if (jsonOutput) {
54
+ console.log(JSON.stringify({
55
+ warning: 'no_variables',
56
+ project,
57
+ service,
58
+ environment
59
+ }));
60
+ }
61
+ else {
62
+ console.error(`Warning: No variables found for ${project}/${environment}`);
63
+ }
64
+ return;
65
+ }
66
+ // Serialize to .env format
67
+ const envContent = serializeEnv(vars);
68
+ if (dryRun) {
69
+ if (jsonOutput) {
70
+ console.log(JSON.stringify({
71
+ dryRun: true,
72
+ project,
73
+ service,
74
+ environment,
75
+ variableCount: varCount,
76
+ outputPath: envFilePath,
77
+ variables: Object.keys(vars)
78
+ }));
79
+ }
80
+ else {
81
+ console.log(`Dry run - would pull ${varCount} variables:`);
82
+ console.log(` Variables: ${Object.keys(vars).join(', ')}`);
83
+ if (envFilePath) {
84
+ console.log(` Output: ${envFilePath}`);
85
+ }
86
+ else {
87
+ console.log(' Output: stdout');
88
+ }
89
+ }
90
+ return;
91
+ }
92
+ if (envFilePath) {
93
+ // Check if file exists and warn about overwrite
94
+ if (fs.existsSync(envFilePath) && !args.force) {
95
+ console.error(`Warning: File exists: ${envFilePath}`);
96
+ console.error('Use --force to overwrite');
97
+ process.exit(1);
98
+ }
99
+ // Ensure directory exists
100
+ const dir = path.dirname(envFilePath);
101
+ if (!fs.existsSync(dir)) {
102
+ fs.mkdirSync(dir, { recursive: true });
103
+ }
104
+ // Write file
105
+ fs.writeFileSync(envFilePath, envContent + '\n');
106
+ if (jsonOutput) {
107
+ console.log(JSON.stringify({
108
+ success: true,
109
+ project,
110
+ service,
111
+ environment,
112
+ variableCount: varCount,
113
+ outputPath: envFilePath
114
+ }));
115
+ }
116
+ else {
117
+ console.log(`✓ Pulled ${varCount} variables to ${envFilePath}`);
118
+ }
119
+ runHook(config?.hooks?.post_pull, 'post_pull', verbose);
120
+ }
121
+ else {
122
+ // Output to stdout
123
+ if (jsonOutput) {
124
+ console.log(JSON.stringify({
125
+ success: true,
126
+ project,
127
+ service,
128
+ environment,
129
+ variables: vars
130
+ }));
131
+ }
132
+ else {
133
+ console.log(envContent);
134
+ }
135
+ runHook(config?.hooks?.post_pull, 'post_pull', verbose);
136
+ }
137
+ }
138
+ finally {
139
+ await client.disconnect();
140
+ }
141
+ }
142
+ //# sourceMappingURL=pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/cli/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Vaulter CLI - Push Command
3
+ *
4
+ * Push local .env file to backend (one-way sync, local wins)
5
+ */
6
+ import type { CLIArgs, VaulterConfig, Environment } from '../../types.js';
7
+ interface PushContext {
8
+ args: CLIArgs;
9
+ config: VaulterConfig | null;
10
+ project: string;
11
+ service?: string;
12
+ environment: Environment;
13
+ verbose: boolean;
14
+ dryRun: boolean;
15
+ jsonOutput: boolean;
16
+ }
17
+ /**
18
+ * Run the push command
19
+ */
20
+ export declare function runPush(context: PushContext): Promise<void>;
21
+ export {};
22
+ //# sourceMappingURL=push.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/push.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAKzE,UAAU,WAAW;IACnB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,OAAO,CAAA;CACpB;AASD;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6KjE"}