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,83 @@
1
+ /**
2
+ * S3 Key Loader
3
+ *
4
+ * Fetches encryption keys from S3-compatible storage
5
+ * Supports: AWS S3, MinIO, R2, Spaces, B2
6
+ */
7
+ export function parseS3Url(url) {
8
+ const parsed = new URL(url);
9
+ if (parsed.protocol === 's3:') {
10
+ // s3://bucket/path/to/key
11
+ const bucket = parsed.hostname;
12
+ const key = parsed.pathname.slice(1); // Remove leading /
13
+ const region = parsed.searchParams.get('region') || undefined;
14
+ return { bucket, key, region };
15
+ }
16
+ if (parsed.protocol === 'http:' || parsed.protocol === 'https:') {
17
+ // HTTP endpoint (MinIO, R2, etc.)
18
+ // Format: http://host:port/bucket/path or with auth http://key:secret@host/bucket/path
19
+ const endpoint = `${parsed.protocol}//${parsed.host}`;
20
+ const pathParts = parsed.pathname.slice(1).split('/');
21
+ const bucket = pathParts[0];
22
+ const key = pathParts.slice(1).join('/');
23
+ return {
24
+ bucket,
25
+ key,
26
+ endpoint,
27
+ accessKeyId: parsed.username || undefined,
28
+ secretAccessKey: parsed.password || undefined
29
+ };
30
+ }
31
+ throw new Error(`Unsupported S3 URL format: ${url}`);
32
+ }
33
+ /**
34
+ * Fetch a key from S3
35
+ * Uses dynamic import to avoid bundling AWS SDK when not needed
36
+ */
37
+ export async function fetchKeyFromS3(location) {
38
+ try {
39
+ // Dynamically import AWS SDK
40
+ const { S3Client, GetObjectCommand } = await import('@aws-sdk/client-s3');
41
+ // Build client config
42
+ const clientConfig = {};
43
+ if (location.region) {
44
+ clientConfig.region = location.region;
45
+ }
46
+ if (location.endpoint) {
47
+ clientConfig.endpoint = location.endpoint;
48
+ clientConfig.forcePathStyle = true; // Required for MinIO/custom endpoints
49
+ }
50
+ if (location.accessKeyId && location.secretAccessKey) {
51
+ clientConfig.credentials = {
52
+ accessKeyId: location.accessKeyId,
53
+ secretAccessKey: location.secretAccessKey
54
+ };
55
+ }
56
+ const client = new S3Client(clientConfig);
57
+ const command = new GetObjectCommand({
58
+ Bucket: location.bucket,
59
+ Key: location.key
60
+ });
61
+ const response = await client.send(command);
62
+ if (!response.Body) {
63
+ throw new Error('Empty response from S3');
64
+ }
65
+ // Read body as string
66
+ const bodyContents = await response.Body.transformToString();
67
+ return bodyContents.trim();
68
+ }
69
+ catch (err) {
70
+ if (err.code === 'ERR_MODULE_NOT_FOUND' || err.message?.includes('Cannot find module')) {
71
+ throw new Error('AWS SDK not installed. To use S3 key source, install: pnpm add @aws-sdk/client-s3');
72
+ }
73
+ throw new Error(`Failed to fetch key from S3: ${err.message}`);
74
+ }
75
+ }
76
+ /**
77
+ * Load encryption key from S3 URL
78
+ */
79
+ export async function loadKeyFromS3(s3Url) {
80
+ const location = parseS3Url(s3Url);
81
+ return fetchKeyFromS3(location);
82
+ }
83
+ //# sourceMappingURL=s3-key-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-key-loader.js","sourceRoot":"","sources":["../../src/lib/s3-key-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IAE3B,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC9B,0BAA0B;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAC,mBAAmB;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAA;QAE7D,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAA;IAChC,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,kCAAkC;QAClC,uFAAuF;QACvF,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAA;QACrD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAExC,OAAO;YACL,MAAM;YACN,GAAG;YACH,QAAQ;YACR,WAAW,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;YACzC,eAAe,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;SAC9C,CAAA;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAA;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAuB;IAC1D,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAA;QAEzE,sBAAsB;QACtB,MAAM,YAAY,GAAQ,EAAE,CAAA;QAE5B,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;QACvC,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAA;YACzC,YAAY,CAAC,cAAc,GAAG,IAAI,CAAA,CAAC,sCAAsC;QAC3E,CAAC;QAED,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;YACrD,YAAY,CAAC,WAAW,GAAG;gBACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,eAAe,EAAE,QAAQ,CAAC,eAAe;aAC1C,CAAA;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAA;QAEzC,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;YACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,GAAG,EAAE,QAAQ,CAAC,GAAG;SAClB,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAE3C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC3C,CAAC;QAED,sBAAsB;QACtB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC5D,OAAO,YAAY,CAAC,IAAI,EAAE,CAAA;IAC5B,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,sBAAsB,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAA;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAChE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa;IAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IAClC,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAA;AACjC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Secret detection utilities based on glob patterns.
3
+ */
4
+ import type { VaulterConfig } from '../types.js';
5
+ export declare function getSecretPatterns(config?: VaulterConfig | null): string[];
6
+ export declare function splitVarsBySecret(vars: Record<string, string>, patterns: string[]): {
7
+ secrets: Record<string, string>;
8
+ plain: Record<string, string>;
9
+ };
10
+ //# sourceMappingURL=secret-patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-patterns.d.ts","sourceRoot":"","sources":["../../src/lib/secret-patterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIhD,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,EAAE,CAMzE;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,QAAQ,EAAE,MAAM,EAAE,GACjB;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAcpE"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Secret detection utilities based on glob patterns.
3
+ */
4
+ import { DEFAULT_SECRET_PATTERNS } from '../types.js';
5
+ import { compileGlobPatterns } from './pattern-matcher.js';
6
+ export function getSecretPatterns(config) {
7
+ const patterns = config?.security?.auto_encrypt?.patterns;
8
+ if (patterns && patterns.length > 0) {
9
+ return patterns;
10
+ }
11
+ return DEFAULT_SECRET_PATTERNS;
12
+ }
13
+ export function splitVarsBySecret(vars, patterns) {
14
+ const isSecret = compileGlobPatterns(patterns);
15
+ const secrets = {};
16
+ const plain = {};
17
+ for (const [key, value] of Object.entries(vars)) {
18
+ if (isSecret(key)) {
19
+ secrets[key] = value;
20
+ }
21
+ else {
22
+ plain[key] = value;
23
+ }
24
+ }
25
+ return { secrets, plain };
26
+ }
27
+ //# sourceMappingURL=secret-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-patterns.js","sourceRoot":"","sources":["../../src/lib/secret-patterns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,MAAM,UAAU,iBAAiB,CAAC,MAA6B;IAC7D,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAA;IACzD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,uBAAuB,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAA4B,EAC5B,QAAkB;IAElB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC9C,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,MAAM,KAAK,GAA2B,EAAE,CAAA;IAExC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACpB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAC3B,CAAC"}
package/dist/load.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Vaulter - Auto-load environment variables
3
+ *
4
+ * Import this module to automatically load .env files into process.env
5
+ *
6
+ * Usage:
7
+ * import 'vaulter/load'
8
+ *
9
+ * This is equivalent to:
10
+ * import dotenv from 'dotenv'
11
+ * dotenv.config()
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=load.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../src/load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
package/dist/load.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Vaulter - Auto-load environment variables
3
+ *
4
+ * Import this module to automatically load .env files into process.env
5
+ *
6
+ * Usage:
7
+ * import 'vaulter/load'
8
+ *
9
+ * This is equivalent to:
10
+ * import dotenv from 'dotenv'
11
+ * dotenv.config()
12
+ */
13
+ import dotenv from 'dotenv';
14
+ dotenv.config();
15
+ //# sourceMappingURL=load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../src/load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,MAAM,CAAC,MAAM,EAAE,CAAA"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Vaulter - Programmatic environment loader
3
+ *
4
+ * Usage:
5
+ * import { loader } from 'vaulter'
6
+ * loader()
7
+ *
8
+ * With options:
9
+ * loader({ path: '.env.local' })
10
+ * loader({ path: '.env.production', override: true })
11
+ */
12
+ import type { DotenvConfigOptions, DotenvConfigOutput } from 'dotenv';
13
+ export interface LoaderOptions extends DotenvConfigOptions {
14
+ /**
15
+ * Path to .env file
16
+ * @default '.env'
17
+ */
18
+ path?: string;
19
+ /**
20
+ * Override existing environment variables
21
+ * @default false
22
+ */
23
+ override?: boolean;
24
+ /**
25
+ * Enable debug output
26
+ * @default false
27
+ */
28
+ debug?: boolean;
29
+ }
30
+ /**
31
+ * Load environment variables from .env file into process.env
32
+ *
33
+ * @param options - Configuration options
34
+ * @returns Result with parsed variables or error
35
+ *
36
+ * @example
37
+ * // Basic usage
38
+ * import { loader } from 'vaulter'
39
+ * loader()
40
+ *
41
+ * @example
42
+ * // Load specific file
43
+ * loader({ path: '.env.production' })
44
+ *
45
+ * @example
46
+ * // Override existing vars
47
+ * loader({ path: '.env.local', override: true })
48
+ */
49
+ export declare function loader(options?: LoaderOptions): DotenvConfigOutput;
50
+ /**
51
+ * Parse a string containing environment variables
52
+ * Does NOT modify process.env
53
+ *
54
+ * @param src - String to parse (e.g., contents of .env file)
55
+ * @returns Parsed key-value pairs
56
+ *
57
+ * @example
58
+ * import { parse } from 'vaulter'
59
+ * const vars = parse('FOO=bar\nBAZ=qux')
60
+ * // { FOO: 'bar', BAZ: 'qux' }
61
+ */
62
+ export declare function parse(src: string): Record<string, string>;
63
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAErE,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACxD;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,kBAAkB,CAElE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzD"}
package/dist/loader.js ADDED
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Vaulter - Programmatic environment loader
3
+ *
4
+ * Usage:
5
+ * import { loader } from 'vaulter'
6
+ * loader()
7
+ *
8
+ * With options:
9
+ * loader({ path: '.env.local' })
10
+ * loader({ path: '.env.production', override: true })
11
+ */
12
+ import dotenv from 'dotenv';
13
+ /**
14
+ * Load environment variables from .env file into process.env
15
+ *
16
+ * @param options - Configuration options
17
+ * @returns Result with parsed variables or error
18
+ *
19
+ * @example
20
+ * // Basic usage
21
+ * import { loader } from 'vaulter'
22
+ * loader()
23
+ *
24
+ * @example
25
+ * // Load specific file
26
+ * loader({ path: '.env.production' })
27
+ *
28
+ * @example
29
+ * // Override existing vars
30
+ * loader({ path: '.env.local', override: true })
31
+ */
32
+ export function loader(options) {
33
+ return dotenv.config(options);
34
+ }
35
+ /**
36
+ * Parse a string containing environment variables
37
+ * Does NOT modify process.env
38
+ *
39
+ * @param src - String to parse (e.g., contents of .env file)
40
+ * @returns Parsed key-value pairs
41
+ *
42
+ * @example
43
+ * import { parse } from 'vaulter'
44
+ * const vars = parse('FOO=bar\nBAZ=qux')
45
+ * // { FOO: 'bar', BAZ: 'qux' }
46
+ */
47
+ export function parse(src) {
48
+ return dotenv.parse(src);
49
+ }
50
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAA;AAuB3B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Vaulter MCP Server Entry Point
3
+ *
4
+ * Run with: npx vaulter-mcp
5
+ * Or: node dist/mcp/index.js
6
+ */
7
+ import './preload.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,cAAc,CAAA"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Vaulter MCP Server Entry Point
3
+ *
4
+ * Run with: npx vaulter-mcp
5
+ * Or: node dist/mcp/index.js
6
+ */
7
+ // Preload must be first - sets process.maxListeners before other imports
8
+ import './preload.js';
9
+ import { startServer } from './server.js';
10
+ startServer().catch((error) => {
11
+ console.error('Failed to start MCP server:', error);
12
+ process.exit(1);
13
+ });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yEAAyE;AACzE,OAAO,cAAc,CAAA;AAErB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAA;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MCP Preload module - runs before any other imports
3
+ * Prevents MaxListenersExceededWarning from s3db.js dependencies
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=preload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/mcp/preload.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Preload module - runs before any other imports
3
+ * Prevents MaxListenersExceededWarning from s3db.js dependencies
4
+ */
5
+ process.setMaxListeners(50);
6
+ export {};
7
+ //# sourceMappingURL=preload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/mcp/preload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Vaulter MCP Resources
3
+ *
4
+ * Resource definitions and handlers for the MCP server
5
+ * Resources expose environment variables as readable content
6
+ */
7
+ import type { Resource } from '@modelcontextprotocol/sdk/types.js';
8
+ /**
9
+ * List available resources
10
+ * Returns resources for each project/environment combination found in config
11
+ */
12
+ export declare function listResources(): Promise<Resource[]>;
13
+ /**
14
+ * Read a resource by URI
15
+ */
16
+ export declare function handleResourceRead(uri: string): Promise<{
17
+ contents: Array<{
18
+ uri: string;
19
+ mimeType: string;
20
+ text: string;
21
+ }>;
22
+ }>;
23
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAgDlE;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CA2BzD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyCnI"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Vaulter MCP Resources
3
+ *
4
+ * Resource definitions and handlers for the MCP server
5
+ * Resources expose environment variables as readable content
6
+ */
7
+ import { VaulterClient } from '../client.js';
8
+ import { loadConfig, loadEncryptionKey } from '../lib/config-loader.js';
9
+ const ENVIRONMENTS = ['dev', 'stg', 'prd', 'sbx', 'dr'];
10
+ /**
11
+ * Get current config and client
12
+ */
13
+ async function getClientAndConfig() {
14
+ let config = null;
15
+ try {
16
+ config = loadConfig();
17
+ }
18
+ catch {
19
+ // Config not found is OK
20
+ }
21
+ const connectionString = config?.backend?.url;
22
+ const passphrase = config ? await loadEncryptionKey(config) : undefined;
23
+ const client = new VaulterClient({
24
+ connectionString: connectionString || undefined,
25
+ passphrase: passphrase || undefined
26
+ });
27
+ return { client, config };
28
+ }
29
+ /**
30
+ * Parse a vaulter:// URI
31
+ * Format: vaulter://project/environment
32
+ * Example: vaulter://my-app/dev
33
+ */
34
+ function parseResourceUri(uri) {
35
+ const match = uri.match(/^vaulter:\/\/([^/]+)\/([^/]+)(?:\/([^/]+))?$/);
36
+ if (!match)
37
+ return null;
38
+ const [, project, env, service] = match;
39
+ if (!ENVIRONMENTS.includes(env))
40
+ return null;
41
+ return {
42
+ project,
43
+ environment: env,
44
+ service
45
+ };
46
+ }
47
+ /**
48
+ * List available resources
49
+ * Returns resources for each project/environment combination found in config
50
+ */
51
+ export async function listResources() {
52
+ const { config } = await getClientAndConfig();
53
+ if (!config?.project) {
54
+ return [];
55
+ }
56
+ const project = config.project;
57
+ const environments = config.environments || ENVIRONMENTS;
58
+ const service = config.service;
59
+ const resources = [];
60
+ for (const env of environments) {
61
+ const uri = service
62
+ ? `vaulter://${project}/${env}/${service}`
63
+ : `vaulter://${project}/${env}`;
64
+ resources.push({
65
+ uri,
66
+ name: `${project}/${env}${service ? `/${service}` : ''}`,
67
+ description: `Environment variables for ${project} in ${env}`,
68
+ mimeType: 'text/plain'
69
+ });
70
+ }
71
+ return resources;
72
+ }
73
+ /**
74
+ * Read a resource by URI
75
+ */
76
+ export async function handleResourceRead(uri) {
77
+ const parsed = parseResourceUri(uri);
78
+ if (!parsed) {
79
+ throw new Error(`Invalid resource URI: ${uri}. Expected format: vaulter://project/environment[/service]`);
80
+ }
81
+ const { project, environment, service } = parsed;
82
+ const { client } = await getClientAndConfig();
83
+ try {
84
+ await client.connect();
85
+ const vars = await client.export(project, environment, service);
86
+ const entries = Object.entries(vars);
87
+ if (entries.length === 0) {
88
+ return {
89
+ contents: [{
90
+ uri,
91
+ mimeType: 'text/plain',
92
+ text: `# No variables found for ${project}/${environment}`
93
+ }]
94
+ };
95
+ }
96
+ // Format as .env file content
97
+ const envContent = entries
98
+ .map(([key, value]) => `${key}=${value}`)
99
+ .join('\n');
100
+ return {
101
+ contents: [{
102
+ uri,
103
+ mimeType: 'text/plain',
104
+ text: `# Environment: ${project}/${environment}${service ? `/${service}` : ''}\n# Variables: ${entries.length}\n\n${envContent}`
105
+ }]
106
+ };
107
+ }
108
+ finally {
109
+ await client.disconnect();
110
+ }
111
+ }
112
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Vaulter MCP Server
3
+ *
4
+ * Model Context Protocol server for Claude integration
5
+ * Exposes vaulter tools and resources via stdio transport
6
+ */
7
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
8
+ /**
9
+ * Create and configure the MCP server
10
+ */
11
+ export declare function createServer(): Server;
12
+ /**
13
+ * Start the MCP server with stdio transport
14
+ */
15
+ export declare function startServer(): Promise<void>;
16
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AAgBlE;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA6CrC;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBjD"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Vaulter MCP Server
3
+ *
4
+ * Model Context Protocol server for Claude integration
5
+ * Exposes vaulter tools and resources via stdio transport
6
+ */
7
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
8
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
9
+ import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
10
+ import { registerTools, handleToolCall } from './tools.js';
11
+ import { handleResourceRead, listResources } from './resources.js';
12
+ const SERVER_NAME = 'vaulter';
13
+ const SERVER_VERSION = process.env.VAULTER_VERSION || '0.1.0';
14
+ /**
15
+ * Create and configure the MCP server
16
+ */
17
+ export function createServer() {
18
+ const server = new Server({
19
+ name: SERVER_NAME,
20
+ version: SERVER_VERSION
21
+ }, {
22
+ capabilities: {
23
+ tools: {},
24
+ resources: {}
25
+ }
26
+ });
27
+ // Register tool handlers
28
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
29
+ tools: registerTools()
30
+ }));
31
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
32
+ const { name, arguments: args } = request.params;
33
+ try {
34
+ return await handleToolCall(name, args || {});
35
+ }
36
+ catch (error) {
37
+ const message = error instanceof Error ? error.message : String(error);
38
+ throw new McpError(ErrorCode.InternalError, message);
39
+ }
40
+ });
41
+ // Register resource handlers
42
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({
43
+ resources: await listResources()
44
+ }));
45
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
46
+ const { uri } = request.params;
47
+ try {
48
+ return await handleResourceRead(uri);
49
+ }
50
+ catch (error) {
51
+ const message = error instanceof Error ? error.message : String(error);
52
+ throw new McpError(ErrorCode.InternalError, message);
53
+ }
54
+ });
55
+ return server;
56
+ }
57
+ /**
58
+ * Start the MCP server with stdio transport
59
+ */
60
+ export async function startServer() {
61
+ const server = createServer();
62
+ const transport = new StdioServerTransport();
63
+ await server.connect(transport);
64
+ // Handle graceful shutdown
65
+ process.on('SIGINT', async () => {
66
+ await server.close();
67
+ process.exit(0);
68
+ });
69
+ process.on('SIGTERM', async () => {
70
+ await server.close();
71
+ process.exit(0);
72
+ });
73
+ }
74
+ // Start server if run directly
75
+ if (process.argv[1]?.endsWith('server.js') || process.argv[1]?.endsWith('server.ts')) {
76
+ startServer().catch((error) => {
77
+ console.error('Failed to start MCP server:', error);
78
+ process.exit(1);
79
+ });
80
+ }
81
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Vaulter MCP Tools
3
+ *
4
+ * Tool definitions and handlers for the MCP server
5
+ */
6
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
7
+ /**
8
+ * Register all available tools
9
+ */
10
+ export declare function registerTools(): Tool[];
11
+ /**
12
+ * Handle tool calls
13
+ */
14
+ export declare function handleToolCall(name: string, args: Record<string, unknown>): Promise<{
15
+ content: Array<{
16
+ type: 'text';
17
+ text: string;
18
+ }>;
19
+ }>;
20
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAA;AA6B9D;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,EAAE,CAgLtC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAkN7D"}