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,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":"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"}
|
|
@@ -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
|
package/dist/load.js.map
ADDED
|
@@ -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"}
|
package/dist/loader.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/mcp/preload.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -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"}
|