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,281 @@
1
+ /**
2
+ * Vaulter - .env File Parser
3
+ *
4
+ * Robust parser for .env files with support for:
5
+ * - Single, double, and backtick quotes
6
+ * - Escape sequences in double quotes
7
+ * - Variable expansion (${VAR} and $VAR)
8
+ * - Multiline values
9
+ * - Comments
10
+ */
11
+ import fs from 'node:fs';
12
+ const MAX_LINES_PER_VALUE = 100;
13
+ /**
14
+ * Parse a .env file from path
15
+ */
16
+ export function parseEnvFile(filePath, options = {}) {
17
+ const content = fs.readFileSync(filePath, 'utf-8');
18
+ return parseEnvString(content, options);
19
+ }
20
+ /**
21
+ * Parse a .env string
22
+ */
23
+ export function parseEnvString(content, options = {}) {
24
+ const { expand = true, env = process.env } = options;
25
+ const result = {};
26
+ const lines = content.split(/\r?\n/);
27
+ let i = 0;
28
+ while (i < lines.length) {
29
+ const line = lines[i].trim();
30
+ i++;
31
+ // Skip empty lines and comments
32
+ if (!line || line.startsWith('#') || line.startsWith(';')) {
33
+ continue;
34
+ }
35
+ // Parse KEY=VALUE
36
+ const match = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.*)$/);
37
+ if (!match) {
38
+ continue;
39
+ }
40
+ const key = match[1];
41
+ let value = match[2];
42
+ // Handle different quote styles
43
+ if (value.startsWith('"')) {
44
+ // Double quotes - process escape sequences
45
+ const parsed = parseDoubleQuoted(value, lines, i);
46
+ value = parsed.value;
47
+ i = parsed.nextIndex;
48
+ }
49
+ else if (value.startsWith("'")) {
50
+ // Single quotes - literal, no escapes
51
+ const parsed = parseSingleQuoted(value, lines, i);
52
+ value = parsed.value;
53
+ i = parsed.nextIndex;
54
+ }
55
+ else if (value.startsWith('`')) {
56
+ // Backticks
57
+ const parsed = parseBacktickQuoted(value, lines, i);
58
+ value = parsed.value;
59
+ i = parsed.nextIndex;
60
+ }
61
+ else {
62
+ // Unquoted - trim trailing comments
63
+ const commentIndex = value.indexOf('#');
64
+ if (commentIndex > 0) {
65
+ value = value.substring(0, commentIndex).trim();
66
+ }
67
+ }
68
+ // Variable expansion
69
+ if (expand) {
70
+ value = expandVariables(value, { ...env, ...result });
71
+ }
72
+ result[key] = value;
73
+ }
74
+ return result;
75
+ }
76
+ /**
77
+ * Parse double-quoted value with escape sequences
78
+ */
79
+ function parseDoubleQuoted(startValue, lines, currentIndex) {
80
+ let value = startValue.substring(1); // Remove opening quote
81
+ let lineCount = 0;
82
+ // Find closing quote, handling escapes
83
+ let result = '';
84
+ let i = 0;
85
+ let index = currentIndex;
86
+ while (lineCount < MAX_LINES_PER_VALUE) {
87
+ while (i < value.length) {
88
+ const char = value[i];
89
+ if (char === '\\' && i + 1 < value.length) {
90
+ // Escape sequence
91
+ const next = value[i + 1];
92
+ switch (next) {
93
+ case 'n':
94
+ result += '\n';
95
+ break;
96
+ case 'r':
97
+ result += '\r';
98
+ break;
99
+ case 't':
100
+ result += '\t';
101
+ break;
102
+ case '"':
103
+ result += '"';
104
+ break;
105
+ case '\\':
106
+ result += '\\';
107
+ break;
108
+ case '$':
109
+ result += '$';
110
+ break;
111
+ default:
112
+ result += char + next;
113
+ }
114
+ i += 2;
115
+ }
116
+ else if (char === '"') {
117
+ // Closing quote found
118
+ return { value: result, nextIndex: index };
119
+ }
120
+ else {
121
+ result += char;
122
+ i++;
123
+ }
124
+ }
125
+ // Need more lines
126
+ if (index >= lines.length) {
127
+ break;
128
+ }
129
+ result += '\n';
130
+ value = lines[index];
131
+ index++;
132
+ i = 0;
133
+ lineCount++;
134
+ }
135
+ // No closing quote found, return what we have
136
+ return { value: result, nextIndex: index };
137
+ }
138
+ /**
139
+ * Parse single-quoted value (literal, no escapes)
140
+ */
141
+ function parseSingleQuoted(startValue, lines, currentIndex) {
142
+ let value = startValue.substring(1); // Remove opening quote
143
+ let lineCount = 0;
144
+ let result = '';
145
+ let i = 0;
146
+ let index = currentIndex;
147
+ while (lineCount < MAX_LINES_PER_VALUE) {
148
+ while (i < value.length) {
149
+ const char = value[i];
150
+ if (char === "'" && value[i + 1] !== "'") {
151
+ // Closing quote (not escaped '')
152
+ return { value: result, nextIndex: index };
153
+ }
154
+ else if (char === "'" && value[i + 1] === "'") {
155
+ // Escaped single quote ('')
156
+ result += "'";
157
+ i += 2;
158
+ }
159
+ else {
160
+ result += char;
161
+ i++;
162
+ }
163
+ }
164
+ // Need more lines
165
+ if (index >= lines.length) {
166
+ break;
167
+ }
168
+ result += '\n';
169
+ value = lines[index];
170
+ index++;
171
+ i = 0;
172
+ lineCount++;
173
+ }
174
+ return { value: result, nextIndex: index };
175
+ }
176
+ /**
177
+ * Parse backtick-quoted value
178
+ */
179
+ function parseBacktickQuoted(startValue, lines, currentIndex) {
180
+ let value = startValue.substring(1); // Remove opening quote
181
+ let lineCount = 0;
182
+ let result = '';
183
+ let i = 0;
184
+ let index = currentIndex;
185
+ while (lineCount < MAX_LINES_PER_VALUE) {
186
+ const closeIndex = value.indexOf('`', i);
187
+ if (closeIndex !== -1) {
188
+ result += value.substring(i, closeIndex);
189
+ return { value: result, nextIndex: index };
190
+ }
191
+ result += value.substring(i);
192
+ // Need more lines
193
+ if (index >= lines.length) {
194
+ break;
195
+ }
196
+ result += '\n';
197
+ value = lines[index];
198
+ index++;
199
+ i = 0;
200
+ lineCount++;
201
+ }
202
+ return { value: result, nextIndex: index };
203
+ }
204
+ /**
205
+ * Expand variables in a value
206
+ * Supports ${VAR}, ${VAR:-default}, $VAR
207
+ */
208
+ function expandVariables(value, env) {
209
+ // ${VAR:-default} pattern
210
+ value = value.replace(/\$\{([a-zA-Z_][a-zA-Z0-9_]*):-([^}]*)\}/g, (_, key, defaultVal) => {
211
+ return env[key] ?? defaultVal;
212
+ });
213
+ // ${VAR} pattern
214
+ value = value.replace(/\$\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g, (_, key) => {
215
+ return env[key] ?? '';
216
+ });
217
+ // $VAR pattern (word boundary)
218
+ value = value.replace(/\$([a-zA-Z_][a-zA-Z0-9_]*)/g, (_, key) => {
219
+ return env[key] ?? '';
220
+ });
221
+ return value;
222
+ }
223
+ /**
224
+ * Serialize a ParsedEnv object to .env format
225
+ */
226
+ export function serializeEnv(env) {
227
+ const lines = [];
228
+ for (const [key, value] of Object.entries(env)) {
229
+ // Determine if we need quotes
230
+ const needsQuotes = value.includes('\n') ||
231
+ value.includes(' ') ||
232
+ value.includes('#') ||
233
+ value.includes('"') ||
234
+ value.includes("'") ||
235
+ value.includes('$') ||
236
+ value.includes('=');
237
+ if (needsQuotes) {
238
+ // Use double quotes and escape special chars
239
+ const escaped = value
240
+ .replace(/\\/g, '\\\\')
241
+ .replace(/"/g, '\\"')
242
+ .replace(/\n/g, '\\n')
243
+ .replace(/\r/g, '\\r')
244
+ .replace(/\t/g, '\\t');
245
+ lines.push(`${key}="${escaped}"`);
246
+ }
247
+ else {
248
+ lines.push(`${key}=${value}`);
249
+ }
250
+ }
251
+ return lines.join('\n');
252
+ }
253
+ /**
254
+ * Read stdin as .env content
255
+ */
256
+ export async function parseEnvFromStdin(options = {}) {
257
+ return new Promise((resolve, reject) => {
258
+ let data = '';
259
+ process.stdin.setEncoding('utf8');
260
+ process.stdin.on('data', chunk => {
261
+ data += chunk;
262
+ });
263
+ process.stdin.on('end', () => {
264
+ try {
265
+ const result = parseEnvString(data, options);
266
+ resolve(result);
267
+ }
268
+ catch (err) {
269
+ reject(err);
270
+ }
271
+ });
272
+ process.stdin.on('error', reject);
273
+ });
274
+ }
275
+ /**
276
+ * Check if stdin has data (is piped)
277
+ */
278
+ export function hasStdinData() {
279
+ return !process.stdin.isTTY;
280
+ }
281
+ //# sourceMappingURL=env-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-parser.js","sourceRoot":"","sources":["../../src/lib/env-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Monorepo Support
3
+ *
4
+ * Discovers services in monorepos and supports batch operations
5
+ */
6
+ import type { VaulterConfig } from '../types.js';
7
+ export interface ServiceInfo {
8
+ name: string;
9
+ path: string;
10
+ configDir: string;
11
+ config: VaulterConfig;
12
+ }
13
+ /**
14
+ * Find all services in a monorepo
15
+ * Searches for .vaulter directories in subdirectories
16
+ */
17
+ export declare function discoverServices(rootDir?: string): ServiceInfo[];
18
+ /**
19
+ * Filter services by name pattern
20
+ * Supports comma-separated list and glob patterns
21
+ */
22
+ export declare function filterServices(services: ServiceInfo[], pattern: string): ServiceInfo[];
23
+ /**
24
+ * Get the root config directory of a monorepo
25
+ */
26
+ export declare function findMonorepoRoot(startDir?: string): string | null;
27
+ /**
28
+ * Check if current directory is inside a monorepo
29
+ */
30
+ export declare function isMonorepo(startDir?: string): boolean;
31
+ /**
32
+ * Get service info for current directory
33
+ */
34
+ export declare function getCurrentService(startDir?: string): ServiceInfo | null;
35
+ /**
36
+ * Print service list for user display
37
+ */
38
+ export declare function formatServiceList(services: ServiceInfo[]): string;
39
+ //# sourceMappingURL=monorepo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo.d.ts","sourceRoot":"","sources":["../../src/lib/monorepo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMhD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,aAAa,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAsB,GAAG,WAAW,EAAE,CAsD/E;AA8BD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,EAAE,MAAM,GACd,WAAW,EAAE,CAwBf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAsBhF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAMpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAsB,GAAG,WAAW,GAAG,IAAI,CAiBtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAajE"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Monorepo Support
3
+ *
4
+ * Discovers services in monorepos and supports batch operations
5
+ */
6
+ import fs from 'node:fs';
7
+ import path from 'node:path';
8
+ import { loadConfig, findConfigDir } from './config-loader.js';
9
+ const CONFIG_DIR = '.vaulter';
10
+ const CONFIG_FILE = 'config.yaml';
11
+ const MAX_DEPTH = 5;
12
+ /**
13
+ * Find all services in a monorepo
14
+ * Searches for .vaulter directories in subdirectories
15
+ */
16
+ export function discoverServices(rootDir = process.cwd()) {
17
+ const services = [];
18
+ const visited = new Set();
19
+ function searchDir(dir, depth) {
20
+ if (depth > MAX_DEPTH)
21
+ return;
22
+ const absoluteDir = path.resolve(dir);
23
+ if (visited.has(absoluteDir))
24
+ return;
25
+ visited.add(absoluteDir);
26
+ try {
27
+ const entries = fs.readdirSync(absoluteDir, { withFileTypes: true });
28
+ for (const entry of entries) {
29
+ if (!entry.isDirectory())
30
+ continue;
31
+ // Skip common non-service directories
32
+ if (shouldSkipDir(entry.name))
33
+ continue;
34
+ const subDir = path.join(absoluteDir, entry.name);
35
+ // Check if this directory has a .vaulter config
36
+ const configDir = path.join(subDir, CONFIG_DIR);
37
+ const configFile = path.join(configDir, CONFIG_FILE);
38
+ if (fs.existsSync(configFile)) {
39
+ try {
40
+ const config = loadConfig(subDir);
41
+ const serviceName = config.service || entry.name;
42
+ services.push({
43
+ name: serviceName,
44
+ path: subDir,
45
+ configDir,
46
+ config
47
+ });
48
+ }
49
+ catch (err) {
50
+ // Skip invalid configs
51
+ }
52
+ }
53
+ // Recurse into subdirectories
54
+ searchDir(subDir, depth + 1);
55
+ }
56
+ }
57
+ catch (err) {
58
+ // Permission denied or other errors, skip
59
+ }
60
+ }
61
+ // Start search from root
62
+ searchDir(rootDir, 0);
63
+ return services;
64
+ }
65
+ /**
66
+ * Directories to skip during service discovery
67
+ */
68
+ function shouldSkipDir(name) {
69
+ const skipPatterns = [
70
+ 'node_modules',
71
+ '.git',
72
+ '.svn',
73
+ '.hg',
74
+ 'dist',
75
+ 'build',
76
+ 'coverage',
77
+ '.cache',
78
+ '.next',
79
+ '.nuxt',
80
+ '.output',
81
+ '__pycache__',
82
+ 'venv',
83
+ '.venv',
84
+ 'vendor',
85
+ 'target',
86
+ '.terraform',
87
+ '.terragrunt-cache'
88
+ ];
89
+ return skipPatterns.includes(name) || name.startsWith('.');
90
+ }
91
+ /**
92
+ * Filter services by name pattern
93
+ * Supports comma-separated list and glob patterns
94
+ */
95
+ export function filterServices(services, pattern) {
96
+ // Split by comma for multiple services
97
+ const patterns = pattern.split(',').map(p => p.trim()).filter(Boolean);
98
+ if (patterns.length === 0) {
99
+ return services;
100
+ }
101
+ return services.filter(service => {
102
+ return patterns.some(p => {
103
+ // Exact match
104
+ if (p === service.name)
105
+ return true;
106
+ // Glob-like matching (simple * support)
107
+ if (p.includes('*')) {
108
+ const regex = new RegExp('^' + p.replace(/\*/g, '.*').replace(/\?/g, '.') + '$');
109
+ return regex.test(service.name);
110
+ }
111
+ return false;
112
+ });
113
+ });
114
+ }
115
+ /**
116
+ * Get the root config directory of a monorepo
117
+ */
118
+ export function findMonorepoRoot(startDir = process.cwd()) {
119
+ let currentDir = path.resolve(startDir);
120
+ let rootConfigDir = null;
121
+ // Walk up to find the topmost .vaulter directory
122
+ while (true) {
123
+ const configDir = path.join(currentDir, CONFIG_DIR);
124
+ const configFile = path.join(configDir, CONFIG_FILE);
125
+ if (fs.existsSync(configFile)) {
126
+ rootConfigDir = currentDir;
127
+ }
128
+ const parentDir = path.dirname(currentDir);
129
+ if (parentDir === currentDir) {
130
+ break;
131
+ }
132
+ currentDir = parentDir;
133
+ }
134
+ return rootConfigDir;
135
+ }
136
+ /**
137
+ * Check if current directory is inside a monorepo
138
+ */
139
+ export function isMonorepo(startDir = process.cwd()) {
140
+ const root = findMonorepoRoot(startDir);
141
+ if (!root)
142
+ return false;
143
+ const services = discoverServices(root);
144
+ return services.length > 1;
145
+ }
146
+ /**
147
+ * Get service info for current directory
148
+ */
149
+ export function getCurrentService(startDir = process.cwd()) {
150
+ const configDir = findConfigDir(startDir);
151
+ if (!configDir)
152
+ return null;
153
+ const servicePath = path.dirname(configDir);
154
+ try {
155
+ const config = loadConfig(servicePath);
156
+ return {
157
+ name: config.service || path.basename(servicePath),
158
+ path: servicePath,
159
+ configDir,
160
+ config
161
+ };
162
+ }
163
+ catch {
164
+ return null;
165
+ }
166
+ }
167
+ /**
168
+ * Print service list for user display
169
+ */
170
+ export function formatServiceList(services) {
171
+ if (services.length === 0) {
172
+ return 'No services found';
173
+ }
174
+ const lines = ['Services found:'];
175
+ for (const service of services) {
176
+ const relativePath = path.relative(process.cwd(), service.path);
177
+ lines.push(` • ${service.name} (${relativePath || '.'})`);
178
+ }
179
+ return lines.join('\n');
180
+ }
181
+ //# sourceMappingURL=monorepo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo.js","sourceRoot":"","sources":["../../src/lib/monorepo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Simple glob matcher for patterns using * and ?
3
+ */
4
+ export declare function compileGlobPatterns(patterns: string[]): (value: string) => boolean;
5
+ //# sourceMappingURL=pattern-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-matcher.d.ts","sourceRoot":"","sources":["../../src/lib/pattern-matcher.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAelF"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Simple glob matcher for patterns using * and ?
3
+ */
4
+ export function compileGlobPatterns(patterns) {
5
+ const regexes = patterns
6
+ .map(pattern => pattern.trim())
7
+ .filter(Boolean)
8
+ .map(pattern => {
9
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
10
+ const source = '^' + escaped.replace(/\*/g, '.*').replace(/\?/g, '.') + '$';
11
+ return new RegExp(source, 'i');
12
+ });
13
+ if (regexes.length === 0) {
14
+ return () => false;
15
+ }
16
+ return (value) => regexes.some(regex => regex.test(value));
17
+ }
18
+ //# sourceMappingURL=pattern-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-matcher.js","sourceRoot":"","sources":["../../src/lib/pattern-matcher.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IACpD,MAAM,OAAO,GAAG,QAAQ;SACrB,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SAC9B,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,OAAO,CAAC,EAAE;QACb,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAA;QAC3E,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEJ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAA;IACpB,CAAC;IAED,OAAO,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;AACpE,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * S3 Key Loader
3
+ *
4
+ * Fetches encryption keys from S3-compatible storage
5
+ * Supports: AWS S3, MinIO, R2, Spaces, B2
6
+ */
7
+ /**
8
+ * Parse S3 URL into components
9
+ * Formats supported:
10
+ * s3://bucket/path/to/key.txt
11
+ * s3://bucket/path/to/key.txt?region=us-east-1
12
+ * http://localhost:9000/bucket/path/to/key.txt (MinIO)
13
+ * https://account.r2.cloudflarestorage.com/bucket/path
14
+ */
15
+ export interface S3KeyLocation {
16
+ bucket: string;
17
+ key: string;
18
+ region?: string;
19
+ endpoint?: string;
20
+ accessKeyId?: string;
21
+ secretAccessKey?: string;
22
+ }
23
+ export declare function parseS3Url(url: string): S3KeyLocation;
24
+ /**
25
+ * Fetch a key from S3
26
+ * Uses dynamic import to avoid bundling AWS SDK when not needed
27
+ */
28
+ export declare function fetchKeyFromS3(location: S3KeyLocation): Promise<string>;
29
+ /**
30
+ * Load encryption key from S3 URL
31
+ */
32
+ export declare function loadKeyFromS3(s3Url: string): Promise<string>;
33
+ //# sourceMappingURL=s3-key-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-key-loader.d.ts","sourceRoot":"","sources":["../../src/lib/s3-key-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CA8BrD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAgD7E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE"}