@fentz26/envcp 1.2.0-exp.92feaad → 1.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/README.md +21 -36
- package/VERSION +1 -1
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/base.js +43 -23
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/gemini.d.ts +5 -0
- package/dist/adapters/gemini.d.ts.map +1 -1
- package/dist/adapters/gemini.js +27 -9
- package/dist/adapters/gemini.js.map +1 -1
- package/dist/adapters/openai.d.ts +5 -0
- package/dist/adapters/openai.d.ts.map +1 -1
- package/dist/adapters/openai.js +36 -12
- package/dist/adapters/openai.js.map +1 -1
- package/dist/adapters/rest.d.ts +1 -0
- package/dist/adapters/rest.d.ts.map +1 -1
- package/dist/adapters/rest.js +7 -3
- package/dist/adapters/rest.js.map +1 -1
- package/dist/cli/index.js +1328 -336
- package/dist/cli/index.js.map +1 -1
- package/dist/config/config-hmac.d.ts.map +1 -1
- package/dist/config/config-hmac.js +5 -1
- package/dist/config/config-hmac.js.map +1 -1
- package/dist/config/manager.d.ts +12 -2
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +169 -87
- package/dist/config/manager.js.map +1 -1
- package/dist/server/unified.d.ts +1 -0
- package/dist/server/unified.d.ts.map +1 -1
- package/dist/server/unified.js +53 -29
- package/dist/server/unified.js.map +1 -1
- package/dist/service/config.d.ts.map +1 -1
- package/dist/service/config.js +1 -7
- package/dist/service/config.js.map +1 -1
- package/dist/types.d.ts +265 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +24 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/crypto.d.ts +5 -3
- package/dist/utils/crypto.d.ts.map +1 -1
- package/dist/utils/crypto.js +5 -6
- package/dist/utils/crypto.js.map +1 -1
- package/dist/utils/fs.d.ts +11 -1
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +20 -11
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/hsm.d.ts.map +1 -1
- package/dist/utils/hsm.js +6 -2
- package/dist/utils/hsm.js.map +1 -1
- package/dist/utils/http.d.ts.map +1 -1
- package/dist/utils/http.js +8 -3
- package/dist/utils/http.js.map +1 -1
- package/dist/utils/prompt.d.ts +11 -0
- package/dist/utils/prompt.d.ts.map +1 -1
- package/dist/utils/prompt.js +239 -2
- package/dist/utils/prompt.js.map +1 -1
- package/dist/utils/session.d.ts +3 -1
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +38 -16
- package/dist/utils/session.js.map +1 -1
- package/package.json +2 -2
- package/scripts/sync-version.js +3 -3
package/dist/config/manager.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from 'node:fs/promises';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import * as yaml from 'js-yaml';
|
|
4
|
-
import { ensureDir, pathExists } from '../utils/fs.js';
|
|
4
|
+
import { ensureDir, pathExists, parseEnv } from '../utils/fs.js';
|
|
5
5
|
import { EnvCPConfigSchema } from '../types.js';
|
|
6
6
|
import { generateConfigHmac, verifyConfigHmac, deriveHmacKey, getSystemIdentifier } from './config-hmac.js';
|
|
7
7
|
const DEFAULT_CONFIG = {
|
|
@@ -15,6 +15,8 @@ const DEFAULT_CONFIG = {
|
|
|
15
15
|
encrypted: true,
|
|
16
16
|
},
|
|
17
17
|
access: {
|
|
18
|
+
variable_rules: {},
|
|
19
|
+
client_rules: {},
|
|
18
20
|
allow_ai_read: false,
|
|
19
21
|
allow_ai_write: false,
|
|
20
22
|
allow_ai_delete: false,
|
|
@@ -113,22 +115,26 @@ async function loadYamlObjectIfExists(filePath) {
|
|
|
113
115
|
const parsed = yaml.load(content, { schema: yaml.JSON_SCHEMA });
|
|
114
116
|
return parsed && typeof parsed === 'object' ? parsed : null;
|
|
115
117
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
function getHomeDir() {
|
|
119
|
+
return process.env.HOME || process.env.USERPROFILE || '';
|
|
120
|
+
}
|
|
121
|
+
async function verifyProjectConfigSignature(projectPath) {
|
|
120
122
|
const projectConfigPath = path.join(projectPath, 'envcp.yaml');
|
|
121
123
|
const sigPath = path.join(projectPath, '.envcp', '.config_signature');
|
|
122
124
|
const hmacKey = deriveHmacKey(getSystemIdentifier());
|
|
123
|
-
if (await pathExists(sigPath)) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
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.');
|
|
129
|
-
}
|
|
125
|
+
if (await pathExists(sigPath) && await pathExists(projectConfigPath)) {
|
|
126
|
+
const storedHmac = await fs.readFile(sigPath, 'utf8');
|
|
127
|
+
const projectContent = await fs.readFile(projectConfigPath, 'utf8');
|
|
128
|
+
if (!verifyConfigHmac(projectContent, storedHmac, hmacKey)) {
|
|
129
|
+
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.');
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
|
+
}
|
|
133
|
+
export async function loadConfig(projectPath) {
|
|
134
|
+
const home = getHomeDir();
|
|
135
|
+
const globalConfigPath = path.join(home, '.envcp', 'config.yaml');
|
|
136
|
+
const projectConfigPath = path.join(projectPath, 'envcp.yaml');
|
|
137
|
+
await verifyProjectConfigSignature(projectPath);
|
|
132
138
|
let merged = DEFAULT_CONFIG;
|
|
133
139
|
// Layer 1: global config (~/.envcp/config.yaml)
|
|
134
140
|
const globalConfig = await loadYamlObjectIfExists(globalConfigPath);
|
|
@@ -142,6 +148,28 @@ export async function loadConfig(projectPath) {
|
|
|
142
148
|
}
|
|
143
149
|
return EnvCPConfigSchema.parse(merged);
|
|
144
150
|
}
|
|
151
|
+
export async function loadScopedConfig(projectPath, scope) {
|
|
152
|
+
if (scope === 'merged') {
|
|
153
|
+
return loadConfig(projectPath);
|
|
154
|
+
}
|
|
155
|
+
const home = getHomeDir();
|
|
156
|
+
let merged = DEFAULT_CONFIG;
|
|
157
|
+
if (scope === 'home') {
|
|
158
|
+
const globalConfigPath = path.join(home, '.envcp', 'config.yaml');
|
|
159
|
+
const globalConfig = await loadYamlObjectIfExists(globalConfigPath);
|
|
160
|
+
if (globalConfig) {
|
|
161
|
+
merged = deepMerge(merged, globalConfig);
|
|
162
|
+
}
|
|
163
|
+
return EnvCPConfigSchema.parse(merged);
|
|
164
|
+
}
|
|
165
|
+
await verifyProjectConfigSignature(projectPath);
|
|
166
|
+
const projectConfigPath = path.join(projectPath, 'envcp.yaml');
|
|
167
|
+
const projectConfig = await loadYamlObjectIfExists(projectConfigPath);
|
|
168
|
+
if (projectConfig) {
|
|
169
|
+
merged = deepMerge(merged, projectConfig);
|
|
170
|
+
}
|
|
171
|
+
return EnvCPConfigSchema.parse(merged);
|
|
172
|
+
}
|
|
145
173
|
export async function saveConfigSignature(projectPath, configContent, key) {
|
|
146
174
|
const envcpDir = path.join(projectPath, '.envcp');
|
|
147
175
|
await ensureDir(envcpDir);
|
|
@@ -164,6 +192,14 @@ export async function saveConfig(config, projectPath, options) {
|
|
|
164
192
|
const key = deriveHmacKey(getSystemIdentifier());
|
|
165
193
|
await saveConfigSignature(projectPath, content, key);
|
|
166
194
|
}
|
|
195
|
+
export async function saveScopedConfig(config, projectPath, scope) {
|
|
196
|
+
if (scope === 'home') {
|
|
197
|
+
const home = getHomeDir();
|
|
198
|
+
await saveConfig(config, home, { global: true });
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
await saveConfig(config, projectPath);
|
|
202
|
+
}
|
|
167
203
|
export async function initConfig(projectPath, projectName, options) {
|
|
168
204
|
const envcpDir = path.join(projectPath, '.envcp');
|
|
169
205
|
await ensureDir(envcpDir);
|
|
@@ -192,59 +228,34 @@ export async function initConfig(projectPath, projectName, options) {
|
|
|
192
228
|
}
|
|
193
229
|
return config;
|
|
194
230
|
}
|
|
231
|
+
function globalMcpTarget(name, getPath, format) {
|
|
232
|
+
return { name, getPath, projectLocal: false, requireExisting: true, format };
|
|
233
|
+
}
|
|
234
|
+
function getRoamingConfigPath(home, ...segments) {
|
|
235
|
+
const appData = process.env.APPDATA || path.join(home, 'AppData', 'Roaming');
|
|
236
|
+
return path.join(appData, ...segments);
|
|
237
|
+
}
|
|
195
238
|
function getMcpTargets() {
|
|
196
239
|
return [
|
|
197
240
|
// --- Global configs (require existing file = tool is installed) ---
|
|
198
|
-
{
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
getPath: (_proj, home) => path.join(home, '.cursor', 'mcp.json'),
|
|
217
|
-
projectLocal: false, requireExisting: true, format: 'mcpServers',
|
|
218
|
-
},
|
|
219
|
-
{
|
|
220
|
-
name: 'Windsurf',
|
|
221
|
-
getPath: (_proj, home) => path.join(home, '.codeium', 'windsurf', 'mcp_config.json'),
|
|
222
|
-
projectLocal: false, requireExisting: true, format: 'mcpServers',
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
name: 'Zed',
|
|
226
|
-
getPath: (_proj, home, platform) => {
|
|
227
|
-
if (platform === 'win32')
|
|
228
|
-
return path.join(process.env.APPDATA || path.join(home, 'AppData', 'Roaming'), 'Zed', 'settings.json');
|
|
229
|
-
return path.join(home, '.config', 'zed', 'settings.json');
|
|
230
|
-
},
|
|
231
|
-
projectLocal: false, requireExisting: true, format: 'context_servers',
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
name: 'Continue.dev',
|
|
235
|
-
getPath: (_proj, home) => path.join(home, '.continue', 'mcp.json'),
|
|
236
|
-
projectLocal: false, requireExisting: true, format: 'mcpServers',
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
name: 'OpenCode',
|
|
240
|
-
getPath: (_proj, home) => path.join(home, '.config', 'opencode', 'opencode.json'),
|
|
241
|
-
projectLocal: false, requireExisting: true, format: 'mcp_key',
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
name: 'GitHub Copilot CLI',
|
|
245
|
-
getPath: (_proj, home) => path.join(home, '.copilot', 'mcp-config.json'),
|
|
246
|
-
projectLocal: false, requireExisting: true, format: 'mcp_servers_array',
|
|
247
|
-
},
|
|
241
|
+
globalMcpTarget('Claude Desktop', (_proj, home, platform) => {
|
|
242
|
+
if (platform === 'darwin')
|
|
243
|
+
return path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
|
|
244
|
+
if (platform === 'win32')
|
|
245
|
+
return getRoamingConfigPath(home, 'Claude', 'claude_desktop_config.json');
|
|
246
|
+
return path.join(home, '.config', 'Claude', 'claude_desktop_config.json');
|
|
247
|
+
}, 'mcpServers'),
|
|
248
|
+
globalMcpTarget('Claude Code', (_proj, home) => path.join(home, '.claude', 'mcp.json'), 'mcpServers'),
|
|
249
|
+
globalMcpTarget('Cursor', (_proj, home) => path.join(home, '.cursor', 'mcp.json'), 'mcpServers'),
|
|
250
|
+
globalMcpTarget('Windsurf', (_proj, home) => path.join(home, '.codeium', 'windsurf', 'mcp_config.json'), 'mcpServers'),
|
|
251
|
+
globalMcpTarget('Zed', (_proj, home, platform) => {
|
|
252
|
+
if (platform === 'win32')
|
|
253
|
+
return getRoamingConfigPath(home, 'Zed', 'settings.json');
|
|
254
|
+
return path.join(home, '.config', 'zed', 'settings.json');
|
|
255
|
+
}, 'context_servers'),
|
|
256
|
+
globalMcpTarget('Continue.dev', (_proj, home) => path.join(home, '.continue', 'mcp.json'), 'mcpServers'),
|
|
257
|
+
globalMcpTarget('OpenCode', (_proj, home) => path.join(home, '.config', 'opencode', 'opencode.json'), 'mcp_key'),
|
|
258
|
+
globalMcpTarget('GitHub Copilot CLI', (_proj, home) => path.join(home, '.copilot', 'mcp-config.json'), 'mcp_servers_array'),
|
|
248
259
|
// --- Project-local configs (create if tool dir detected) ---
|
|
249
260
|
{
|
|
250
261
|
name: 'Cursor (project)',
|
|
@@ -373,34 +384,14 @@ export async function registerMcpConfig(projectPath) {
|
|
|
373
384
|
return { registered, alreadyConfigured, manual };
|
|
374
385
|
}
|
|
375
386
|
/**
|
|
376
|
-
* Parses a `.env` file into a key/value map.
|
|
387
|
+
* Parses a `.env` file into a key/value map with strict dotenv semantics.
|
|
377
388
|
* Handles double-quoted values with backslash escape sequences (`\"`, `\\`).
|
|
378
389
|
* Single-quoted values are taken literally. Lines starting with `#` are ignored.
|
|
390
|
+
* Keys that are not valid POSIX identifiers are dropped.
|
|
379
391
|
* @param content - Raw text content of a `.env` file
|
|
380
392
|
*/
|
|
381
393
|
export function parseEnvFile(content) {
|
|
382
|
-
|
|
383
|
-
for (const line of content.split('\n')) {
|
|
384
|
-
const trimmed = line.trim();
|
|
385
|
-
if (!trimmed || trimmed.startsWith('#'))
|
|
386
|
-
continue;
|
|
387
|
-
const eqIndex = trimmed.indexOf('=');
|
|
388
|
-
if (eqIndex === -1)
|
|
389
|
-
continue;
|
|
390
|
-
const key = trimmed.substring(0, eqIndex).trim();
|
|
391
|
-
let value = trimmed.substring(eqIndex + 1).trim();
|
|
392
|
-
// Strip quotes and unescape
|
|
393
|
-
if (value.startsWith('"') && value.endsWith('"')) {
|
|
394
|
-
value = value.slice(1, -1).replaceAll('\\"', '"').replaceAll('\\\\', '\\');
|
|
395
|
-
}
|
|
396
|
-
else if (value.startsWith("'") && value.endsWith("'")) {
|
|
397
|
-
value = value.slice(1, -1);
|
|
398
|
-
}
|
|
399
|
-
if (validateVariableName(key)) {
|
|
400
|
-
vars[key] = value;
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
return vars;
|
|
394
|
+
return parseEnv(content, { validateNames: true, escapeStyle: 'dotenv' });
|
|
404
395
|
}
|
|
405
396
|
export function validateVariableName(name) {
|
|
406
397
|
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name);
|
|
@@ -439,6 +430,97 @@ export function canAccess(name, config) {
|
|
|
439
430
|
}
|
|
440
431
|
return true;
|
|
441
432
|
}
|
|
433
|
+
function toMinutes(value) {
|
|
434
|
+
const [hours, minutes] = value.split(':').map((part) => Number.parseInt(part, 10));
|
|
435
|
+
return hours * 60 + minutes;
|
|
436
|
+
}
|
|
437
|
+
function isWindowActive(window, now) {
|
|
438
|
+
if (!window) {
|
|
439
|
+
return true;
|
|
440
|
+
}
|
|
441
|
+
const currentMinutes = now.getHours() * 60 + now.getMinutes();
|
|
442
|
+
const startMinutes = toMinutes(window.start);
|
|
443
|
+
const endMinutes = toMinutes(window.end);
|
|
444
|
+
if (startMinutes === endMinutes) {
|
|
445
|
+
return true;
|
|
446
|
+
}
|
|
447
|
+
if (startMinutes < endMinutes) {
|
|
448
|
+
return currentMinutes >= startMinutes && currentMinutes < endMinutes;
|
|
449
|
+
}
|
|
450
|
+
return currentMinutes >= startMinutes || currentMinutes < endMinutes;
|
|
451
|
+
}
|
|
452
|
+
function getClientRule(config, clientId = '') {
|
|
453
|
+
if (!clientId) {
|
|
454
|
+
return undefined;
|
|
455
|
+
}
|
|
456
|
+
return config.access.client_rules?.[clientId];
|
|
457
|
+
}
|
|
458
|
+
function getClientVariableRule(name, config, clientId = '') {
|
|
459
|
+
return getClientRule(config, clientId)?.variable_rules?.[name];
|
|
460
|
+
}
|
|
461
|
+
export function isVariableRuleActive(name, config, now = new Date(), clientId = '') {
|
|
462
|
+
const globalWindow = config.access.variable_rules?.[name]?.active_window;
|
|
463
|
+
const clientWindow = getClientVariableRule(name, config, clientId)?.active_window;
|
|
464
|
+
return isWindowActive(globalWindow, now) && isWindowActive(clientWindow, now);
|
|
465
|
+
}
|
|
466
|
+
function getVariableRuleFlag(name, config, operation, clientId = '') {
|
|
467
|
+
const clientRule = getClientVariableRule(name, config, clientId);
|
|
468
|
+
const rule = config.access.variable_rules?.[name];
|
|
469
|
+
switch (operation) {
|
|
470
|
+
case 'read':
|
|
471
|
+
return clientRule?.allow_ai_read ?? rule?.allow_ai_read;
|
|
472
|
+
case 'write':
|
|
473
|
+
return clientRule?.allow_ai_write ?? rule?.allow_ai_write;
|
|
474
|
+
case 'delete':
|
|
475
|
+
return clientRule?.allow_ai_delete ?? rule?.allow_ai_delete;
|
|
476
|
+
case 'export':
|
|
477
|
+
return clientRule?.allow_ai_export ?? rule?.allow_ai_export;
|
|
478
|
+
case 'execute':
|
|
479
|
+
return clientRule?.allow_ai_execute ?? rule?.allow_ai_execute;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
export function getDefaultAccessFlag(config, operation, clientId = '') {
|
|
483
|
+
const clientRule = getClientRule(config, clientId);
|
|
484
|
+
switch (operation) {
|
|
485
|
+
case 'read':
|
|
486
|
+
return clientRule?.allow_ai_read ?? config.access.allow_ai_read;
|
|
487
|
+
case 'write':
|
|
488
|
+
return clientRule?.allow_ai_write ?? config.access.allow_ai_write;
|
|
489
|
+
case 'delete':
|
|
490
|
+
return clientRule?.allow_ai_delete ?? config.access.allow_ai_delete;
|
|
491
|
+
case 'export':
|
|
492
|
+
return clientRule?.allow_ai_export ?? config.access.allow_ai_export;
|
|
493
|
+
case 'execute':
|
|
494
|
+
return clientRule?.allow_ai_execute ?? config.access.allow_ai_execute;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
export function resolveAccessRuleFlag(name, config, operation, clientId = '') {
|
|
498
|
+
return getVariableRuleFlag(name, config, operation, clientId) ?? getDefaultAccessFlag(config, operation, clientId);
|
|
499
|
+
}
|
|
500
|
+
export function canAccessVariable(name, config, operation, clientId = '') {
|
|
501
|
+
if (isBlacklisted(name, config)) {
|
|
502
|
+
return false;
|
|
503
|
+
}
|
|
504
|
+
if (!isVariableRuleActive(name, config, new Date(), clientId)) {
|
|
505
|
+
return false;
|
|
506
|
+
}
|
|
507
|
+
const ruleFlag = getVariableRuleFlag(name, config, operation, clientId);
|
|
508
|
+
if (ruleFlag === false) {
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
if (ruleFlag === true) {
|
|
512
|
+
return true;
|
|
513
|
+
}
|
|
514
|
+
return getDefaultAccessFlag(config, operation, clientId) && canAccess(name, config);
|
|
515
|
+
}
|
|
516
|
+
export function requiresConfirmationForVariable(name, config, clientId = '') {
|
|
517
|
+
const clientRule = getClientVariableRule(name, config, clientId);
|
|
518
|
+
const clientDefaults = getClientRule(config, clientId);
|
|
519
|
+
return clientRule?.require_confirmation
|
|
520
|
+
?? config.access.variable_rules?.[name]?.require_confirmation
|
|
521
|
+
?? clientDefaults?.require_confirmation
|
|
522
|
+
?? config.access.require_confirmation === true;
|
|
523
|
+
}
|
|
442
524
|
/**
|
|
443
525
|
* Returns true if the variable `name` matches any `blacklist_patterns` entry.
|
|
444
526
|
* Blacklisted variables are always denied regardless of other access rules.
|
|
@@ -449,8 +531,8 @@ export function isBlacklisted(name, config) {
|
|
|
449
531
|
}
|
|
450
532
|
return false;
|
|
451
533
|
}
|
|
452
|
-
export function canAIActiveCheck(config) {
|
|
453
|
-
return config.access.allow_ai_active_check === true;
|
|
534
|
+
export function canAIActiveCheck(config, clientId = '') {
|
|
535
|
+
return getClientRule(config, clientId)?.allow_ai_active_check ?? config.access.allow_ai_active_check === true;
|
|
454
536
|
}
|
|
455
537
|
export function requiresUserReference(config) {
|
|
456
538
|
return config.access.require_user_reference === true;
|
|
@@ -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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"}
|
package/dist/server/unified.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare class UnifiedServer {
|
|
|
11
11
|
private mcpServer;
|
|
12
12
|
private httpServer;
|
|
13
13
|
private rateLimiter;
|
|
14
|
+
private apiKeyLockoutManager?;
|
|
14
15
|
private logs;
|
|
15
16
|
private shutdownHandlers;
|
|
16
17
|
constructor(config: EnvCPConfig, serverConfig: ServerConfig, projectPath: string, password?: string);
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAG7B,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,oBAAoB,CAAC,CAAiB;IAC9C,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;YAqPd,iBAAiB;YA0FjB,mBAAmB;YAiEnB,mBAAmB;IAsEjC,IAAI,IAAI,IAAI;CAuBb"}
|
package/dist/server/unified.js
CHANGED
|
@@ -6,7 +6,9 @@ import { EnvCPServer } from '../mcp/server.js';
|
|
|
6
6
|
import { resolveVaultPath, resolveSessionPath } from '../vault/index.js';
|
|
7
7
|
import { setCorsHeaders, sendJson, parseBody, validateApiKey, RateLimiter, rateLimitMiddleware } from '../utils/http.js';
|
|
8
8
|
import { LogManager, resolveLogPath } from '../storage/index.js';
|
|
9
|
+
import { LockoutManager } from '../utils/lockout.js';
|
|
9
10
|
import * as http from 'http';
|
|
11
|
+
import * as path from 'node:path';
|
|
10
12
|
export class UnifiedServer {
|
|
11
13
|
config;
|
|
12
14
|
serverConfig;
|
|
@@ -18,6 +20,7 @@ export class UnifiedServer {
|
|
|
18
20
|
mcpServer = null;
|
|
19
21
|
httpServer = null;
|
|
20
22
|
rateLimiter = new RateLimiter(60, 60000);
|
|
23
|
+
apiKeyLockoutManager;
|
|
21
24
|
logs = null;
|
|
22
25
|
shutdownHandlers = null;
|
|
23
26
|
constructor(config, serverConfig, projectPath, password) {
|
|
@@ -136,6 +139,8 @@ export class UnifiedServer {
|
|
|
136
139
|
this.rateLimiter = new RateLimiter(rl?.requests_per_minute ?? 60, 60000);
|
|
137
140
|
}
|
|
138
141
|
const whitelist = rl?.whitelist ?? [];
|
|
142
|
+
const sessionDir = path.dirname(sessionPath);
|
|
143
|
+
this.apiKeyLockoutManager = api_key ? new LockoutManager(path.join(sessionDir, '.lockout-api')) : undefined;
|
|
139
144
|
this.httpServer = http.createServer(async (req, res) => {
|
|
140
145
|
setCorsHeaders(res, undefined, req.headers.origin);
|
|
141
146
|
if (req.method === 'OPTIONS') {
|
|
@@ -148,10 +153,52 @@ export class UnifiedServer {
|
|
|
148
153
|
}
|
|
149
154
|
// API key validation
|
|
150
155
|
if (api_key) {
|
|
156
|
+
if (this.apiKeyLockoutManager) {
|
|
157
|
+
const lockoutStatus = await this.apiKeyLockoutManager.check();
|
|
158
|
+
if (lockoutStatus.locked) {
|
|
159
|
+
if (lockoutStatus.permanent_locked) {
|
|
160
|
+
/* c8 ignore next -- remoteAddress is always defined in TCP connections */
|
|
161
|
+
await this.logs?.log({ timestamp: new Date().toISOString(), operation: 'auth_failure', variable: '', source: 'api', success: false, message: `Unified API authentication blocked - permanent lockout from ${req.socket.remoteAddress ?? 'unknown'}` });
|
|
162
|
+
sendJson(res, 403, { error: 'Authentication permanently locked - recovery required' });
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
/* c8 ignore next -- remoteAddress is always defined in TCP connections */
|
|
166
|
+
await this.logs?.log({ timestamp: new Date().toISOString(), operation: 'auth_failure', variable: '', source: 'api', success: false, message: `Unified API authentication blocked - lockout for ${lockoutStatus.remaining_seconds}s from ${req.socket.remoteAddress ?? 'unknown'}` });
|
|
167
|
+
res.setHeader('Retry-After', lockoutStatus.remaining_seconds.toString());
|
|
168
|
+
sendJson(res, 429, { error: `Too many failed attempts - try again in ${lockoutStatus.remaining_seconds} seconds` });
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const ip = req.socket.remoteAddress || 'unknown';
|
|
172
|
+
const userAgent = req.headers['user-agent'] || 'unknown';
|
|
173
|
+
this.apiKeyLockoutManager.setNotificationSource('api', ip, userAgent);
|
|
174
|
+
}
|
|
151
175
|
const providedKey = (req.headers['x-api-key'] ||
|
|
152
176
|
req.headers['x-goog-api-key'] ||
|
|
153
177
|
req.headers['authorization']?.replace(/^Bearer\s+/i, ''));
|
|
154
178
|
if (!validateApiKey(providedKey, api_key)) {
|
|
179
|
+
if (this.apiKeyLockoutManager) {
|
|
180
|
+
const bfpConfig = this.config.security?.brute_force_protection;
|
|
181
|
+
/* c8 ignore next 5 -- Zod always provides BFP fields; fallback ?? branches unreachable */
|
|
182
|
+
const lockoutThreshold = bfpConfig?.max_attempts ?? this.config.session?.lockout_threshold ?? 5;
|
|
183
|
+
const lockoutBaseSeconds = bfpConfig?.lockout_duration ?? this.config.session?.lockout_base_seconds ?? 60;
|
|
184
|
+
const progressiveDelay = bfpConfig?.progressive_delay ?? true;
|
|
185
|
+
const maxDelay = bfpConfig?.max_delay ?? 60;
|
|
186
|
+
const permanentThreshold = bfpConfig?.permanent_lockout_threshold ?? 0;
|
|
187
|
+
const status = await this.apiKeyLockoutManager.recordFailure(lockoutThreshold, lockoutBaseSeconds, progressiveDelay, maxDelay, permanentThreshold);
|
|
188
|
+
if (status.locked) {
|
|
189
|
+
const message = status.permanent_locked
|
|
190
|
+
? 'Authentication permanently locked - recovery required'
|
|
191
|
+
: `Too many failed attempts - try again in ${status.remaining_seconds} seconds`;
|
|
192
|
+
const statusCode = status.permanent_locked ? 403 : 429;
|
|
193
|
+
if (!status.permanent_locked) {
|
|
194
|
+
res.setHeader('Retry-After', status.remaining_seconds.toString());
|
|
195
|
+
}
|
|
196
|
+
/* c8 ignore next -- remoteAddress is always defined in TCP connections */
|
|
197
|
+
await this.logs?.log({ timestamp: new Date().toISOString(), operation: 'auth_failure', variable: '', source: 'api', success: false, message: `Invalid API key - ${status.permanent_locked ? 'permanent lockout' : `lockout for ${status.remaining_seconds}s`} from ${req.socket.remoteAddress ?? 'unknown'}` });
|
|
198
|
+
sendJson(res, statusCode, { error: message });
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
155
202
|
/* c8 ignore next -- logs is always initialized in start(); the undefined branch is unreachable in practice */
|
|
156
203
|
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'}` });
|
|
157
204
|
sendJson(res, 401, { error: 'Invalid API key' });
|
|
@@ -343,7 +390,7 @@ export class UnifiedServer {
|
|
|
343
390
|
return;
|
|
344
391
|
}
|
|
345
392
|
if (pathname === '/v1/functions' && req.method === 'GET') {
|
|
346
|
-
sendJson(res, 200,
|
|
393
|
+
sendJson(res, 200, this.openaiAdapter.createFunctionsListResponse());
|
|
347
394
|
return;
|
|
348
395
|
}
|
|
349
396
|
if (pathname === '/v1/functions/call' && req.method === 'POST') {
|
|
@@ -366,22 +413,10 @@ export class UnifiedServer {
|
|
|
366
413
|
const lastMessage = messages?.[messages.length - 1];
|
|
367
414
|
if (lastMessage?.tool_calls) {
|
|
368
415
|
const results = await this.openaiAdapter.processToolCalls(lastMessage.tool_calls);
|
|
369
|
-
sendJson(res, 200,
|
|
370
|
-
id: `chatcmpl-${Date.now()}`,
|
|
371
|
-
object: 'chat.completion',
|
|
372
|
-
model: 'envcp-1.0',
|
|
373
|
-
choices: [{ index: 0, message: { role: 'assistant', content: null }, finish_reason: 'tool_calls' }],
|
|
374
|
-
tool_results: results,
|
|
375
|
-
});
|
|
416
|
+
sendJson(res, 200, this.openaiAdapter.createToolResultsCompletion(results));
|
|
376
417
|
return;
|
|
377
418
|
}
|
|
378
|
-
sendJson(res, 200,
|
|
379
|
-
id: `chatcmpl-${Date.now()}`,
|
|
380
|
-
object: 'chat.completion',
|
|
381
|
-
model: 'envcp-1.0',
|
|
382
|
-
choices: [{ index: 0, message: { role: 'assistant', content: 'EnvCP tools available.' }, finish_reason: 'stop' }],
|
|
383
|
-
available_tools: this.openaiAdapter.getOpenAIFunctions().map(f => ({ type: 'function', function: f })),
|
|
384
|
-
});
|
|
419
|
+
sendJson(res, 200, this.openaiAdapter.createAvailableToolsCompletion());
|
|
385
420
|
return;
|
|
386
421
|
}
|
|
387
422
|
sendJson(res, 404, { error: { message: 'Not found', type: 'not_found' } });
|
|
@@ -403,7 +438,7 @@ export class UnifiedServer {
|
|
|
403
438
|
const body = req.method === 'POST' ? await parseBody(req) : {};
|
|
404
439
|
try {
|
|
405
440
|
if (pathname === '/v1/tools' && req.method === 'GET') {
|
|
406
|
-
sendJson(res, 200,
|
|
441
|
+
sendJson(res, 200, this.geminiAdapter.createToolsListResponse());
|
|
407
442
|
return;
|
|
408
443
|
}
|
|
409
444
|
if (pathname === '/v1/functions/call' && req.method === 'POST') {
|
|
@@ -438,21 +473,10 @@ export class UnifiedServer {
|
|
|
438
473
|
}
|
|
439
474
|
if (functionCalls.length > 0) {
|
|
440
475
|
const results = await this.geminiAdapter.processFunctionCalls(functionCalls);
|
|
441
|
-
sendJson(res, 200,
|
|
442
|
-
candidates: [{
|
|
443
|
-
content: { parts: results.map(r => ({ functionResponse: r })), role: 'model' },
|
|
444
|
-
finishReason: 'STOP',
|
|
445
|
-
}],
|
|
446
|
-
});
|
|
476
|
+
sendJson(res, 200, this.geminiAdapter.createGenerateContentResponse(results));
|
|
447
477
|
return;
|
|
448
478
|
}
|
|
449
|
-
sendJson(res, 200,
|
|
450
|
-
candidates: [{
|
|
451
|
-
content: { parts: [{ text: 'EnvCP tools available.' }], role: 'model' },
|
|
452
|
-
finishReason: 'STOP',
|
|
453
|
-
}],
|
|
454
|
-
availableTools: [{ functionDeclarations: this.geminiAdapter.getGeminiFunctionDeclarations() }],
|
|
455
|
-
});
|
|
479
|
+
sendJson(res, 200, this.geminiAdapter.createAvailableToolsResponse());
|
|
456
480
|
return;
|
|
457
481
|
}
|
|
458
482
|
sendJson(res, 404, { error: { code: 404, message: 'Not found', status: 'NOT_FOUND' } });
|