@fentz26/envcp 1.1.0 → 1.2.0-exp.1

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 (105) hide show
  1. package/README.md +59 -422
  2. package/VERSION +1 -0
  3. package/dist/adapters/base.d.ts +13 -0
  4. package/dist/adapters/base.d.ts.map +1 -1
  5. package/dist/adapters/base.js +153 -9
  6. package/dist/adapters/base.js.map +1 -1
  7. package/dist/adapters/gemini.d.ts.map +1 -1
  8. package/dist/adapters/gemini.js +7 -4
  9. package/dist/adapters/gemini.js.map +1 -1
  10. package/dist/adapters/openai.d.ts.map +1 -1
  11. package/dist/adapters/openai.js +9 -6
  12. package/dist/adapters/openai.js.map +1 -1
  13. package/dist/adapters/rest.d.ts +2 -0
  14. package/dist/adapters/rest.d.ts.map +1 -1
  15. package/dist/adapters/rest.js +72 -4
  16. package/dist/adapters/rest.js.map +1 -1
  17. package/dist/cli/index.js +519 -103
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/config/config-guard.d.ts.map +1 -1
  20. package/dist/config/config-guard.js +3 -2
  21. package/dist/config/config-guard.js.map +1 -1
  22. package/dist/config/config-hmac.d.ts +5 -0
  23. package/dist/config/config-hmac.d.ts.map +1 -0
  24. package/dist/config/config-hmac.js +29 -0
  25. package/dist/config/config-hmac.js.map +1 -0
  26. package/dist/config/manager.d.ts +14 -0
  27. package/dist/config/manager.d.ts.map +1 -1
  28. package/dist/config/manager.js +72 -13
  29. package/dist/config/manager.js.map +1 -1
  30. package/dist/mcp/server.d.ts.map +1 -1
  31. package/dist/mcp/server.js +2 -1
  32. package/dist/mcp/server.js.map +1 -1
  33. package/dist/server/unified.d.ts +4 -1
  34. package/dist/server/unified.d.ts.map +1 -1
  35. package/dist/server/unified.js +102 -33
  36. package/dist/server/unified.js.map +1 -1
  37. package/dist/service/config.d.ts +21 -0
  38. package/dist/service/config.d.ts.map +1 -0
  39. package/dist/service/config.js +94 -0
  40. package/dist/service/config.js.map +1 -0
  41. package/dist/service/generators.d.ts +14 -0
  42. package/dist/service/generators.d.ts.map +1 -0
  43. package/dist/service/generators.js +92 -0
  44. package/dist/service/generators.js.map +1 -0
  45. package/dist/service/index.d.ts +23 -0
  46. package/dist/service/index.d.ts.map +1 -0
  47. package/dist/service/index.js +215 -0
  48. package/dist/service/index.js.map +1 -0
  49. package/dist/service/platform.d.ts +5 -0
  50. package/dist/service/platform.d.ts.map +1 -0
  51. package/dist/service/platform.js +25 -0
  52. package/dist/service/platform.js.map +1 -0
  53. package/dist/storage/index.d.ts +39 -10
  54. package/dist/storage/index.d.ts.map +1 -1
  55. package/dist/storage/index.js +318 -31
  56. package/dist/storage/index.js.map +1 -1
  57. package/dist/types.d.ts +545 -14
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/types.js +74 -2
  60. package/dist/types.js.map +1 -1
  61. package/dist/utils/crypto.d.ts +9 -0
  62. package/dist/utils/crypto.d.ts.map +1 -1
  63. package/dist/utils/crypto.js +88 -19
  64. package/dist/utils/crypto.js.map +1 -1
  65. package/dist/utils/hsm.d.ts +82 -0
  66. package/dist/utils/hsm.d.ts.map +1 -0
  67. package/dist/utils/hsm.js +344 -0
  68. package/dist/utils/hsm.js.map +1 -0
  69. package/dist/utils/http.d.ts.map +1 -1
  70. package/dist/utils/http.js +14 -4
  71. package/dist/utils/http.js.map +1 -1
  72. package/dist/utils/keychain.d.ts.map +1 -1
  73. package/dist/utils/keychain.js +0 -8
  74. package/dist/utils/keychain.js.map +1 -1
  75. package/dist/utils/lock.d.ts +1 -1
  76. package/dist/utils/lock.d.ts.map +1 -1
  77. package/dist/utils/lock.js +4 -2
  78. package/dist/utils/lock.js.map +1 -1
  79. package/dist/utils/lockout.d.ts +56 -0
  80. package/dist/utils/lockout.d.ts.map +1 -0
  81. package/dist/utils/lockout.js +209 -0
  82. package/dist/utils/lockout.js.map +1 -0
  83. package/dist/utils/prompt.d.ts +13 -0
  84. package/dist/utils/prompt.d.ts.map +1 -0
  85. package/dist/utils/prompt.js +124 -0
  86. package/dist/utils/prompt.js.map +1 -0
  87. package/dist/utils/secure-memory.d.ts +20 -0
  88. package/dist/utils/secure-memory.d.ts.map +1 -0
  89. package/dist/utils/secure-memory.js +122 -0
  90. package/dist/utils/secure-memory.js.map +1 -0
  91. package/dist/utils/session.d.ts.map +1 -1
  92. package/dist/utils/session.js +14 -4
  93. package/dist/utils/session.js.map +1 -1
  94. package/dist/utils/update-checker.d.ts +1 -1
  95. package/dist/utils/update-checker.d.ts.map +1 -1
  96. package/dist/utils/update-checker.js +7 -5
  97. package/dist/utils/update-checker.js.map +1 -1
  98. package/dist/vault/index.d.ts.map +1 -1
  99. package/dist/version.d.ts +2 -0
  100. package/dist/version.d.ts.map +1 -0
  101. package/dist/version.js +8 -0
  102. package/dist/version.js.map +1 -0
  103. package/package.json +18 -9
  104. package/scripts/sync-version.js +88 -0
  105. package/scripts/install.sh +0 -54
@@ -3,6 +3,7 @@ import * as path from 'path';
3
3
  import * as yaml from 'js-yaml';
4
4
  import { ensureDir, pathExists } from '../utils/fs.js';
5
5
  import { EnvCPConfigSchema } from '../types.js';
6
+ import { generateConfigHmac, verifyConfigHmac, deriveHmacKey, getSystemIdentifier } from './config-hmac.js';
6
7
  const DEFAULT_CONFIG = {
7
8
  version: '1.0',
8
9
  vault: {
@@ -27,6 +28,14 @@ const DEFAULT_CONFIG = {
27
28
  audit_log: true,
28
29
  blacklist_patterns: ['*_SECRET', '*_PRIVATE', 'ADMIN_*', 'ROOT_*'],
29
30
  require_variable_password: false,
31
+ command_blacklist: ['mkfs', 'shred', 'wipefs', 'fdisk', 'parted', 'dd', 'chattr'],
32
+ run_safety: {
33
+ disallow_root_delete: true,
34
+ disallow_path_manipulation: true,
35
+ require_command_whitelist: false,
36
+ scrub_output: true,
37
+ redact_patterns: [],
38
+ },
30
39
  },
31
40
  sync: {
32
41
  enabled: false,
@@ -39,6 +48,8 @@ const DEFAULT_CONFIG = {
39
48
  timeout_minutes: 30,
40
49
  max_extensions: 5,
41
50
  path: '.envcp/.session',
51
+ lockout_threshold: 5,
52
+ lockout_base_seconds: 30,
42
53
  },
43
54
  encryption: {
44
55
  enabled: true,
@@ -46,6 +57,16 @@ const DEFAULT_CONFIG = {
46
57
  security: {
47
58
  mode: 'recoverable',
48
59
  recovery_file: '.envcp/.recovery',
60
+ brute_force_protection: {
61
+ enabled: true,
62
+ max_attempts: 5,
63
+ lockout_duration: 300,
64
+ progressive_delay: true,
65
+ max_delay: 60,
66
+ permanent_lockout_threshold: 50,
67
+ permanent_lockout_action: 'require_recovery_key',
68
+ notifications: {},
69
+ },
49
70
  },
50
71
  password: {
51
72
  min_length: 8,
@@ -53,6 +74,17 @@ const DEFAULT_CONFIG = {
53
74
  allow_numeric_only: false,
54
75
  allow_single_char: false,
55
76
  },
77
+ hsm: {
78
+ enabled: false,
79
+ type: 'yubikey',
80
+ require_touch: true,
81
+ protected_key_path: '.envcp/.hsm-key',
82
+ },
83
+ auth: {
84
+ method: 'password',
85
+ multi_factors: ['password', 'hsm'],
86
+ fallback: 'password',
87
+ },
56
88
  };
57
89
  // Deep merge utility: project values override global, arrays are replaced
58
90
  function deepMerge(target, source) {
@@ -63,21 +95,34 @@ function deepMerge(target, source) {
63
95
  if (srcVal && typeof srcVal === 'object' && !Array.isArray(srcVal) && tgtVal && typeof tgtVal === 'object' && !Array.isArray(tgtVal)) {
64
96
  result[key] = deepMerge(tgtVal, srcVal);
65
97
  }
66
- else if (srcVal !== undefined) {
98
+ else {
99
+ /* istanbul ignore next -- branch mapped incorrectly, statement covered */
67
100
  result[key] = srcVal;
68
101
  }
69
102
  }
70
103
  return result;
71
104
  }
72
105
  export async function loadConfig(projectPath) {
106
+ /* c8 ignore next -- at least HOME or USERPROFILE is always set in supported environments */
73
107
  const home = process.env.HOME || process.env.USERPROFILE || '';
74
108
  const globalConfigPath = path.join(home, '.envcp', 'config.yaml');
75
109
  const projectConfigPath = path.join(projectPath, 'envcp.yaml');
110
+ const sigPath = path.join(projectPath, '.envcp', '.config_signature');
111
+ const hmacKey = deriveHmacKey(getSystemIdentifier());
112
+ if (await pathExists(sigPath)) {
113
+ if (await pathExists(projectConfigPath)) {
114
+ const storedHmac = await fs.readFile(sigPath, 'utf8');
115
+ const projectContent = await fs.readFile(projectConfigPath, 'utf8');
116
+ if (!verifyConfigHmac(projectContent, storedHmac, hmacKey)) {
117
+ throw new Error('Config integrity check failed: envcp.yaml has been tampered with or corrupted. Verify the file or remove .envcp/.config_signature to regenerate.');
118
+ }
119
+ }
120
+ }
76
121
  let merged = DEFAULT_CONFIG;
77
122
  // Layer 1: global config (~/.envcp/config.yaml)
78
123
  if (await pathExists(globalConfigPath)) {
79
124
  const content = await fs.readFile(globalConfigPath, 'utf8');
80
- const parsed = yaml.load(content, { schema: yaml.DEFAULT_SCHEMA });
125
+ const parsed = yaml.load(content, { schema: yaml.JSON_SCHEMA });
81
126
  if (parsed && typeof parsed === 'object') {
82
127
  merged = deepMerge(merged, parsed);
83
128
  }
@@ -85,17 +130,26 @@ export async function loadConfig(projectPath) {
85
130
  // Layer 2: project config (envcp.yaml) — overrides global
86
131
  if (await pathExists(projectConfigPath)) {
87
132
  const content = await fs.readFile(projectConfigPath, 'utf8');
88
- const parsed = yaml.load(content, { schema: yaml.DEFAULT_SCHEMA });
133
+ const parsed = yaml.load(content, { schema: yaml.JSON_SCHEMA });
89
134
  if (parsed && typeof parsed === 'object') {
90
135
  merged = deepMerge(merged, parsed);
91
136
  }
92
137
  }
93
138
  return EnvCPConfigSchema.parse(merged);
94
139
  }
140
+ export async function saveConfigSignature(projectPath, configContent, key) {
141
+ const envcpDir = path.join(projectPath, '.envcp');
142
+ await ensureDir(envcpDir);
143
+ const sigPath = path.join(envcpDir, '.config_signature');
144
+ const hmac = generateConfigHmac(configContent, key);
145
+ await fs.writeFile(sigPath, hmac, { encoding: 'utf8', mode: 0o600 });
146
+ }
95
147
  export async function saveConfig(config, projectPath) {
96
148
  const configPath = path.join(projectPath, 'envcp.yaml');
97
149
  const content = yaml.dump(config, { indent: 2, lineWidth: -1 });
98
- await fs.writeFile(configPath, content, 'utf8');
150
+ await fs.writeFile(configPath, content, { encoding: 'utf8', mode: 0o600 });
151
+ const key = deriveHmacKey(getSystemIdentifier());
152
+ await saveConfigSignature(projectPath, content, key);
99
153
  }
100
154
  export async function initConfig(projectPath, projectName) {
101
155
  const envcpDir = path.join(projectPath, '.envcp');
@@ -204,7 +258,7 @@ function createMcpEntry(projectPath, isProjectLocal) {
204
258
  entry.cwd = projectPath;
205
259
  return entry;
206
260
  }
207
- function writeToConfig(config, format, entry) {
261
+ export function writeToConfig(config, format, entry) {
208
262
  switch (format) {
209
263
  case 'mcpServers': {
210
264
  if (!config.mcpServers)
@@ -254,6 +308,7 @@ function writeToConfig(config, format, entry) {
254
308
  }
255
309
  }
256
310
  export async function registerMcpConfig(projectPath) {
311
+ /* istanbul ignore next -- HOME or USERPROFILE always set in supported environments */
257
312
  const home = process.env.HOME || process.env.USERPROFILE || '';
258
313
  const platform = process.platform;
259
314
  const targets = getMcpTargets();
@@ -287,14 +342,12 @@ export async function registerMcpConfig(projectPath) {
287
342
  alreadyConfigured.push(target.name);
288
343
  continue;
289
344
  }
290
- if (result.written) {
291
- await ensureDir(path.dirname(configPath));
292
- await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf8');
293
- registered.push(target.name);
294
- }
345
+ await ensureDir(path.dirname(configPath));
346
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf8');
347
+ registered.push(target.name);
295
348
  }
296
349
  catch {
297
- // Skip invalid JSON or permission errors
350
+ /* istanbul ignore next -- rare: invalid JSON or permission errors are silently skipped */
298
351
  }
299
352
  }
300
353
  return { registered, alreadyConfigured, manual };
@@ -332,9 +385,15 @@ export function parseEnvFile(content) {
332
385
  export function validateVariableName(name) {
333
386
  return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name);
334
387
  }
388
+ const _patternCache = new Map();
335
389
  export function matchesPattern(name, pattern) {
336
- const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
337
- const regex = new RegExp('^' + escaped.replace(/\*/g, '.*') + '$');
390
+ let regex = _patternCache.get(pattern);
391
+ if (!regex) {
392
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
393
+ // eslint-disable-next-line security/detect-non-literal-regexp -- glob pattern from config; metacharacters escaped above
394
+ regex = new RegExp('^' + escaped.replace(/\*/g, '.*') + '$');
395
+ _patternCache.set(pattern, regex);
396
+ }
338
397
  return regex.test(name);
339
398
  }
340
399
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ1C,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAa;gBAEhB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAW3F,OAAO,CAAC,aAAa;IA6Bf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ1C,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAa;gBAEhB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAW3F,OAAO,CAAC,aAAa;IA6Bf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}
@@ -1,5 +1,6 @@
1
1
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { VERSION } from '../version.js';
3
4
  import { CallToolRequestSchema, ListToolsRequestSchema, ErrorCode, McpError, } from '@modelcontextprotocol/sdk/types.js';
4
5
  import { BaseAdapter } from '../adapters/base.js';
5
6
  class McpAdapter extends BaseAdapter {
@@ -12,7 +13,7 @@ export class EnvCPServer {
12
13
  adapter;
13
14
  constructor(config, projectPath, password, vaultPath) {
14
15
  this.adapter = new McpAdapter(config, projectPath, password, vaultPath);
15
- this.server = new Server({ name: 'envcp', version: '1.0.0' }, { capabilities: { tools: {} } });
16
+ this.server = new Server({ name: 'envcp', version: VERSION }, { capabilities: { tools: {} } });
16
17
  this.setupHandlers();
17
18
  }
18
19
  setupHandlers() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,QAAQ,GACT,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,UAAW,SAAQ,WAAW;IACxB,aAAa;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,WAAW;IACd,MAAM,CAAS;IACf,OAAO,CAAa;IAE5B,YAAY,MAAmB,EAAE,WAAmB,EAAE,QAAiB,EAAE,SAAkB;QACzF,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAExE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EACnC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACjE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,UAAU;aAC7B,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC,CAAC;gBAC1F,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,QAAQ,GACT,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,UAAW,SAAQ,WAAW;IACxB,aAAa;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,WAAW;IACd,MAAM,CAAS;IACf,OAAO,CAAa;IAE5B,YAAY,MAAmB,EAAE,WAAmB,EAAE,QAAiB,EAAE,SAAkB;QACzF,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAExE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EACnC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACjE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACpD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,UAAU;aAC7B,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC,CAAC;gBAC1F,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;CACF"}
@@ -11,8 +11,11 @@ export declare class UnifiedServer {
11
11
  private mcpServer;
12
12
  private httpServer;
13
13
  private rateLimiter;
14
+ private logs;
15
+ private shutdownHandlers;
14
16
  constructor(config: EnvCPConfig, serverConfig: ServerConfig, projectPath: string, password?: string);
15
- detectClientType(req: http.IncomingMessage): ClientType;
17
+ detectClientType(req: http.IncomingMessage, pathname?: string): ClientType;
18
+ private checkApiKeySecurity;
16
19
  start(): Promise<void>;
17
20
  private handleRESTRequest;
18
21
  private handleOpenAIRequest;
@@ -1 +1 @@
1
- {"version":3,"file":"unified.d.ts","sourceRoot":"","sources":["../../src/server/unified.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAc,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOhF,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAE1B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,WAAW,CAA2C;gBAElD,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAQnG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,GAAG,UAAU;IAuCjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAyKd,iBAAiB;YAwFjB,mBAAmB;YAwEnB,mBAAmB;IAwEjC,IAAI,IAAI,IAAI;CAeb"}
1
+ {"version":3,"file":"unified.d.ts","sourceRoot":"","sources":["../../src/server/unified.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAUpE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAE1B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,gBAAgB,CAA4D;gBAExE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAQnG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU;IA0C1E,OAAO,CAAC,mBAAmB;IA+BrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA0Ld,iBAAiB;YA0FjB,mBAAmB;YA6EnB,mBAAmB;IAiFjC,IAAI,IAAI,IAAI;CAuBb"}
@@ -1,9 +1,12 @@
1
+ import { VERSION } from '../version.js';
1
2
  import { RESTAdapter } from '../adapters/rest.js';
2
3
  import { OpenAIAdapter } from '../adapters/openai.js';
3
4
  import { GeminiAdapter } from '../adapters/gemini.js';
4
5
  import { EnvCPServer } from '../mcp/server.js';
5
6
  import { resolveVaultPath } from '../vault/index.js';
6
7
  import { setCorsHeaders, sendJson, parseBody, validateApiKey, RateLimiter, rateLimitMiddleware } from '../utils/http.js';
8
+ import { LogManager } from '../storage/index.js';
9
+ import * as path from 'path';
7
10
  import * as http from 'http';
8
11
  export class UnifiedServer {
9
12
  config;
@@ -16,6 +19,8 @@ export class UnifiedServer {
16
19
  mcpServer = null;
17
20
  httpServer = null;
18
21
  rateLimiter = new RateLimiter(60, 60000);
22
+ logs = null;
23
+ shutdownHandlers = null;
19
24
  constructor(config, serverConfig, projectPath, password) {
20
25
  this.config = config;
21
26
  this.serverConfig = serverConfig;
@@ -23,9 +28,12 @@ export class UnifiedServer {
23
28
  this.password = password;
24
29
  }
25
30
  // Detect client type from request headers
26
- detectClientType(req) {
31
+ detectClientType(req, pathname) {
27
32
  const userAgent = req.headers['user-agent']?.toLowerCase() || '';
28
- const pathname = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`).pathname;
33
+ if (pathname === undefined) {
34
+ /* c8 ignore next -- detectClientType is always called with pathname from request routing; the undefined branch is unreachable in practice */
35
+ pathname = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`).pathname;
36
+ }
29
37
  // Check for OpenAI-style requests
30
38
  if (pathname.startsWith('/v1/chat') ||
31
39
  pathname.startsWith('/v1/functions') ||
@@ -55,16 +63,45 @@ export class UnifiedServer {
55
63
  }
56
64
  return 'unknown';
57
65
  }
66
+ checkApiKeySecurity() {
67
+ const { api_key } = this.serverConfig;
68
+ if (api_key)
69
+ return;
70
+ const access = this.config.access;
71
+ const activeFlags = [
72
+ 'allow_ai_read',
73
+ 'allow_ai_write',
74
+ 'allow_ai_delete',
75
+ 'allow_ai_export',
76
+ 'allow_ai_execute',
77
+ 'allow_ai_active_check',
78
+ ].filter(flag => access[flag]);
79
+ if (activeFlags.length === 0)
80
+ return;
81
+ if (access.allow_ai_execute) {
82
+ throw new Error('Refusing to start: allow_ai_execute is enabled but no api_key is set.\n' +
83
+ 'Unauthenticated callers can execute arbitrary commands.\n' +
84
+ 'Set server.api_key in your config, or disable allow_ai_execute.');
85
+ }
86
+ throw new Error('Refusing to start: AI access is enabled but no api_key is set.\n' +
87
+ `Active AI flags: ${activeFlags.join(', ')}\n` +
88
+ 'Set server.api_key in your config, or disable all AI access flags.');
89
+ }
58
90
  async start() {
59
91
  const { mode, port, host, api_key } = this.serverConfig;
60
92
  // Resolve vault path once before creating any adapters
61
93
  const vaultPath = await resolveVaultPath(this.projectPath, this.config);
94
+ // Initialize audit log for HTTP modes
95
+ this.logs = new LogManager(path.join(this.projectPath, '.envcp', 'logs'), this.config.audit);
96
+ await this.logs.init();
62
97
  // MCP mode uses stdio, not HTTP
63
98
  if (mode === 'mcp') {
64
99
  this.mcpServer = new EnvCPServer(this.config, this.projectPath, this.password, vaultPath);
65
100
  await this.mcpServer.start();
66
101
  return;
67
102
  }
103
+ // Warn if AI access is enabled without an API key
104
+ this.checkApiKeySecurity();
68
105
  // Initialize adapters based on mode
69
106
  if (mode === 'rest' || mode === 'all' || mode === 'auto') {
70
107
  this.restAdapter = new RESTAdapter(this.config, this.projectPath, this.password, vaultPath);
@@ -113,8 +150,10 @@ export class UnifiedServer {
113
150
  if (api_key) {
114
151
  const providedKey = (req.headers['x-api-key'] ||
115
152
  req.headers['x-goog-api-key'] ||
116
- req.headers['authorization']?.replace('Bearer ', ''));
153
+ req.headers['authorization']?.replace(/^Bearer\s+/i, ''));
117
154
  if (!validateApiKey(providedKey, api_key)) {
155
+ /* c8 ignore next -- logs is always initialized in start(); the undefined branch is unreachable in practice */
156
+ await this.logs?.log({ timestamp: new Date().toISOString(), operation: 'auth_failure', variable: '', source: 'api', success: false, message: `Invalid API key from ${req.socket.remoteAddress ?? 'unknown'}` });
118
157
  sendJson(res, 401, { error: 'Invalid API key' });
119
158
  return;
120
159
  }
@@ -123,10 +162,10 @@ export class UnifiedServer {
123
162
  const pathname = parsedUrl.pathname;
124
163
  // Root endpoint - show server info and detected mode
125
164
  if (pathname === '/' && req.method === 'GET') {
126
- const detectedType = this.serverConfig.auto_detect ? this.detectClientType(req) : 'unknown';
165
+ const detectedType = this.serverConfig.auto_detect ? this.detectClientType(req, pathname) : 'unknown';
127
166
  sendJson(res, 200, {
128
167
  name: 'EnvCP Unified Server',
129
- version: '1.0.0',
168
+ version: VERSION,
130
169
  mode: mode,
131
170
  detected_client: detectedType,
132
171
  auto_detect: this.serverConfig.auto_detect,
@@ -142,7 +181,7 @@ export class UnifiedServer {
142
181
  // Detect client type
143
182
  let clientType = 'unknown';
144
183
  if (this.serverConfig.auto_detect) {
145
- clientType = this.detectClientType(req);
184
+ clientType = this.detectClientType(req, pathname);
146
185
  }
147
186
  // Force mode query param
148
187
  const forceMode = parsedUrl.searchParams.get('mode') || undefined;
@@ -153,22 +192,22 @@ export class UnifiedServer {
153
192
  // Route to appropriate adapter
154
193
  // REST API routes
155
194
  if ((clientType === 'rest' || clientType === 'unknown') && pathname.startsWith('/api')) {
156
- await this.handleRESTRequest(req, res);
195
+ await this.handleRESTRequest(req, res, parsedUrl);
157
196
  return;
158
197
  }
159
198
  // OpenAI routes
160
199
  if (clientType === 'openai' || pathname.startsWith('/v1/chat') || pathname.startsWith('/v1/functions') || pathname === '/v1/tool_calls' || pathname === '/v1/models') {
161
- await this.handleOpenAIRequest(req, res);
200
+ await this.handleOpenAIRequest(req, res, parsedUrl);
162
201
  return;
163
202
  }
164
203
  // Gemini routes
165
204
  if (clientType === 'gemini' || pathname.includes(':generateContent') || pathname === '/v1/function_calls' || pathname === '/v1/tools') {
166
- await this.handleGeminiRequest(req, res);
205
+ await this.handleGeminiRequest(req, res, parsedUrl);
167
206
  return;
168
207
  }
169
208
  // Default to REST for unknown paths
170
209
  if (pathname.startsWith('/api')) {
171
- await this.handleRESTRequest(req, res);
210
+ await this.handleRESTRequest(req, res, parsedUrl);
172
211
  return;
173
212
  }
174
213
  // 404 with helpful info
@@ -187,22 +226,31 @@ export class UnifiedServer {
187
226
  sendJson(res, 500, { error: message });
188
227
  }
189
228
  });
229
+ // Remove any existing shutdown handlers first
230
+ if (this.shutdownHandlers) {
231
+ process.off('SIGTERM', this.shutdownHandlers.sigterm);
232
+ process.off('SIGINT', this.shutdownHandlers.sigint);
233
+ this.shutdownHandlers = null;
234
+ }
190
235
  const shutdown = () => {
191
236
  this.stop();
192
237
  process.exit(0);
193
238
  };
194
239
  process.on('SIGTERM', shutdown);
195
240
  process.on('SIGINT', shutdown);
241
+ this.shutdownHandlers = { sigterm: shutdown, sigint: shutdown };
196
242
  return new Promise((resolve) => {
197
243
  this.httpServer.listen(port, host, () => {
198
244
  resolve();
199
245
  });
200
246
  });
201
247
  }
202
- async handleRESTRequest(req, res) {
248
+ async handleRESTRequest(req, res, parsedUrl) {
203
249
  // Delegate to REST adapter's internal handling
204
- const parsedUrl = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
205
- const pathname = parsedUrl.pathname || '/';
250
+ /* c8 ignore next -- parsedUrl is always provided by caller; the fallback is unreachable in practice */
251
+ const url = parsedUrl ?? new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
252
+ /* c8 ignore next -- URL.pathname is always '/' at minimum; the '/' fallback is unreachable */
253
+ const pathname = url.pathname || '/';
206
254
  const segments = pathname.split('/').filter(Boolean);
207
255
  if (!this.restAdapter) {
208
256
  sendJson(res, 503, { success: false, error: 'REST adapter not initialized' });
@@ -241,7 +289,7 @@ export class UnifiedServer {
241
289
  return;
242
290
  }
243
291
  if (segments[2] && req.method === 'GET') {
244
- const result = await this.restAdapter.callTool('envcp_get', { name: segments[2], show_value: parsedUrl.searchParams.get('show_value') === 'true' });
292
+ const result = await this.restAdapter.callTool('envcp_get', { name: segments[2], show_value: url.searchParams.get('show_value') === 'true' });
245
293
  sendJson(res, 200, { success: true, data: result, timestamp: new Date().toISOString() });
246
294
  return;
247
295
  }
@@ -276,13 +324,15 @@ export class UnifiedServer {
276
324
  sendJson(res, 500, { success: false, error: message, timestamp: new Date().toISOString() });
277
325
  }
278
326
  }
279
- async handleOpenAIRequest(req, res) {
327
+ async handleOpenAIRequest(req, res, parsedUrl) {
280
328
  if (!this.openaiAdapter) {
281
329
  sendJson(res, 503, { error: { message: 'OpenAI adapter not initialized', type: 'service_unavailable' } });
282
330
  return;
283
331
  }
284
- const parsedUrl = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
285
- const pathname = parsedUrl.pathname || '/';
332
+ /* c8 ignore next -- parsedUrl is always provided by caller; the fallback is unreachable in practice */
333
+ const url = parsedUrl ?? new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
334
+ /* c8 ignore next -- URL.pathname is always '/' at minimum; the '/' fallback is unreachable */
335
+ const pathname = url.pathname || '/';
286
336
  const body = req.method === 'POST' ? await parseBody(req) : {};
287
337
  try {
288
338
  if (pathname === '/v1/models' && req.method === 'GET') {
@@ -297,19 +347,22 @@ export class UnifiedServer {
297
347
  return;
298
348
  }
299
349
  if (pathname === '/v1/functions/call' && req.method === 'POST') {
300
- const { name, arguments: args } = body;
301
- const result = await this.openaiAdapter.callTool(name, args || {});
350
+ const b = body;
351
+ const name = typeof b.name === 'string' ? b.name : '';
352
+ const args = (b.arguments && typeof b.arguments === 'object') ? b.arguments : {};
353
+ const result = await this.openaiAdapter.callTool(name, args);
302
354
  sendJson(res, 200, { object: 'function_result', name, result });
303
355
  return;
304
356
  }
305
357
  if (pathname === '/v1/tool_calls' && req.method === 'POST') {
306
358
  const { tool_calls } = body;
307
- const results = await this.openaiAdapter.processToolCalls(tool_calls);
359
+ const results = await this.openaiAdapter.processToolCalls(Array.isArray(tool_calls) ? tool_calls : []);
308
360
  sendJson(res, 200, { object: 'list', data: results });
309
361
  return;
310
362
  }
311
363
  if (pathname === '/v1/chat/completions' && req.method === 'POST') {
312
- const messages = body.messages;
364
+ const { messages: rawMessages } = body;
365
+ const messages = Array.isArray(rawMessages) ? rawMessages : [];
313
366
  const lastMessage = messages?.[messages.length - 1];
314
367
  if (lastMessage?.tool_calls) {
315
368
  const results = await this.openaiAdapter.processToolCalls(lastMessage.tool_calls);
@@ -338,13 +391,15 @@ export class UnifiedServer {
338
391
  sendJson(res, 500, { error: { message, type: 'internal_error' } });
339
392
  }
340
393
  }
341
- async handleGeminiRequest(req, res) {
394
+ async handleGeminiRequest(req, res, parsedUrl) {
342
395
  if (!this.geminiAdapter) {
343
396
  sendJson(res, 503, { error: { code: 503, message: 'Gemini adapter not initialized', status: 'UNAVAILABLE' } });
344
397
  return;
345
398
  }
346
- const parsedUrl = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
347
- const pathname = parsedUrl.pathname || '/';
399
+ /* c8 ignore next -- parsedUrl is always provided by caller; the fallback is unreachable in practice */
400
+ const url = parsedUrl ?? new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
401
+ /* c8 ignore next -- URL.pathname is always '/' at minimum; the '/' fallback is unreachable */
402
+ const pathname = url.pathname || '/';
348
403
  const body = req.method === 'POST' ? await parseBody(req) : {};
349
404
  try {
350
405
  if (pathname === '/v1/tools' && req.method === 'GET') {
@@ -352,25 +407,32 @@ export class UnifiedServer {
352
407
  return;
353
408
  }
354
409
  if (pathname === '/v1/functions/call' && req.method === 'POST') {
355
- const { name, args } = body;
356
- const result = await this.geminiAdapter.callTool(name, args || {});
410
+ const bg = body;
411
+ /* c8 ignore next -- function name validation always returns string for valid requests; the else branch is unreachable in practice */
412
+ const name = typeof bg.name === 'string' ? bg.name : '';
413
+ const args = (bg.args && typeof bg.args === 'object') ? bg.args : {};
414
+ const result = await this.geminiAdapter.callTool(name, args);
357
415
  sendJson(res, 200, { name, response: { result } });
358
416
  return;
359
417
  }
360
418
  if (pathname === '/v1/function_calls' && req.method === 'POST') {
361
- const { functionCalls } = body;
362
- const results = await this.geminiAdapter.processFunctionCalls(functionCalls);
419
+ const { functionCalls: rawFunctionCalls } = body;
420
+ const results = await this.geminiAdapter.processFunctionCalls(Array.isArray(rawFunctionCalls) ? rawFunctionCalls : []);
363
421
  sendJson(res, 200, { functionResponses: results });
364
422
  return;
365
423
  }
366
424
  if (pathname.includes(':generateContent') && req.method === 'POST') {
367
- const contents = body.contents;
425
+ const { contents } = body;
368
426
  const functionCalls = [];
369
- if (contents) {
427
+ if (Array.isArray(contents)) {
370
428
  for (const content of contents) {
371
- for (const part of content.parts || []) {
372
- if (part.functionCall)
373
- functionCalls.push(part.functionCall);
429
+ const parts = (content && typeof content === 'object' && Array.isArray(content.parts))
430
+ ? content.parts
431
+ : [];
432
+ for (const part of parts) {
433
+ const p = part;
434
+ if (p.functionCall)
435
+ functionCalls.push(p.functionCall);
374
436
  }
375
437
  }
376
438
  }
@@ -414,6 +476,13 @@ export class UnifiedServer {
414
476
  if (this.geminiAdapter) {
415
477
  this.geminiAdapter.stopServer();
416
478
  }
479
+ this.rateLimiter?.destroy();
480
+ // Remove shutdown handlers
481
+ if (this.shutdownHandlers) {
482
+ process.off('SIGTERM', this.shutdownHandlers.sigterm);
483
+ process.off('SIGINT', this.shutdownHandlers.sigint);
484
+ this.shutdownHandlers = null;
485
+ }
417
486
  }
418
487
  }
419
488
  //# sourceMappingURL=unified.js.map