@splashcodex/api-key-manager 5.0.2 → 5.3.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.
@@ -18,6 +18,24 @@ const index_1 = require("../index");
18
18
  const file_1 = require("../persistence/file");
19
19
  const path_1 = require("path");
20
20
  const os_1 = require("os");
21
+ const fs_1 = require("fs");
22
+ const crypto_1 = require("crypto");
23
+ // ─── Project Identifier ─────────────────────────────────────────────────────
24
+ /**
25
+ * Derive a short, stable identifier for the current project.
26
+ * Uses the directory name + a hash of the full CWD to avoid collisions
27
+ * when multiple projects run simultaneously.
28
+ *
29
+ * Examples:
30
+ * /home/codedex/projects/WhatsDeX → "whatsdex_a3f2"
31
+ * /home/codedex/projects/DeXdo → "dexdo_b7c1"
32
+ */
33
+ function getProjectId() {
34
+ const cwd = process.cwd();
35
+ const dirName = (0, path_1.basename)(cwd).toLowerCase().replace(/[^a-z0-9]/g, '');
36
+ const hash = (0, crypto_1.createHash)('md5').update(cwd).digest('hex').slice(0, 4);
37
+ return `${dirName}_${hash}`;
38
+ }
21
39
  // ─── Base Preset Class ──────────────────────────────────────────────────────
22
40
  /**
23
41
  * Abstract base class for provider presets.
@@ -50,11 +68,12 @@ class BasePreset {
50
68
  healthCheckIntervalMs: options.healthCheckIntervalMs ?? 300_000,
51
69
  ...options,
52
70
  };
71
+ const projectId = getProjectId();
53
72
  const stateFile = this.options.stateFilePath ||
54
- (0, path_1.join)((0, os_1.tmpdir)(), `codedex_${this.options.provider}_state.json`);
73
+ (0, path_1.join)((0, os_1.tmpdir)(), `codedex_${this.options.provider}_${projectId}_state.json`);
55
74
  const storage = new file_1.FileStorage({
56
75
  filePath: stateFile,
57
- clearOnInit: true, // Fresh start each session to clear stale DEAD keys
76
+ clearOnInit: false, // Preserve circuit breaker state across restarts
58
77
  });
59
78
  this.manager = new index_1.ApiKeyManager(apiKeys, {
60
79
  storage,
@@ -166,6 +185,38 @@ class BasePreset {
166
185
  }
167
186
  return [...new Set(keys)]; // Deduplicate
168
187
  }
188
+ static getConfigPath() {
189
+ return (0, path_1.join)((0, os_1.homedir)(), '.codedex', 'api_keys.json');
190
+ }
191
+ /**
192
+ * Parse API keys from ~/.codedex/api_keys.json
193
+ * Format should be: { "ENV_VAR_NAME": "key1,key2" } or { "ENV_VAR_NAME": ["key1", "key2"] }
194
+ */
195
+ static parseKeysFromHomeDir(envKeys) {
196
+ const configPath = this.getConfigPath();
197
+ if (!(0, fs_1.existsSync)(configPath))
198
+ return [];
199
+ try {
200
+ const fileContent = (0, fs_1.readFileSync)(configPath, 'utf-8');
201
+ const parsed = JSON.parse(fileContent);
202
+ const keys = [];
203
+ for (const envName of envKeys) {
204
+ const value = parsed[envName];
205
+ if (!value)
206
+ continue;
207
+ if (Array.isArray(value)) {
208
+ keys.push(...value.filter((k) => typeof k === 'string' && k.trim()));
209
+ }
210
+ else if (typeof value === 'string' && value.trim()) {
211
+ keys.push(...value.split(',').map(k => k.trim()).filter(k => k.length > 0));
212
+ }
213
+ }
214
+ return [...new Set(keys)];
215
+ }
216
+ catch (err) {
217
+ return [];
218
+ }
219
+ }
169
220
  /**
170
221
  * Get or create the singleton instance for a preset.
171
222
  * This is the core factory used by all preset subclasses.
@@ -184,12 +235,16 @@ class BasePreset {
184
235
  }
185
236
  // Parse keys
186
237
  const envKeys = mergedOptions.envKeys || [];
187
- const keys = BasePreset.parseKeysFromEnv(envKeys);
238
+ let keys = BasePreset.parseKeysFromEnv(envKeys);
188
239
  if (keys.length === 0) {
189
- const logger = mergedOptions.logger || console;
190
- logger.warn(`[${instanceKey}] No API keys found in env vars: ${envKeys.join(', ')}. ` +
191
- `AI features will be disabled.`);
192
- // Still create the instance with empty keys — allows graceful degradation
240
+ keys = BasePreset.parseKeysFromHomeDir(envKeys);
241
+ }
242
+ if (keys.length === 0) {
243
+ return {
244
+ success: false,
245
+ error: new Error(`[${instanceKey}] No API keys found in env vars: ${envKeys.join(', ')}. ` +
246
+ `Set these environment variables or use loadCentralEnv() to load from ~/codedex/env/ first.`),
247
+ };
193
248
  }
194
249
  try {
195
250
  const instance = new PresetClass(keys, mergedOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/presets/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/presets/base.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,6 @@ export { BasePreset } from './base';
6
6
  export type { PresetOptions, PresetLogger, Result } from './base';
7
7
  export { GeminiManager } from './gemini';
8
8
  export { OpenAIManager } from './openai';
9
+ export { AnthropicManager } from './anthropic';
9
10
  export { MultiManager } from './multi';
10
11
  export type { ProviderConfig, MultiManagerOptions } from './multi';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MultiManager = exports.OpenAIManager = exports.GeminiManager = exports.BasePreset = void 0;
3
+ exports.MultiManager = exports.AnthropicManager = exports.OpenAIManager = exports.GeminiManager = exports.BasePreset = void 0;
4
4
  /**
5
5
  * Presets — Batteries-included provider managers
6
6
  * @module presets
@@ -11,6 +11,8 @@ var gemini_1 = require("./gemini");
11
11
  Object.defineProperty(exports, "GeminiManager", { enumerable: true, get: function () { return gemini_1.GeminiManager; } });
12
12
  var openai_1 = require("./openai");
13
13
  Object.defineProperty(exports, "OpenAIManager", { enumerable: true, get: function () { return openai_1.OpenAIManager; } });
14
+ var anthropic_1 = require("./anthropic");
15
+ Object.defineProperty(exports, "AnthropicManager", { enumerable: true, get: function () { return anthropic_1.AnthropicManager; } });
14
16
  var multi_1 = require("./multi");
15
17
  Object.defineProperty(exports, "MultiManager", { enumerable: true, get: function () { return multi_1.MultiManager; } });
16
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,+BAAoC;AAA3B,kGAAA,UAAU,OAAA;AAEnB,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,+BAAoC;AAA3B,kGAAA,UAAU,OAAA;AAEnB,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AACzB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA"}
@@ -39,6 +39,13 @@ const index_1 = require("../index");
39
39
  const file_1 = require("../persistence/file");
40
40
  const path_1 = require("path");
41
41
  const os_1 = require("os");
42
+ const crypto_1 = require("crypto");
43
+ function getProjectId() {
44
+ const cwd = process.cwd();
45
+ const dirName = (0, path_1.basename)(cwd).toLowerCase().replace(/[^a-z0-9]/g, '');
46
+ const hash = (0, crypto_1.createHash)('md5').update(cwd).digest('hex').slice(0, 4);
47
+ return `${dirName}_${hash}`;
48
+ }
42
49
  // ─── MultiManager ───────────────────────────────────────────────────────────
43
50
  class MultiManager {
44
51
  static instance = null;
@@ -49,11 +56,13 @@ class MultiManager {
49
56
  for (const [providerName, config] of Object.entries(options.providers)) {
50
57
  const keys = MultiManager.parseKeysFromEnv(config.envKeys);
51
58
  if (keys.length === 0) {
52
- this.logger.warn(`[MultiManager:${providerName}] No API keys found in: ${config.envKeys.join(', ')}`);
59
+ this.logger.warn(`[MultiManager:${providerName}] No API keys found in: ${config.envKeys.join(', ')} — provider skipped`);
60
+ continue;
53
61
  }
62
+ const projectId = getProjectId();
54
63
  const storage = new file_1.FileStorage({
55
- filePath: (0, path_1.join)((0, os_1.tmpdir)(), `codedex_multi_${providerName}_state.json`),
56
- clearOnInit: true,
64
+ filePath: (0, path_1.join)((0, os_1.tmpdir)(), `codedex_multi_${providerName}_${projectId}_state.json`),
65
+ clearOnInit: false, // Preserve circuit breaker state across restarts
57
66
  });
58
67
  const manager = new index_1.ApiKeyManager(keys, {
59
68
  storage,
@@ -1 +1 @@
1
- {"version":3,"file":"multi.js","sourceRoot":"","sources":["../../src/presets/multi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multi.js","sourceRoot":"","sources":["../../src/presets/multi.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@splashcodex/api-key-manager",
3
- "version": "5.0.2",
4
- "description": "Universal API Key Management Gateway with provider presets, persistence, and multi-provider vault",
3
+ "version": "5.3.0",
4
+ "description": "Universal API Key Management Gateway with centralized env loader, provider presets, persistence, and multi-provider vault",
5
5
  "bin": {
6
6
  "api-key-manager": "./bin/cli.js"
7
7
  },
@@ -9,44 +9,66 @@
9
9
  "types": "dist/index.d.ts",
10
10
  "exports": {
11
11
  ".": {
12
+ "import": "./dist/index.js",
12
13
  "require": "./dist/index.js",
13
14
  "types": "./dist/index.d.ts"
14
15
  },
16
+ "./env": {
17
+ "import": "./dist/env/index.js",
18
+ "require": "./dist/env/index.js",
19
+ "types": "./dist/env/index.d.ts"
20
+ },
15
21
  "./presets": {
22
+ "import": "./dist/presets/index.js",
16
23
  "require": "./dist/presets/index.js",
17
24
  "types": "./dist/presets/index.d.ts"
18
25
  },
19
26
  "./presets/gemini": {
27
+ "import": "./dist/presets/gemini.js",
20
28
  "require": "./dist/presets/gemini.js",
21
29
  "types": "./dist/presets/gemini.d.ts"
22
30
  },
23
31
  "./presets/openai": {
32
+ "import": "./dist/presets/openai.js",
24
33
  "require": "./dist/presets/openai.js",
25
34
  "types": "./dist/presets/openai.d.ts"
26
35
  },
36
+ "./presets/anthropic": {
37
+ "import": "./dist/presets/anthropic.js",
38
+ "require": "./dist/presets/anthropic.js",
39
+ "types": "./dist/presets/anthropic.d.ts"
40
+ },
27
41
  "./presets/multi": {
42
+ "import": "./dist/presets/multi.js",
28
43
  "require": "./dist/presets/multi.js",
29
44
  "types": "./dist/presets/multi.d.ts"
30
45
  },
31
46
  "./presets/base": {
47
+ "import": "./dist/presets/base.js",
32
48
  "require": "./dist/presets/base.js",
33
49
  "types": "./dist/presets/base.d.ts"
34
50
  },
35
51
  "./persistence": {
52
+ "import": "./dist/persistence/index.js",
36
53
  "require": "./dist/persistence/index.js",
37
54
  "types": "./dist/persistence/index.d.ts"
38
55
  },
39
56
  "./persistence/file": {
57
+ "import": "./dist/persistence/file.js",
40
58
  "require": "./dist/persistence/file.js",
41
59
  "types": "./dist/persistence/file.d.ts"
42
60
  },
43
61
  "./persistence/memory": {
62
+ "import": "./dist/persistence/memory.js",
44
63
  "require": "./dist/persistence/memory.js",
45
64
  "types": "./dist/persistence/memory.d.ts"
46
65
  }
47
66
  },
48
67
  "typesVersions": {
49
68
  "*": {
69
+ "env": [
70
+ "dist/env/index.d.ts"
71
+ ],
50
72
  "presets": [
51
73
  "dist/presets/index.d.ts"
52
74
  ],
@@ -56,6 +78,9 @@
56
78
  "presets/openai": [
57
79
  "dist/presets/openai.d.ts"
58
80
  ],
81
+ "presets/anthropic": [
82
+ "dist/presets/anthropic.d.ts"
83
+ ],
59
84
  "presets/multi": [
60
85
  "dist/presets/multi.d.ts"
61
86
  ],
@@ -82,7 +107,7 @@
82
107
  "build": "tsc",
83
108
  "test": "jest --verbose",
84
109
  "prepublishOnly": "npm run build",
85
- "postinstall": "node -e \"console.log('\\n\\x1b[32m🌟 Successfully installed @splashcodex/api-key-manager v5.0!\\x1b[0m\\n\\x1b[36m📚 Documentation: https://www.npmjs.com/package/@splashcodex/ApiKeyManager\\x1b[0m\\n\\x1b[33m🚀 Quick Start:\\x1b[0m\\n import { GeminiManager } from \\'@splashcodex/api-key-manager/presets/gemini\\';\\n const gemini = GeminiManager.getInstance().data;\\n')\"",
110
+ "postinstall": "node -e \"console.log('\\n\\x1b[32m🌟 Successfully installed @splashcodex/api-key-manager v5.1!\\x1b[0m\\n\\x1b[36m📚 Documentation: https://www.npmjs.com/package/@splashcodex/ApiKeyManager\\x1b[0m\\n\\x1b[33m🚀 Quick Start:\\x1b[0m\\n import { loadCentralEnv } from \\'@splashcodex/api-key-manager/env\\';\\n import { GeminiManager } from \\'@splashcodex/api-key-manager/presets/gemini\\';\\n loadCentralEnv();\\n const gemini = GeminiManager.getInstance().data;\\n')\"",
86
111
  "gateway": "ts-node gateway/server.ts",
87
112
  "gateway:dev": "npx nodemon --watch gateway/ --ext ts --exec ts-node gateway/server.ts"
88
113
  },
@@ -104,7 +129,10 @@
104
129
  "persistence",
105
130
  "multi-provider",
106
131
  "semantic-cache",
107
- "streaming"
132
+ "streaming",
133
+ "env",
134
+ "centralized",
135
+ "dotenv"
108
136
  ],
109
137
  "author": "Antigravity",
110
138
  "license": "ISC",
@@ -118,6 +146,10 @@
118
146
  },
119
147
  "dependencies": {
120
148
  "@fastify/cors": "^11.2.0",
121
- "fastify": "^5.7.4"
149
+ "cockatiel": "^4.0.0",
150
+ "dotenv": "^17.4.2",
151
+ "eventsource-parser": "^3.1.0",
152
+ "fastify": "^5.7.4",
153
+ "zod": "^4.4.3"
122
154
  }
123
155
  }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Centralized Environment Loader
3
+ * @module env
4
+ */
5
+ export {
6
+ loadCentralEnv,
7
+ getCentralEnvVar,
8
+ getDefaultEnvDir,
9
+ } from './loader';
10
+
11
+ export type {
12
+ LoadCentralEnvOptions,
13
+ LoadResult,
14
+ } from './loader';
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Centralized Environment Loader
3
+ *
4
+ * Loads environment variables from ~/codedex/env/ so that all 35+ projects
5
+ * share a single source of truth for secrets. Portable via Google Drive.
6
+ *
7
+ * Directory structure:
8
+ * ~/codedex/env/
9
+ * common.env — REDIS_URL, DATABASE_URL, shared across all projects
10
+ * llm.env — GEMINI_API_KEY, OPENAI_API_KEY (comma-separated or JSON arrays)
11
+ * stripe.env — STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET
12
+ * <custom>.env — Any additional groupings
13
+ *
14
+ * @module env/loader
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * // Load all env files from ~/codedex/env/
19
+ * import { loadCentralEnv } from '@splashcodex/api-key-manager/env';
20
+ * loadCentralEnv();
21
+ *
22
+ * // Now process.env has all the values
23
+ * console.log(process.env.GEMINI_API_KEY);
24
+ * ```
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * // Load specific files only
29
+ * import { loadCentralEnv } from '@splashcodex/api-key-manager/env';
30
+ * loadCentralEnv({ files: ['llm.env', 'common.env'] });
31
+ * ```
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * // Custom env directory (e.g., team-shared location)
36
+ * import { loadCentralEnv } from '@splashcodex/api-key-manager/env';
37
+ * loadCentralEnv({ envDir: '/shared/team/env' });
38
+ * ```
39
+ */
40
+
41
+ import { readFileSync, readdirSync, existsSync } from 'fs';
42
+ import { join } from 'path';
43
+ import { homedir } from 'os';
44
+ import { parse as dotenvParse } from 'dotenv';
45
+
46
+ // ─── Types ───────────────────────────────────────────────────────────────────
47
+
48
+ export interface LoadCentralEnvOptions {
49
+ /**
50
+ * Path to the centralized env directory.
51
+ * Defaults to ~/codedex/env/
52
+ *
53
+ * Can also be set via CODEDEX_ENV_DIR environment variable.
54
+ */
55
+ envDir?: string;
56
+
57
+ /**
58
+ * Specific .env files to load (e.g., ['llm.env', 'common.env']).
59
+ * If omitted, loads ALL .env files in the directory.
60
+ */
61
+ files?: string[];
62
+
63
+ /**
64
+ * If true, central env values will NOT overwrite existing process.env values.
65
+ * Useful when a project needs to override a shared value locally.
66
+ * Default: false (central values take precedence over local .env)
67
+ */
68
+ preserveExisting?: boolean;
69
+
70
+ /**
71
+ * If true, silently continue when the env directory doesn't exist.
72
+ * If false, throw an error.
73
+ * Default: true (silent — for portability across dev environments)
74
+ */
75
+ silent?: boolean;
76
+ }
77
+
78
+ export interface LoadResult {
79
+ /** Whether the env directory was found and loaded */
80
+ loaded: boolean;
81
+ /** Path to the env directory that was used */
82
+ envDir: string;
83
+ /** List of .env files that were loaded */
84
+ filesLoaded: string[];
85
+ /** Number of environment variables set */
86
+ varsSet: number;
87
+ /** Variables that were skipped because they already existed (when preserveExisting=true) */
88
+ varsSkipped: string[];
89
+ }
90
+
91
+ // ─── Parser ──────────────────────────────────────────────────────────────────
92
+
93
+ /**
94
+ * Parse a .env file content string into key-value pairs.
95
+ *
96
+ * Delegates to `dotenv.parse()` for battle-tested parsing that handles:
97
+ * KEY=value
98
+ * KEY="quoted value with spaces"
99
+ * KEY='single quoted'
100
+ * KEY=`backtick quoted`
101
+ * MULTILINE="line1\nline2" (real newlines inside double quotes)
102
+ * KEY=value # inline comment
103
+ * export KEY=value (bash-style)
104
+ * # full-line comments
105
+ * \n, \r, \t escape sequences
106
+ *
107
+ * Returns a Map<string, string> for compatibility with the rest of the loader.
108
+ */
109
+ function parseEnvFile(content: string): Map<string, string> {
110
+ const parsed = dotenvParse(content);
111
+ return new Map(Object.entries(parsed));
112
+ }
113
+
114
+ // ─── Loader ──────────────────────────────────────────────────────────────────
115
+
116
+ /**
117
+ * Default env directory path: ~/codedex/env/
118
+ */
119
+ export function getDefaultEnvDir(): string {
120
+ return process.env.CODEDEX_ENV_DIR || join(homedir(), 'codedex', 'env');
121
+ }
122
+
123
+ /**
124
+ * Load environment variables from the centralized env directory into process.env.
125
+ *
126
+ * Call this once at the top of your app's entry point, before any code
127
+ * that reads process.env.
128
+ */
129
+ export function loadCentralEnv(options: LoadCentralEnvOptions = {}): LoadResult {
130
+ const envDir = options.envDir || getDefaultEnvDir();
131
+ const silent = options.silent !== false;
132
+ const preserveExisting = options.preserveExisting === true;
133
+
134
+ const result: LoadResult = {
135
+ loaded: false,
136
+ envDir,
137
+ filesLoaded: [],
138
+ varsSet: 0,
139
+ varsSkipped: [],
140
+ };
141
+
142
+ // Check if directory exists
143
+ if (!existsSync(envDir)) {
144
+ if (!silent) {
145
+ throw new Error(
146
+ `Centralized env directory not found: ${envDir}\n` +
147
+ `Create it with: mkdir -p ${envDir}\n` +
148
+ `Or set CODEDEX_ENV_DIR to point to your env directory.`
149
+ );
150
+ }
151
+ return result;
152
+ }
153
+
154
+ // Determine which files to load
155
+ let filesToLoad: string[];
156
+ if (options.files) {
157
+ filesToLoad = options.files;
158
+ } else {
159
+ try {
160
+ filesToLoad = readdirSync(envDir)
161
+ .filter(f => f.endsWith('.env'))
162
+ .sort(); // Alphabetical order for deterministic loading
163
+ } catch {
164
+ if (!silent) throw new Error(`Cannot read env directory: ${envDir}`);
165
+ return result;
166
+ }
167
+ }
168
+
169
+ // Load each file
170
+ for (const fileName of filesToLoad) {
171
+ const filePath = join(envDir, fileName);
172
+
173
+ if (!existsSync(filePath)) {
174
+ if (!silent) {
175
+ throw new Error(`Env file not found: ${filePath}`);
176
+ }
177
+ continue;
178
+ }
179
+
180
+ try {
181
+ const content = readFileSync(filePath, 'utf-8');
182
+ const vars = parseEnvFile(content);
183
+
184
+ for (const [key, value] of vars) {
185
+ if (preserveExisting && process.env[key] !== undefined) {
186
+ result.varsSkipped.push(key);
187
+ continue;
188
+ }
189
+ process.env[key] = value;
190
+ result.varsSet++;
191
+ }
192
+
193
+ result.filesLoaded.push(fileName);
194
+ } catch (err) {
195
+ if (!silent) throw err;
196
+ }
197
+ }
198
+
199
+ result.loaded = result.filesLoaded.length > 0;
200
+ return result;
201
+ }
202
+
203
+ /**
204
+ * Read a single value from the centralized env without loading everything.
205
+ * Useful for one-off lookups.
206
+ */
207
+ export function getCentralEnvVar(key: string, options?: { envDir?: string }): string | undefined {
208
+ const envDir = options?.envDir || getDefaultEnvDir();
209
+
210
+ if (!existsSync(envDir)) return undefined;
211
+
212
+ try {
213
+ const files = readdirSync(envDir).filter(f => f.endsWith('.env')).sort();
214
+
215
+ for (const fileName of files) {
216
+ const content = readFileSync(join(envDir, fileName), 'utf-8');
217
+ const vars = parseEnvFile(content);
218
+ if (vars.has(key)) return vars.get(key);
219
+ }
220
+ } catch {
221
+ // Silent fail
222
+ }
223
+
224
+ return undefined;
225
+ }