@winstonsayno/mcp-gateway 3.8.0 → 4.0.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/CHANGELOG.md +41 -0
- package/README.md +28 -6
- package/dist/bench/index.d.ts +50 -0
- package/dist/bench/index.d.ts.map +1 -0
- package/dist/bench/index.js +162 -0
- package/dist/bench/index.js.map +1 -0
- package/dist/cli.js +77 -2
- package/dist/cli.js.map +1 -1
- package/dist/config/loader.d.ts +4 -4
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +12 -7
- package/dist/config/loader.js.map +1 -1
- package/dist/config/migrate.d.ts +30 -0
- package/dist/config/migrate.d.ts.map +1 -0
- package/dist/config/migrate.js +90 -0
- package/dist/config/migrate.js.map +1 -0
- package/dist/gateway/admin.d.ts +1 -1
- package/dist/gateway/admin.d.ts.map +1 -1
- package/dist/gateway/admin.js +14 -2
- package/dist/gateway/admin.js.map +1 -1
- package/dist/gateway/api.js +1 -1
- package/dist/gateway/api.js.map +1 -1
- package/dist/gateway/balancer.d.ts.map +1 -1
- package/dist/gateway/balancer.js +0 -3
- package/dist/gateway/balancer.js.map +1 -1
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +8 -1
- package/dist/gateway/index.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/index.d.ts +50 -5
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +72 -19
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/wasm.d.ts +1 -1
- package/dist/plugins/wasm.js +1 -1
- package/dist/utils/deprecations.d.ts +21 -12
- package/dist/utils/deprecations.d.ts.map +1 -1
- package/dist/utils/deprecations.js +55 -9
- package/dist/utils/deprecations.js.map +1 -1
- package/dist/utils/types.d.ts +4 -2
- package/dist/utils/types.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,47 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [4.0.0] - 2026-10-08
|
|
13
|
+
|
|
14
|
+
### ⚠ Breaking
|
|
15
|
+
- **Config schema v4 is required.** `version: 3`, `servers` / `tools` / `rateLimit` directly on an API key, and
|
|
16
|
+
`loadBalancing.strategy: least-latency` are validation errors naming the replacement — run `mcp-gateway migrate`
|
|
17
|
+
(available since 3.9). `version` may be `4` or omitted.
|
|
18
|
+
- **Plugin API v1 is refused** (plugins without `apiVersion`). Declare `apiVersion: 3`.
|
|
19
|
+
- `least-latency` removed from the balancer and the `LoadBalancingConfig` type (use `smart` with a latency-only score).
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
- **Plugin API v3**: `ctx.secrets.get(name)` for secrets granted in the plugin's new `secrets:` config
|
|
23
|
+
(`secret://` references, resolved by the secret providers), `ctx.tenant` (`{ id, name, role }`) on call hooks, and
|
|
24
|
+
the `onConfigChange(change, ctx)` hook after every applied hot reload. `grantSecrets()` for plugins passed in code.
|
|
25
|
+
- The admin config API, `diff` / `apply` and the generated default config use schema v4 (nested `scope`).
|
|
26
|
+
- Final [Migrating to 4.0](docs/guides/migrating-to-v4.md) guide; new [docs/ROADMAP.md](docs/ROADMAP.md) (v4.1 → v5.0).
|
|
27
|
+
|
|
28
|
+
### Deprecated (removed in 5.0)
|
|
29
|
+
- Plugin API v2 (`apiVersion: 2`) — loads with a warning; declare `apiVersion: 3`.
|
|
30
|
+
|
|
31
|
+
The REST / `/mcp` APIs and the JS / Kotlin clients are unchanged.
|
|
32
|
+
|
|
33
|
+
## [3.9.0] - 2026-10-08
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
- **`mcp-gateway migrate`** rewrites a config file to schema v4 — `version: 4`, API-key scope nested under `scope:`,
|
|
37
|
+
`least-latency` → `smart` with a latency-only score — keeping YAML comments and layout. `--write` (keeps a `.bak`),
|
|
38
|
+
`-o <file>`, `--check` (exit 3 when a migration is needed, for CI).
|
|
39
|
+
- **v4 preview:** 3.9 already reads `version: 4` and `auth.apiKeys[].scope`, so a migrated file runs on 3.9 before
|
|
40
|
+
the 4.0 upgrade.
|
|
41
|
+
- **`mcp-gateway bench`**: in-process benchmark (REST, REST with auth, cache hit, `/mcp`) with req/s and p50 / p95 / p99;
|
|
42
|
+
`runBenchmark()` exported. Reference numbers in [docs/benchmarks.md](docs/benchmarks.md).
|
|
43
|
+
- [Migrating to 4.0](docs/guides/migrating-to-v4.md) (preview). The GitHub Pages demo lists the new deprecations.
|
|
44
|
+
|
|
45
|
+
### Deprecated (removed in 4.0)
|
|
46
|
+
- `version: 3` → `version: 4`.
|
|
47
|
+
- `servers` / `tools` / `rateLimit` directly on an API key → `scope: { servers, tools, rateLimit }`.
|
|
48
|
+
- `loadBalancing.strategy: least-latency` → `smart` with `score: { latency: 1, errorRate: 0, cost: 0 }`.
|
|
49
|
+
- (Already scheduled) plugin API v1.
|
|
50
|
+
|
|
51
|
+
`mcp-gateway validate` and `GET /api/v1/admin/deprecations` list each with the affected keys / servers.
|
|
52
|
+
|
|
12
53
|
## [3.8.0] - 2026-10-08
|
|
13
54
|
|
|
14
55
|
### Added
|
package/README.md
CHANGED
|
@@ -298,10 +298,11 @@ auth:
|
|
|
298
298
|
- "sha256:…" # a key stored as its digest (mcp-gateway gen-key / hash-key)
|
|
299
299
|
- key: "${APP_KEY}" # scoped key (see "Per-key scopes")
|
|
300
300
|
name: app
|
|
301
|
-
servers: ["github"]
|
|
302
|
-
tools: ["read_*"]
|
|
303
|
-
rateLimit: { limit: 30, windowSeconds: 60 }
|
|
304
301
|
expiresAt: "2027-01-01" # optional expiry; disabled: true switches a key off
|
|
302
|
+
scope:
|
|
303
|
+
servers: ["github"]
|
|
304
|
+
tools: ["read_*"]
|
|
305
|
+
rateLimit: { limit: 30, windowSeconds: 60 }
|
|
305
306
|
protect:
|
|
306
307
|
health: false # true → /api/v1/health requires auth
|
|
307
308
|
metrics: false # true → /api/v1/metrics requires auth (configure your scraper)
|
|
@@ -418,9 +419,10 @@ auth:
|
|
|
418
419
|
- "admin-key" # unrestricted
|
|
419
420
|
- key: ${AURA_GATEWAY_KEY} # ${VAR} is expanded in object keys
|
|
420
421
|
name: aura # client id "key:aura" in logs, metrics and sessions (unique)
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
422
|
+
scope:
|
|
423
|
+
servers: ["github", "fs-*"] # server id globs
|
|
424
|
+
tools: ["read_*", "github/create_issue"] # tool globs; "server/tool" when the pattern has a "/"
|
|
425
|
+
rateLimit: { limit: 30, windowSeconds: 60 } # own bucket instead of the global rateLimit
|
|
424
426
|
```
|
|
425
427
|
|
|
426
428
|
- A tool must pass the server's own `tools` filter **and** the key's `servers` **and** `tools` lists.
|
|
@@ -581,6 +583,26 @@ await gateway.start();
|
|
|
581
583
|
process.on('SIGTERM', () => gateway.stop());
|
|
582
584
|
```
|
|
583
585
|
|
|
586
|
+
## What's New in v4.0
|
|
587
|
+
|
|
588
|
+
| Feature | Description |
|
|
589
|
+
|---------|-------------|
|
|
590
|
+
| **Config schema v4** | `version: 4`, API-key `scope:`, `smart` instead of `least-latency` — `mcp-gateway migrate` does it for you |
|
|
591
|
+
| **Plugin API v3** | `ctx.secrets`, `ctx.tenant`, `onConfigChange`; v1 refused, v2 deprecated until 5.0 |
|
|
592
|
+
| **Roadmap to 5.0** | MCP spec updates, orchestration, cost budgets, streaming, mTLS, config editor, SDKs — see [ROADMAP](docs/ROADMAP.md) |
|
|
593
|
+
|
|
594
|
+
⚠ Breaking release — read [Migrating to 4.0](docs/guides/migrating-to-v4.md).
|
|
595
|
+
|
|
596
|
+
## What's New in v3.9
|
|
597
|
+
|
|
598
|
+
| Feature | Description |
|
|
599
|
+
|---------|-------------|
|
|
600
|
+
| **`mcp-gateway migrate`** | Rewrites your config to schema v4, comments kept; `--check` for CI |
|
|
601
|
+
| **v4 deprecation warnings** | `version: 3`, flat API-key scope, `least-latency` — removed in 4.0 |
|
|
602
|
+
| **`mcp-gateway bench`** | Built-in load test with latency percentiles; see [benchmarks](docs/benchmarks.md) |
|
|
603
|
+
|
|
604
|
+
Details: [CHANGELOG](CHANGELOG.md) · [Migrating to 4.0](docs/guides/migrating-to-v4.md).
|
|
605
|
+
|
|
584
606
|
## What's New in v3.8
|
|
585
607
|
|
|
586
608
|
| Feature | Description |
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in benchmark (3.9): `mcp-gateway bench`.
|
|
3
|
+
*
|
|
4
|
+
* Starts an in-process gateway on 127.0.0.1 with a minimal stdio echo MCP server (written to a temp file, run with the
|
|
5
|
+
* current Node binary) and drives it with N concurrent keep-alive clients for a fixed time per scenario:
|
|
6
|
+
*
|
|
7
|
+
* - `rest`: `POST /api/v1/tools/call` (auth off) — the full pipeline (scopes, policy, quotas, audit in memory);
|
|
8
|
+
* - `rest-auth`: the same with an API key and a rate-limit-free key;
|
|
9
|
+
* - `cache`: a cached tool (`cache.rules`) — the gateway's own overhead without the upstream round trip;
|
|
10
|
+
* - `mcp`: JSON-RPC `tools/call` on the streamable-HTTP `/mcp` endpoint (one session per client).
|
|
11
|
+
*
|
|
12
|
+
* Reports requests/s, mean and p50 / p95 / p99 latency, and errors. Numbers depend on the machine; compare runs on
|
|
13
|
+
* the same host.
|
|
14
|
+
*
|
|
15
|
+
* @module bench
|
|
16
|
+
*/
|
|
17
|
+
export type BenchScenario = 'rest' | 'rest-auth' | 'cache' | 'mcp';
|
|
18
|
+
export declare const BENCH_SCENARIOS: BenchScenario[];
|
|
19
|
+
export interface BenchOptions {
|
|
20
|
+
durationMs?: number;
|
|
21
|
+
concurrency?: number;
|
|
22
|
+
scenarios?: BenchScenario[];
|
|
23
|
+
/** Warm-up per scenario (not measured). */
|
|
24
|
+
warmupMs?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface BenchResult {
|
|
27
|
+
scenario: BenchScenario;
|
|
28
|
+
requests: number;
|
|
29
|
+
errors: number;
|
|
30
|
+
rps: number;
|
|
31
|
+
meanMs: number;
|
|
32
|
+
p50Ms: number;
|
|
33
|
+
p95Ms: number;
|
|
34
|
+
p99Ms: number;
|
|
35
|
+
maxMs: number;
|
|
36
|
+
}
|
|
37
|
+
export interface BenchReport {
|
|
38
|
+
node: string;
|
|
39
|
+
platform: string;
|
|
40
|
+
cpus: number;
|
|
41
|
+
concurrency: number;
|
|
42
|
+
durationMs: number;
|
|
43
|
+
results: BenchResult[];
|
|
44
|
+
}
|
|
45
|
+
export declare function percentile(sorted: number[], p: number): number;
|
|
46
|
+
export declare function summarize(scenario: BenchScenario, latencies: number[], errors: number, elapsedMs: number): BenchResult;
|
|
47
|
+
export declare function runBenchmark(opts?: BenchOptions): Promise<BenchReport>;
|
|
48
|
+
/** Markdown table of a report. */
|
|
49
|
+
export declare function benchMarkdown(r: BenchReport): string;
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bench/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,KAAK,CAAC;AACnE,eAAO,MAAM,eAAe,EAAE,aAAa,EAA0C,CAAC;AAEtF,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAeD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9D;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CActH;AAyBD,wBAAsB,YAAY,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAwEhF;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAIpD"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in benchmark (3.9): `mcp-gateway bench`.
|
|
3
|
+
*
|
|
4
|
+
* Starts an in-process gateway on 127.0.0.1 with a minimal stdio echo MCP server (written to a temp file, run with the
|
|
5
|
+
* current Node binary) and drives it with N concurrent keep-alive clients for a fixed time per scenario:
|
|
6
|
+
*
|
|
7
|
+
* - `rest`: `POST /api/v1/tools/call` (auth off) — the full pipeline (scopes, policy, quotas, audit in memory);
|
|
8
|
+
* - `rest-auth`: the same with an API key and a rate-limit-free key;
|
|
9
|
+
* - `cache`: a cached tool (`cache.rules`) — the gateway's own overhead without the upstream round trip;
|
|
10
|
+
* - `mcp`: JSON-RPC `tools/call` on the streamable-HTTP `/mcp` endpoint (one session per client).
|
|
11
|
+
*
|
|
12
|
+
* Reports requests/s, mean and p50 / p95 / p99 latency, and errors. Numbers depend on the machine; compare runs on
|
|
13
|
+
* the same host.
|
|
14
|
+
*
|
|
15
|
+
* @module bench
|
|
16
|
+
*/
|
|
17
|
+
import { mkdtempSync, writeFileSync, rmSync } from 'fs';
|
|
18
|
+
import { tmpdir } from 'os';
|
|
19
|
+
import { join } from 'path';
|
|
20
|
+
import { Gateway } from '../gateway/index.js';
|
|
21
|
+
export const BENCH_SCENARIOS = ['rest', 'rest-auth', 'cache', 'mcp'];
|
|
22
|
+
const ECHO_SERVER = `
|
|
23
|
+
const rl = require('readline').createInterface({ input: process.stdin });
|
|
24
|
+
const send = (m) => process.stdout.write(JSON.stringify(m) + '\\n');
|
|
25
|
+
rl.on('line', (line) => {
|
|
26
|
+
let msg; try { msg = JSON.parse(line); } catch { return; }
|
|
27
|
+
if (msg.method === 'initialize') return send({ jsonrpc: '2.0', id: msg.id, result: { protocolVersion: '2025-06-18', capabilities: { tools: {} }, serverInfo: { name: 'bench-echo', version: '1' } } });
|
|
28
|
+
if (msg.method === 'tools/list') return send({ jsonrpc: '2.0', id: msg.id, result: { tools: [{ name: 'echo', description: 'Echo', inputSchema: { type: 'object' } }, { name: 'cached', description: 'Cached echo', inputSchema: { type: 'object' } }] } });
|
|
29
|
+
if (msg.method === 'tools/call') return send({ jsonrpc: '2.0', id: msg.id, result: { content: [{ type: 'text', text: JSON.stringify(msg.params.arguments || {}) }] } });
|
|
30
|
+
if (msg.method === 'ping') return send({ jsonrpc: '2.0', id: msg.id, result: {} });
|
|
31
|
+
if (msg.id !== undefined && msg.method) send({ jsonrpc: '2.0', id: msg.id, error: { code: -32601, message: 'unknown' } });
|
|
32
|
+
});
|
|
33
|
+
`;
|
|
34
|
+
export function percentile(sorted, p) {
|
|
35
|
+
if (!sorted.length)
|
|
36
|
+
return 0;
|
|
37
|
+
const i = Math.min(sorted.length - 1, Math.max(0, Math.ceil(p * sorted.length) - 1));
|
|
38
|
+
return sorted[i];
|
|
39
|
+
}
|
|
40
|
+
export function summarize(scenario, latencies, errors, elapsedMs) {
|
|
41
|
+
const s = [...latencies].sort((a, b) => a - b);
|
|
42
|
+
const r2 = (n) => Math.round(n * 100) / 100;
|
|
43
|
+
return {
|
|
44
|
+
scenario,
|
|
45
|
+
requests: s.length,
|
|
46
|
+
errors,
|
|
47
|
+
rps: Math.round((s.length / Math.max(1, elapsedMs)) * 1000),
|
|
48
|
+
meanMs: r2(s.reduce((a, b) => a + b, 0) / Math.max(1, s.length)),
|
|
49
|
+
p50Ms: r2(percentile(s, 0.5)),
|
|
50
|
+
p95Ms: r2(percentile(s, 0.95)),
|
|
51
|
+
p99Ms: r2(percentile(s, 0.99)),
|
|
52
|
+
maxMs: r2(s[s.length - 1] ?? 0),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
async function drive(durationMs, concurrency, once) {
|
|
56
|
+
const latencies = [];
|
|
57
|
+
let errors = 0;
|
|
58
|
+
const t0 = performance.now();
|
|
59
|
+
const end = t0 + durationMs;
|
|
60
|
+
await Promise.all(Array.from({ length: concurrency }, async (_, w) => {
|
|
61
|
+
while (performance.now() < end) {
|
|
62
|
+
const s = performance.now();
|
|
63
|
+
let ok = false;
|
|
64
|
+
try {
|
|
65
|
+
ok = await once(w);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
ok = false;
|
|
69
|
+
}
|
|
70
|
+
if (ok)
|
|
71
|
+
latencies.push(performance.now() - s);
|
|
72
|
+
else
|
|
73
|
+
errors++;
|
|
74
|
+
}
|
|
75
|
+
}));
|
|
76
|
+
return { latencies, errors, elapsed: performance.now() - t0 };
|
|
77
|
+
}
|
|
78
|
+
export async function runBenchmark(opts = {}) {
|
|
79
|
+
const durationMs = opts.durationMs ?? 10_000;
|
|
80
|
+
const concurrency = opts.concurrency ?? 32;
|
|
81
|
+
const warmupMs = opts.warmupMs ?? Math.min(1000, durationMs / 5);
|
|
82
|
+
const scenarios = opts.scenarios ?? BENCH_SCENARIOS;
|
|
83
|
+
const dir = mkdtempSync(join(tmpdir(), 'mgw-bench-'));
|
|
84
|
+
const script = join(dir, 'echo.cjs');
|
|
85
|
+
writeFileSync(script, ECHO_SERVER);
|
|
86
|
+
const KEY = 'bench-key-0123456789abcdef';
|
|
87
|
+
const config = {
|
|
88
|
+
port: 0,
|
|
89
|
+
host: '127.0.0.1',
|
|
90
|
+
logLevel: 'error',
|
|
91
|
+
monitor: { requestLog: false },
|
|
92
|
+
servers: [{ id: 'echo', name: 'echo', transport: 'stdio', command: process.execPath, args: [script], maxConcurrency: Math.max(64, concurrency * 2) }],
|
|
93
|
+
cache: { enabled: true, rules: [{ tools: ['cached'], ttlSeconds: 3600, scope: 'shared' }] },
|
|
94
|
+
};
|
|
95
|
+
const results = [];
|
|
96
|
+
const gw = new Gateway(config);
|
|
97
|
+
const gwAuth = new Gateway({ ...config, auth: { strategy: 'api-key', apiKeys: [{ name: 'bench', key: KEY }] } });
|
|
98
|
+
try {
|
|
99
|
+
await gw.start();
|
|
100
|
+
if (scenarios.includes('rest-auth'))
|
|
101
|
+
await gwAuth.start();
|
|
102
|
+
const base = `http://127.0.0.1:${gw.address().port}`;
|
|
103
|
+
const baseAuth = scenarios.includes('rest-auth') ? `http://127.0.0.1:${gwAuth.address().port}` : '';
|
|
104
|
+
const call = (url, tool, headers = {}) => async () => {
|
|
105
|
+
const r = await fetch(`${url}/api/v1/tools/call`, { method: 'POST', headers: { 'content-type': 'application/json', ...headers }, body: JSON.stringify({ server: 'echo', tool, arguments: { n: 1 } }) });
|
|
106
|
+
await r.arrayBuffer();
|
|
107
|
+
return r.ok;
|
|
108
|
+
};
|
|
109
|
+
for (const sc of scenarios) {
|
|
110
|
+
let once;
|
|
111
|
+
if (sc === 'rest')
|
|
112
|
+
once = call(base, 'echo');
|
|
113
|
+
else if (sc === 'rest-auth')
|
|
114
|
+
once = call(baseAuth, 'echo', { authorization: `Bearer ${KEY}` });
|
|
115
|
+
else if (sc === 'cache')
|
|
116
|
+
once = call(base, 'cached');
|
|
117
|
+
else {
|
|
118
|
+
// One MCP session per worker.
|
|
119
|
+
const sessions = [];
|
|
120
|
+
for (let w = 0; w < concurrency; w++) {
|
|
121
|
+
const r = await fetch(`${base}/mcp`, {
|
|
122
|
+
method: 'POST',
|
|
123
|
+
headers: { 'content-type': 'application/json', accept: 'application/json, text/event-stream' },
|
|
124
|
+
body: JSON.stringify({ jsonrpc: '2.0', id: 0, method: 'initialize', params: { protocolVersion: '2025-06-18', capabilities: {}, clientInfo: { name: 'bench', version: '1' } } }),
|
|
125
|
+
});
|
|
126
|
+
await r.arrayBuffer();
|
|
127
|
+
const sid = r.headers.get('mcp-session-id') ?? '';
|
|
128
|
+
sessions.push(sid);
|
|
129
|
+
await fetch(`${base}/mcp`, { method: 'POST', headers: { 'content-type': 'application/json', accept: 'application/json, text/event-stream', ...(sid ? { 'mcp-session-id': sid } : {}) }, body: JSON.stringify({ jsonrpc: '2.0', method: 'notifications/initialized' }) }).then((x) => x.arrayBuffer());
|
|
130
|
+
}
|
|
131
|
+
let id = 1;
|
|
132
|
+
once = async (w) => {
|
|
133
|
+
const sid = sessions[w];
|
|
134
|
+
const r = await fetch(`${base}/mcp`, {
|
|
135
|
+
method: 'POST',
|
|
136
|
+
headers: { 'content-type': 'application/json', accept: 'application/json, text/event-stream', ...(sid ? { 'mcp-session-id': sid } : {}) },
|
|
137
|
+
body: JSON.stringify({ jsonrpc: '2.0', id: id++, method: 'tools/call', params: { name: 'echo', arguments: { n: 1 } } }),
|
|
138
|
+
});
|
|
139
|
+
const text = await r.text();
|
|
140
|
+
return r.ok && text.includes('"result"');
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
await drive(warmupMs, concurrency, once);
|
|
144
|
+
const { latencies, errors, elapsed } = await drive(durationMs, concurrency, once);
|
|
145
|
+
results.push(summarize(sc, latencies, errors, elapsed));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
await gw.stop().catch(() => undefined);
|
|
150
|
+
await gwAuth.stop().catch(() => undefined);
|
|
151
|
+
rmSync(dir, { recursive: true, force: true });
|
|
152
|
+
}
|
|
153
|
+
const os = await import('os');
|
|
154
|
+
return { node: process.version, platform: `${process.platform}-${process.arch}`, cpus: os.cpus().length, concurrency, durationMs, results };
|
|
155
|
+
}
|
|
156
|
+
/** Markdown table of a report. */
|
|
157
|
+
export function benchMarkdown(r) {
|
|
158
|
+
const head = `Node ${r.node} · ${r.platform} · ${r.cpus} CPU · concurrency ${r.concurrency} · ${r.durationMs / 1000}s per scenario\n\n`;
|
|
159
|
+
const rows = r.results.map((x) => `| ${x.scenario} | ${x.rps} | ${x.meanMs} | ${x.p50Ms} | ${x.p95Ms} | ${x.p99Ms} | ${x.errors} |`);
|
|
160
|
+
return head + ['| Scenario | req/s | mean ms | p50 ms | p95 ms | p99 ms | errors |', '|---|---:|---:|---:|---:|---:|---:|', ...rows].join('\n') + '\n';
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bench/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -132,9 +132,9 @@ program
|
|
|
132
132
|
console.log(` Servers: ${config.servers.length}`);
|
|
133
133
|
console.log(` Auth: ${config.auth?.strategy ?? 'none'}`);
|
|
134
134
|
if (config.deprecations?.length) {
|
|
135
|
-
console.log('\nDeprecated
|
|
135
|
+
console.log('\nDeprecated:');
|
|
136
136
|
for (const d of config.deprecations)
|
|
137
|
-
console.log(` ! ${d.message}`);
|
|
137
|
+
console.log(` ! (removed in ${d.removedIn}) ${d.message}${d.detail ? ` — ${d.detail}` : ''}`);
|
|
138
138
|
}
|
|
139
139
|
const warnings = securityWarnings(config);
|
|
140
140
|
if (warnings.length > 0) {
|
|
@@ -297,6 +297,81 @@ program
|
|
|
297
297
|
console.log(`hash: ${hash}`);
|
|
298
298
|
console.log('\nGive the key to the client; put the hash in auth.apiKeys. The key is not shown again.');
|
|
299
299
|
});
|
|
300
|
+
// ─── migrate (3.9) ────────────────────────────────────────────────────────────
|
|
301
|
+
program
|
|
302
|
+
.command('migrate')
|
|
303
|
+
.description('Rewrite a config file to schema v4 (keeps comments); prints the changes')
|
|
304
|
+
.option('-c, --config <path>', 'Config file (default: the usual search paths)')
|
|
305
|
+
.option('--to <version>', 'Target schema version', '4')
|
|
306
|
+
.option('--write', 'Write the file in place (a .bak copy is kept)')
|
|
307
|
+
.option('-o, --output <path>', 'Write the migrated config to this file instead')
|
|
308
|
+
.option('--check', 'Exit with code 3 when the file needs migrating (CI)')
|
|
309
|
+
.action(async (options) => {
|
|
310
|
+
const { readFile } = await import('fs/promises');
|
|
311
|
+
const { migrateConfigText } = await import('./config/migrate.js');
|
|
312
|
+
const path = resolveConfigPath(options.config);
|
|
313
|
+
if (!path) {
|
|
314
|
+
logger.error('No config file found (use -c <path>)');
|
|
315
|
+
process.exit(1);
|
|
316
|
+
}
|
|
317
|
+
try {
|
|
318
|
+
const text = await readFile(path, 'utf8');
|
|
319
|
+
const r = migrateConfigText(text, /\.json$/i.test(path) ? 'json' : 'yaml', Number(options.to));
|
|
320
|
+
if (!r.changed) {
|
|
321
|
+
console.log(`✓ ${path} is already on schema v${options.to}`);
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
console.log(`${path}: ${r.changes.length} change(s)`);
|
|
325
|
+
for (const c of r.changes)
|
|
326
|
+
console.log(` ~ ${c}`);
|
|
327
|
+
}
|
|
328
|
+
for (const n of r.notes)
|
|
329
|
+
console.log(` ! ${n}`);
|
|
330
|
+
if (r.changed && options.check)
|
|
331
|
+
process.exit(3);
|
|
332
|
+
if (!r.changed)
|
|
333
|
+
return;
|
|
334
|
+
if (options.output) {
|
|
335
|
+
await writeFile(options.output, r.text);
|
|
336
|
+
console.log(`Written to ${options.output}`);
|
|
337
|
+
}
|
|
338
|
+
else if (options.write) {
|
|
339
|
+
await writeFile(`${path}.bak`, text);
|
|
340
|
+
await writeFile(path, r.text);
|
|
341
|
+
console.log(`Written (backup: ${path}.bak)`);
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
console.log('\n--- migrated config (use --write to save) ---\n');
|
|
345
|
+
process.stdout.write(r.text);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
catch (err) {
|
|
349
|
+
logger.error(`Migration failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
350
|
+
process.exit(1);
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
// ─── bench (3.9) ──────────────────────────────────────────────────────────────
|
|
354
|
+
program
|
|
355
|
+
.command('bench')
|
|
356
|
+
.description('Benchmark an in-process gateway with a local echo server (REST, auth, cache, /mcp)')
|
|
357
|
+
.option('-d, --duration <seconds>', 'Seconds per scenario', '10')
|
|
358
|
+
.option('--concurrency <n>', 'Concurrent clients', '32')
|
|
359
|
+
.option('-s, --scenario <list>', 'Comma-separated: rest,rest-auth,cache,mcp', 'rest,rest-auth,cache,mcp')
|
|
360
|
+
.option('--json', 'Print JSON')
|
|
361
|
+
.action(async (options) => {
|
|
362
|
+
const { runBenchmark, benchMarkdown, BENCH_SCENARIOS } = await import('./bench/index.js');
|
|
363
|
+
const scenarios = String(options.scenario).split(',').map((x) => x.trim()).filter(Boolean);
|
|
364
|
+
const bad = scenarios.filter((x) => !BENCH_SCENARIOS.includes(x));
|
|
365
|
+
const duration = Number(options.duration);
|
|
366
|
+
const concurrency = Number(options.concurrency);
|
|
367
|
+
if (bad.length || !(duration > 0) || !Number.isInteger(concurrency) || concurrency < 1) {
|
|
368
|
+
logger.error(`Invalid options${bad.length ? `: unknown scenario(s) ${bad.join(', ')}` : ''}`);
|
|
369
|
+
process.exit(1);
|
|
370
|
+
}
|
|
371
|
+
logger.setLevel('error');
|
|
372
|
+
const report = await runBenchmark({ durationMs: duration * 1000, concurrency, scenarios: scenarios });
|
|
373
|
+
console.log(options.json ? JSON.stringify(report, null, 2) : benchMarkdown(report));
|
|
374
|
+
});
|
|
300
375
|
program.parse(process.argv);
|
|
301
376
|
if (!process.argv.slice(2).length) {
|
|
302
377
|
program.outputHelp();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAE/D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,yDAAyD,CAAC;KACtE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,iFAAiF;AAEjF,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC1D,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;KAClE,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,OAA4B,CAAC;IACjC,IAAI,OAAkC,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAE,UAAgC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,QAAQ,eAAe,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClG,CAAC;YACD,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACrC,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClG,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7D,OAAO,GAAG,EAAE,CAAC;QAEb,8DAA8D;QAC9D,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE;YAClC,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,sBAAsB,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,YAAY,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,+BAA+B,CAAC,CAAC;YAC/D,OAAO,EAAE,IAAI,EAAE,CAAC;YAChB,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CACZ,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EACrB,CAAC,GAAY,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CACF,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAEjD,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QAEjB,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,GAAG,CAAC,CAAC;YACZ,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtB,8CAA8C;gBAC9C,IAAI,OAAO,CAAC,QAAQ;oBAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;gBACvD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;oBAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBACxD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;oBACrC,MAAM,CAAC,KAAK,CAAC,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzF,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,KAAK;gBAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAC7B,+EAA+E;YAC/E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;oBACxB,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;oBACzD,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;gBACrB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7F,OAAO,EAAE,IAAI,EAAE,CAAC;QAChB,MAAM,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,iFAAiF;AAEjF,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,CAAC;KAC/D,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC;KAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,MAAM,6CAA6C,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,gCAAgC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEL,iFAAiF;AAEjF,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,4DAA4D,CAAC;KACzE,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,mDAAmD,CAAC;KACvE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY;gBAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1F,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,iFAAiF;AAEjF,oGAAoG;AACpG,KAAK,UAAU,gBAAgB,CAAC,IAAwB;IACtD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,MAAM;QAAE,GAAG,CAAC,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACjE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IACzD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAA4B,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,GAAuB,EAAE,MAAc,EAAE,IAAY,EAAE,IAAc;IACzG,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE,EAAE;QAClE,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QACnG,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC5D,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,GAAY,EAAE,EAAE,CACrC,GAAG;KACA,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,aAAa,EAAE,yEAAyE,CAAC;KAChG,MAAM,CAAC,aAAa,EAAE,sDAAsD,CAAC;KAC7E,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAEpC,aAAa,CACX,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2GAA2G,CAAC;KACxH,MAAM,CAAC,kBAAkB,EAAE,4DAA4D,CAAC,CAC5F,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,OAAuB,CAAC;QAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,GAAG,WAAW,CAAC,MAAM,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAC1L,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACvH,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAyB,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,aAAa,CACX,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uGAAuG,CAAC;KACpH,MAAM,CAAC,WAAW,EAAE,6CAA6C,CAAC,CACtE,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,MAAM,SAAS,CACvB,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB,EACrE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAChD,KAAK,EACL,gBAAgB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,EACtD,OAAO,CACR,CAAC;QACF,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACvH,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;aAC1D,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAyB,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;YACtH,MAAM,OAAO,GAAI,CAAC,CAAC,IAAI,CAAC,OAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC5E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,8BAA8B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChI,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wFAAwF,CAAC;KACrG,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;aAC7G,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;YAChH,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC3I,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;QAChI,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,iFAAiF;AAEjF,KAAK,UAAU,SAAS;IACtB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,CAAW,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,kGAAkG,CAAC;KAC/G,QAAQ,CAAC,OAAO,EAAE,8DAA8D,CAAC;KACjF,MAAM,CAAC,KAAK,EAAE,GAAY,EAAE,EAAE;IAC7B,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,IAAI,CAAC;KACxD,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,EAAE,MAAM,CAAC;KACvF,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC;KAC9B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;IAClB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC;AACzG,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -54,8 +54,8 @@ export declare const PolicyFileSchema: z.ZodObject<{
|
|
|
54
54
|
message: z.ZodOptional<z.ZodString>;
|
|
55
55
|
}, "strict", z.ZodTypeAny, {
|
|
56
56
|
effect: "allow" | "deny" | "approve";
|
|
57
|
-
message?: string | undefined;
|
|
58
57
|
servers?: string[] | undefined;
|
|
58
|
+
message?: string | undefined;
|
|
59
59
|
tools?: string[] | undefined;
|
|
60
60
|
name?: string | undefined;
|
|
61
61
|
args?: {
|
|
@@ -74,8 +74,8 @@ export declare const PolicyFileSchema: z.ZodObject<{
|
|
|
74
74
|
clients?: string[] | undefined;
|
|
75
75
|
}, {
|
|
76
76
|
effect: "allow" | "deny" | "approve";
|
|
77
|
-
message?: string | undefined;
|
|
78
77
|
servers?: string[] | undefined;
|
|
78
|
+
message?: string | undefined;
|
|
79
79
|
tools?: string[] | undefined;
|
|
80
80
|
name?: string | undefined;
|
|
81
81
|
args?: {
|
|
@@ -137,8 +137,8 @@ export declare const PolicyFileSchema: z.ZodObject<{
|
|
|
137
137
|
}, "strict", z.ZodTypeAny, {
|
|
138
138
|
rules: {
|
|
139
139
|
effect: "allow" | "deny" | "approve";
|
|
140
|
-
message?: string | undefined;
|
|
141
140
|
servers?: string[] | undefined;
|
|
141
|
+
message?: string | undefined;
|
|
142
142
|
tools?: string[] | undefined;
|
|
143
143
|
name?: string | undefined;
|
|
144
144
|
args?: {
|
|
@@ -174,8 +174,8 @@ export declare const PolicyFileSchema: z.ZodObject<{
|
|
|
174
174
|
version?: 1 | undefined;
|
|
175
175
|
rules?: {
|
|
176
176
|
effect: "allow" | "deny" | "approve";
|
|
177
|
-
message?: string | undefined;
|
|
178
177
|
servers?: string[] | undefined;
|
|
178
|
+
message?: string | undefined;
|
|
179
179
|
tools?: string[] | undefined;
|
|
180
180
|
name?: string | undefined;
|
|
181
181
|
args?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAc,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqVrF,6FAA6F;AAC7F,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOlB,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAc,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqVrF,6FAA6F;AAC7F,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOlB,CAAC;AAygBZ;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMzE;AAED,yGAAyG;AACzG,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAe1D;AAED,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkB5E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8B1G;AAgDD,wBAAgB,qBAAqB,IAAI,MAAM,CAmH9C"}
|
package/dist/config/loader.js
CHANGED
|
@@ -11,7 +11,7 @@ import { dirname, resolve } from 'path';
|
|
|
11
11
|
import { parse as parseYaml } from 'yaml';
|
|
12
12
|
import { z } from 'zod';
|
|
13
13
|
import { expandEnv } from '../transport/channel.js';
|
|
14
|
-
import { configDeprecations, removedConfigKeys } from '../utils/deprecations.js';
|
|
14
|
+
import { configDeprecations, normalizeApiKeyScopes, removedConfigKeys } from '../utils/deprecations.js';
|
|
15
15
|
import { invalidCidr } from '../security/network.js';
|
|
16
16
|
import { invalidRedactPattern } from '../security/redact.js';
|
|
17
17
|
import { ASYMMETRIC_ALGORITHMS, HMAC_ALGORITHMS } from '../auth/middleware.js';
|
|
@@ -80,7 +80,7 @@ const McpServerSchema = z.object({
|
|
|
80
80
|
.optional(),
|
|
81
81
|
loadBalancing: z
|
|
82
82
|
.object({
|
|
83
|
-
strategy: z.enum(['round-robin', 'random', 'weighted', '
|
|
83
|
+
strategy: z.enum(['round-robin', 'random', 'weighted', 'failover', 'smart']).optional(),
|
|
84
84
|
score: z
|
|
85
85
|
.object({ latency: z.number().min(0).optional(), errorRate: z.number().min(0).optional(), cost: z.number().min(0).optional() })
|
|
86
86
|
.strict()
|
|
@@ -417,7 +417,7 @@ const GatewayConfigSchema = z.object({
|
|
|
417
417
|
})
|
|
418
418
|
.optional(),
|
|
419
419
|
servers: z.array(McpServerSchema).default([]),
|
|
420
|
-
version: z.literal(
|
|
420
|
+
version: z.literal(4).optional(),
|
|
421
421
|
cors: z.object({ origins: z.array(z.string()).optional() }).strict().optional(),
|
|
422
422
|
health: z.object({ intervalMs: z.number().int().min(1000).optional() }).strict().optional(),
|
|
423
423
|
admin: z.object({ configApi: z.boolean().optional() }).strict().optional(),
|
|
@@ -762,6 +762,7 @@ const GatewayConfigSchema = z.object({
|
|
|
762
762
|
name: z.string().min(1).optional(),
|
|
763
763
|
enabled: z.boolean().optional(),
|
|
764
764
|
options: z.record(z.unknown()).optional(),
|
|
765
|
+
secrets: z.record(z.string().regex(/^secret:\/\/[A-Za-z0-9_-]+\/\S+$/, 'must be a secret://provider/path reference')).optional(),
|
|
765
766
|
isolation: z.enum(['tenant', 'client', 'shared']).optional(),
|
|
766
767
|
limits: z
|
|
767
768
|
.object({
|
|
@@ -868,9 +869,11 @@ export function resolveConfigPath(configPath) {
|
|
|
868
869
|
/** Validate (and apply defaults to) a raw config object; throws a readable error listing every issue. */
|
|
869
870
|
export function validateConfig(raw) {
|
|
870
871
|
const removed = removedConfigKeys(raw);
|
|
872
|
+
const v4 = normalizeApiKeyScopes(raw);
|
|
873
|
+
removed.push(...v4.errors);
|
|
871
874
|
if (removed.length > 0)
|
|
872
875
|
throw new Error(`Invalid configuration:\n${removed.map((m) => ` - ${m}`).join('\n')}`);
|
|
873
|
-
const result = GatewayConfigSchema.safeParse(raw);
|
|
876
|
+
const result = GatewayConfigSchema.safeParse(v4.raw);
|
|
874
877
|
if (!result.success) {
|
|
875
878
|
throw new Error(`Invalid configuration:\n${result.error.issues.map((i) => ` - ${i.path.join('.')}: ${i.message}`).join('\n')}`);
|
|
876
879
|
}
|
|
@@ -984,6 +987,7 @@ export function generateDefaultConfig() {
|
|
|
984
987
|
return `# mcp-gateway configuration
|
|
985
988
|
# Documentation: https://github.com/HarrisonCN/mcp-gateway/docs
|
|
986
989
|
|
|
990
|
+
version: 4
|
|
987
991
|
port: 4000
|
|
988
992
|
host: 0.0.0.0
|
|
989
993
|
logLevel: info
|
|
@@ -995,9 +999,10 @@ logLevel: info
|
|
|
995
999
|
# - your-secret-key-here # full access
|
|
996
1000
|
# - key: \${AURA_GATEWAY_KEY} # scoped key; \${VAR} is expanded (patterns are globs)
|
|
997
1001
|
# name: aura
|
|
998
|
-
#
|
|
999
|
-
#
|
|
1000
|
-
#
|
|
1002
|
+
# scope:
|
|
1003
|
+
# servers: ["github", "fs-*"]
|
|
1004
|
+
# tools: ["read_*", "github/create_issue"]
|
|
1005
|
+
# rateLimit: { limit: 30, windowSeconds: 60 }
|
|
1001
1006
|
# - sha256:<64-hex-digest> # a key stored as its digest: run mcp-gateway hash-key
|
|
1002
1007
|
# - key: \${CI_GATEWAY_KEY}
|
|
1003
1008
|
# name: ci
|