@winstonsayno/mcp-gateway 0.4.0 → 1.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.
Files changed (73) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +225 -19
  3. package/dashboard/index.html +79 -22
  4. package/dist/auth/middleware.d.ts +21 -2
  5. package/dist/auth/middleware.d.ts.map +1 -1
  6. package/dist/auth/middleware.js +63 -13
  7. package/dist/auth/middleware.js.map +1 -1
  8. package/dist/auth/ratelimit.d.ts +16 -1
  9. package/dist/auth/ratelimit.d.ts.map +1 -1
  10. package/dist/auth/ratelimit.js +15 -8
  11. package/dist/auth/ratelimit.js.map +1 -1
  12. package/dist/auth/scopes.d.ts +40 -0
  13. package/dist/auth/scopes.d.ts.map +1 -0
  14. package/dist/auth/scopes.js +76 -0
  15. package/dist/auth/scopes.js.map +1 -0
  16. package/dist/config/loader.d.ts.map +1 -1
  17. package/dist/config/loader.js +91 -10
  18. package/dist/config/loader.js.map +1 -1
  19. package/dist/gateway/api.d.ts +12 -0
  20. package/dist/gateway/api.d.ts.map +1 -1
  21. package/dist/gateway/api.js +264 -11
  22. package/dist/gateway/api.js.map +1 -1
  23. package/dist/gateway/index.d.ts +4 -0
  24. package/dist/gateway/index.d.ts.map +1 -1
  25. package/dist/gateway/index.js +54 -2
  26. package/dist/gateway/index.js.map +1 -1
  27. package/dist/gateway/supervisor.d.ts +1 -0
  28. package/dist/gateway/supervisor.d.ts.map +1 -1
  29. package/dist/gateway/supervisor.js +12 -1
  30. package/dist/gateway/supervisor.js.map +1 -1
  31. package/dist/index.d.ts +11 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +6 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/mcp/catalog.d.ts +30 -0
  36. package/dist/mcp/catalog.d.ts.map +1 -0
  37. package/dist/mcp/catalog.js +78 -0
  38. package/dist/mcp/catalog.js.map +1 -0
  39. package/dist/mcp/endpoint.d.ts +132 -0
  40. package/dist/mcp/endpoint.d.ts.map +1 -0
  41. package/dist/mcp/endpoint.js +714 -0
  42. package/dist/mcp/endpoint.js.map +1 -0
  43. package/dist/mcp/llm-schemas.d.ts +36 -0
  44. package/dist/mcp/llm-schemas.d.ts.map +1 -0
  45. package/dist/mcp/llm-schemas.js +69 -0
  46. package/dist/mcp/llm-schemas.js.map +1 -0
  47. package/dist/mcp/naming.d.ts +53 -0
  48. package/dist/mcp/naming.d.ts.map +1 -0
  49. package/dist/mcp/naming.js +71 -0
  50. package/dist/mcp/naming.js.map +1 -0
  51. package/dist/middleware/cors.d.ts +2 -0
  52. package/dist/middleware/cors.d.ts.map +1 -1
  53. package/dist/middleware/cors.js +25 -19
  54. package/dist/middleware/cors.js.map +1 -1
  55. package/dist/monitor/audit.d.ts +60 -0
  56. package/dist/monitor/audit.d.ts.map +1 -0
  57. package/dist/monitor/audit.js +155 -0
  58. package/dist/monitor/audit.js.map +1 -0
  59. package/dist/monitor/index.d.ts +19 -0
  60. package/dist/monitor/index.d.ts.map +1 -1
  61. package/dist/monitor/index.js +88 -0
  62. package/dist/monitor/index.js.map +1 -1
  63. package/dist/proxy/index.d.ts +25 -2
  64. package/dist/proxy/index.d.ts.map +1 -1
  65. package/dist/proxy/index.js +171 -16
  66. package/dist/proxy/index.js.map +1 -1
  67. package/dist/registry/index.d.ts +8 -1
  68. package/dist/registry/index.d.ts.map +1 -1
  69. package/dist/registry/index.js +22 -0
  70. package/dist/registry/index.js.map +1 -1
  71. package/dist/utils/types.d.ts +108 -2
  72. package/dist/utils/types.d.ts.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../../src/mcp/endpoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Export the gateway's tools as LLM function-calling schemas.
3
+ *
4
+ * - `openai`: Chat Completions `tools` entries
5
+ * (`{ type: "function", function: { name, description, parameters } }`).
6
+ * - `openai-responses`: Responses API entries
7
+ * (`{ type: "function", name, description, parameters }`).
8
+ * - `anthropic`: Messages API `tools` entries (`{ name, description, input_schema }`).
9
+ *
10
+ * Both providers require names matching `^[a-zA-Z0-9_-]{1,64}$`, so exposed
11
+ * names (the `/mcp` naming, e.g. `github__create_issue`) are sanitised and
12
+ * de-duplicated; `mapping` tells the caller which server / tool each name is,
13
+ * so a model's tool call can be forwarded to `POST /api/v1/tools/call`.
14
+ *
15
+ * @module mcp/llm-schemas
16
+ */
17
+ import type { ToolInfo, ToolNaming } from '../utils/types.js';
18
+ export declare const LLM_SCHEMA_FORMATS: readonly ["openai", "openai-responses", "anthropic"];
19
+ export type LlmSchemaFormat = (typeof LLM_SCHEMA_FORMATS)[number];
20
+ export interface LlmToolSchemas {
21
+ format: LlmSchemaFormat;
22
+ /** Pass this array as the provider's `tools` parameter. */
23
+ tools: Array<Record<string, unknown>>;
24
+ /** LLM tool name → gateway target (`{ server, tool }` for `POST /tools/call`). */
25
+ mapping: Record<string, {
26
+ server: string;
27
+ tool: string;
28
+ }>;
29
+ total: number;
30
+ }
31
+ /** Make a name valid for OpenAI / Anthropic (`^[a-zA-Z0-9_-]{1,64}$`). */
32
+ export declare function sanitizeToolName(name: string): string;
33
+ /** JSON Schema for function parameters: always an object schema, without `$schema`. */
34
+ export declare function toParameters(schema: Record<string, unknown> | undefined): Record<string, unknown>;
35
+ export declare function toLlmToolSchemas(tools: readonly ToolInfo[], format: LlmSchemaFormat, naming?: ToolNaming): LlmToolSchemas;
36
+ //# sourceMappingURL=llm-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-schemas.d.ts","sourceRoot":"","sources":["../../src/mcp/llm-schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG9D,eAAO,MAAM,kBAAkB,sDAAuD,CAAC;AACvF,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,2DAA2D;IAC3D,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtC,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,KAAK,EAAE,MAAM,CAAC;CACf;AAID,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMjG;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,MAAM,EAAE,eAAe,EACvB,MAAM,GAAE,UAAmB,GAC1B,cAAc,CA0BhB"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Export the gateway's tools as LLM function-calling schemas.
3
+ *
4
+ * - `openai`: Chat Completions `tools` entries
5
+ * (`{ type: "function", function: { name, description, parameters } }`).
6
+ * - `openai-responses`: Responses API entries
7
+ * (`{ type: "function", name, description, parameters }`).
8
+ * - `anthropic`: Messages API `tools` entries (`{ name, description, input_schema }`).
9
+ *
10
+ * Both providers require names matching `^[a-zA-Z0-9_-]{1,64}$`, so exposed
11
+ * names (the `/mcp` naming, e.g. `github__create_issue`) are sanitised and
12
+ * de-duplicated; `mapping` tells the caller which server / tool each name is,
13
+ * so a model's tool call can be forwarded to `POST /api/v1/tools/call`.
14
+ *
15
+ * @module mcp/llm-schemas
16
+ */
17
+ import { createHash } from 'crypto';
18
+ import { buildToolIndex } from './naming.js';
19
+ export const LLM_SCHEMA_FORMATS = ['openai', 'openai-responses', 'anthropic'];
20
+ const MAX_NAME = 64;
21
+ /** Make a name valid for OpenAI / Anthropic (`^[a-zA-Z0-9_-]{1,64}$`). */
22
+ export function sanitizeToolName(name) {
23
+ let n = name.replace(/[^a-zA-Z0-9_-]/g, '_');
24
+ if (n.length === 0)
25
+ n = 'tool';
26
+ if (n.length > MAX_NAME) {
27
+ const h = createHash('sha256').update(name).digest('hex').slice(0, 8);
28
+ n = `${n.slice(0, MAX_NAME - 9)}_${h}`;
29
+ }
30
+ return n;
31
+ }
32
+ /** JSON Schema for function parameters: always an object schema, without `$schema`. */
33
+ export function toParameters(schema) {
34
+ const out = { ...(schema ?? {}) };
35
+ delete out.$schema;
36
+ if (out.type === undefined)
37
+ out.type = 'object';
38
+ if (out.type === 'object' && out.properties === undefined)
39
+ out.properties = {};
40
+ return out;
41
+ }
42
+ export function toLlmToolSchemas(tools, format, naming = 'auto') {
43
+ const index = buildToolIndex(tools, naming);
44
+ const mapping = {};
45
+ const out = [];
46
+ for (const { name: exposed, tool } of index.list) {
47
+ let name = sanitizeToolName(exposed);
48
+ for (let i = 2; mapping[name]; i++) {
49
+ const suffix = `_${i}`;
50
+ name = sanitizeToolName(exposed).slice(0, MAX_NAME - suffix.length) + suffix;
51
+ }
52
+ mapping[name] = { server: tool.serverId, tool: tool.name };
53
+ const description = tool.description ?? tool.title ?? '';
54
+ const parameters = toParameters(tool.inputSchema);
55
+ switch (format) {
56
+ case 'openai':
57
+ out.push({ type: 'function', function: { name, description, parameters } });
58
+ break;
59
+ case 'openai-responses':
60
+ out.push({ type: 'function', name, description, parameters });
61
+ break;
62
+ case 'anthropic':
63
+ out.push({ name, description, input_schema: parameters });
64
+ break;
65
+ }
66
+ }
67
+ return { format, tools: out, mapping, total: out.length };
68
+ }
69
+ //# sourceMappingURL=llm-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-schemas.js","sourceRoot":"","sources":["../../src/mcp/llm-schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Tool naming for the downstream MCP endpoint.
3
+ *
4
+ * Several upstream servers may expose tools with the same name. MCP clients
5
+ * see one flat list, so the gateway gives every tool a unique *exposed* name:
6
+ *
7
+ * - `auto` (default): a tool keeps its own name when no other server exposes
8
+ * that name; every copy of a colliding name becomes `<serverId>__<tool>`.
9
+ * - `prefix`: every tool is `<serverId>__<tool>`.
10
+ *
11
+ * The result is deterministic: tools are ordered by server id, then tool
12
+ * name, independent of connection order. In `auto` mode the prefixed form is
13
+ * also accepted by `tools/call` as an alias, so clients can always pin a
14
+ * server. If an exposed name is still taken (e.g. a tool literally called
15
+ * `a__b`), the first one in that order wins and later ones are skipped.
16
+ *
17
+ * @module mcp/naming
18
+ */
19
+ import type { ToolInfo, ToolNaming } from '../utils/types.js';
20
+ export declare const TOOL_NAME_SEPARATOR = "__";
21
+ export interface ExposedTool {
22
+ /** Name shown to MCP clients. */
23
+ name: string;
24
+ tool: ToolInfo;
25
+ }
26
+ export interface ToolIndex {
27
+ /** Exposed tools in deterministic order. */
28
+ list: ExposedTool[];
29
+ /** Exposed name (and, in `auto` mode, prefixed alias) → upstream tool. */
30
+ byName: Map<string, ToolInfo>;
31
+ }
32
+ export declare function prefixedName(serverId: string, toolName: string): string;
33
+ type Named = {
34
+ serverId: string;
35
+ name: string;
36
+ };
37
+ export interface NameIndex<T extends Named> {
38
+ list: Array<{
39
+ name: string;
40
+ item: T;
41
+ }>;
42
+ byName: Map<string, T>;
43
+ }
44
+ /**
45
+ * Unique exposed names for items (tools, prompts) that several servers may
46
+ * share by name; see the module comment for the rules.
47
+ */
48
+ export declare function buildNameIndex<T extends Named>(items: readonly T[], naming?: ToolNaming): NameIndex<T>;
49
+ export declare function buildToolIndex(tools: readonly ToolInfo[], naming?: ToolNaming): ToolIndex;
50
+ /** MCP `Tool` object for an exposed tool. */
51
+ export declare function toMcpTool({ name, tool }: ExposedTool): Record<string, unknown>;
52
+ export {};
53
+ //# sourceMappingURL=naming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/mcp/naming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE9D,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,0EAA0E;IAC1E,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAKhD,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,KAAK;IACxC,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,GAAE,UAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,CAqB9G;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,MAAM,GAAE,UAAmB,GAAG,SAAS,CAGjG;AAED,6CAA6C;AAC7C,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU9E"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Tool naming for the downstream MCP endpoint.
3
+ *
4
+ * Several upstream servers may expose tools with the same name. MCP clients
5
+ * see one flat list, so the gateway gives every tool a unique *exposed* name:
6
+ *
7
+ * - `auto` (default): a tool keeps its own name when no other server exposes
8
+ * that name; every copy of a colliding name becomes `<serverId>__<tool>`.
9
+ * - `prefix`: every tool is `<serverId>__<tool>`.
10
+ *
11
+ * The result is deterministic: tools are ordered by server id, then tool
12
+ * name, independent of connection order. In `auto` mode the prefixed form is
13
+ * also accepted by `tools/call` as an alias, so clients can always pin a
14
+ * server. If an exposed name is still taken (e.g. a tool literally called
15
+ * `a__b`), the first one in that order wins and later ones are skipped.
16
+ *
17
+ * @module mcp/naming
18
+ */
19
+ export const TOOL_NAME_SEPARATOR = '__';
20
+ export function prefixedName(serverId, toolName) {
21
+ return `${serverId}${TOOL_NAME_SEPARATOR}${toolName}`;
22
+ }
23
+ const compare = (a, b) => a.serverId < b.serverId ? -1 : a.serverId > b.serverId ? 1 : a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
24
+ /**
25
+ * Unique exposed names for items (tools, prompts) that several servers may
26
+ * share by name; see the module comment for the rules.
27
+ */
28
+ export function buildNameIndex(items, naming = 'auto') {
29
+ const sorted = [...items].sort(compare);
30
+ const counts = new Map();
31
+ for (const t of sorted)
32
+ counts.set(t.name, (counts.get(t.name) ?? 0) + 1);
33
+ const list = [];
34
+ const byName = new Map();
35
+ for (const item of sorted) {
36
+ const name = naming === 'prefix' || (counts.get(item.name) ?? 0) > 1 ? prefixedName(item.serverId, item.name) : item.name;
37
+ if (byName.has(name))
38
+ continue;
39
+ byName.set(name, item);
40
+ list.push({ name, item });
41
+ }
42
+ if (naming === 'auto') {
43
+ for (const { item } of list) {
44
+ const alias = prefixedName(item.serverId, item.name);
45
+ if (!byName.has(alias))
46
+ byName.set(alias, item);
47
+ }
48
+ }
49
+ return { list, byName };
50
+ }
51
+ export function buildToolIndex(tools, naming = 'auto') {
52
+ const { list, byName } = buildNameIndex(tools, naming);
53
+ return { list: list.map(({ name, item }) => ({ name, tool: item })), byName };
54
+ }
55
+ /** MCP `Tool` object for an exposed tool. */
56
+ export function toMcpTool({ name, tool }) {
57
+ const out = {
58
+ name,
59
+ inputSchema: tool.inputSchema ?? { type: 'object' },
60
+ };
61
+ if (tool.title !== undefined)
62
+ out.title = tool.title;
63
+ if (tool.description !== undefined)
64
+ out.description = tool.description;
65
+ if (tool.outputSchema !== undefined)
66
+ out.outputSchema = tool.outputSchema;
67
+ if (tool.annotations !== undefined)
68
+ out.annotations = tool.annotations;
69
+ return out;
70
+ }
71
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/mcp/naming.ts"],"names":[],"mappings":"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"}
@@ -15,5 +15,7 @@ export interface CORSOptions {
15
15
  credentials?: boolean;
16
16
  maxAge?: number;
17
17
  }
18
+ /** Whether `origin` matches an origin list ('*', exact values, or /regex/). */
19
+ export declare function originAllowed(origins: readonly string[], origin: string): boolean;
18
20
  export declare function corsMiddleware(options: CORSOptions): (req: Request, res: Response, next: NextFunction) => void;
19
21
  //# sourceMappingURL=cors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../src/middleware/cors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,IA0BzC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA+B/D"}
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../src/middleware/cors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAcD,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAcjF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,IAYzC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA+B/D"}
@@ -12,28 +12,34 @@ const DEFAULT_HEADERS = [
12
12
  'Authorization',
13
13
  'X-API-Key',
14
14
  'X-Request-Id',
15
+ // MCP Streamable HTTP (/mcp)
16
+ 'Mcp-Session-Id',
17
+ 'MCP-Protocol-Version',
18
+ 'Last-Event-ID',
15
19
  ];
16
- export function corsMiddleware(options) {
17
- const { origins, methods = DEFAULT_METHODS, allowedHeaders = DEFAULT_HEADERS, exposedHeaders = ['X-Request-Id', 'X-RateLimit-Limit', 'X-RateLimit-Remaining', 'X-RateLimit-Reset'], credentials = false, maxAge = 86400, } = options;
18
- const isAllowed = (origin) => {
19
- for (const o of origins) {
20
- if (o === '*')
21
- return true;
22
- if (o === origin)
23
- return true;
24
- // Support regex patterns wrapped in /…/
25
- if (o.startsWith('/') && o.endsWith('/')) {
26
- try {
27
- if (new RegExp(o.slice(1, -1)).test(origin))
28
- return true;
29
- }
30
- catch {
31
- // invalid regex — skip
32
- }
20
+ /** Whether `origin` matches an origin list ('*', exact values, or /regex/). */
21
+ export function originAllowed(origins, origin) {
22
+ for (const o of origins) {
23
+ if (o === '*')
24
+ return true;
25
+ if (o === origin)
26
+ return true;
27
+ // Support regex patterns wrapped in /…/
28
+ if (o.startsWith('/') && o.endsWith('/') && o.length > 1) {
29
+ try {
30
+ if (new RegExp(o.slice(1, -1)).test(origin))
31
+ return true;
32
+ }
33
+ catch {
34
+ // invalid regex — skip
33
35
  }
34
36
  }
35
- return false;
36
- };
37
+ }
38
+ return false;
39
+ }
40
+ export function corsMiddleware(options) {
41
+ const { origins, methods = DEFAULT_METHODS, allowedHeaders = DEFAULT_HEADERS, exposedHeaders = ['X-Request-Id', 'X-RateLimit-Limit', 'X-RateLimit-Remaining', 'X-RateLimit-Reset', 'Mcp-Session-Id'], credentials = false, maxAge = 86400, } = options;
42
+ const isAllowed = (origin) => originAllowed(origins, origin);
37
43
  return (req, res, next) => {
38
44
  const origin = req.headers.origin ?? '';
39
45
  const wildcard = origins.includes('*');
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../src/middleware/cors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC7E,MAAM,eAAe,GAAG;IACtB,cAAc;IACd,eAAe;IACf,WAAW;IACX,cAAc;CACf,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,OAAoB;IACjD,MAAM,EACJ,OAAO,EACP,OAAO,GAAG,eAAe,EACzB,cAAc,GAAG,eAAe,EAChC,cAAc,GAAG,CAAC,cAAc,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,mBAAmB,CAAC,EACpG,WAAW,GAAG,KAAK,EACnB,MAAM,GAAG,KAAK,GACf,GAAG,OAAO,CAAC;IAEZ,MAAM,SAAS,GAAG,CAAC,MAAc,EAAW,EAAE;QAC5C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC3B,IAAI,CAAC,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YAC9B,wCAAwC;YACxC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;wBAAE,OAAO,IAAI,CAAC;gBAC3D,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QAExC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,qEAAqE;YACrE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnB,wEAAwE;YACxE,IAAI,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,SAAS,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;QAED,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE1E,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACxD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../src/middleware/cors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Persistent audit log of request records.
3
+ *
4
+ * Optional and off by default. The built-in store uses SQLite through Node's
5
+ * own `node:sqlite` module (Node 22.5+), so the gateway gains no dependency
6
+ * and nothing native is compiled on install. On older Node versions enabling
7
+ * the audit log fails at startup with a clear message; embedders can pass any
8
+ * {@link AuditStore} implementation to `MetricsCollector#setAuditStore`.
9
+ *
10
+ * Only metadata is stored (time, server, tool / URI / prompt, duration,
11
+ * outcome, error message, client id, interface) — never call arguments or
12
+ * results, which may contain secrets.
13
+ *
14
+ * @module monitor/audit
15
+ */
16
+ import type { RequestMetric } from '../utils/types.js';
17
+ export interface AuditQuery {
18
+ /** Max records (newest first). */
19
+ limit: number;
20
+ /** Opaque cursor from a previous page's `nextCursor`. */
21
+ cursor?: string;
22
+ /** Inclusive lower / exclusive upper time bounds (ms epoch). */
23
+ since?: number;
24
+ until?: number;
25
+ server?: string;
26
+ tool?: string;
27
+ clientId?: string;
28
+ success?: boolean;
29
+ via?: 'rest' | 'mcp';
30
+ kind?: 'tool' | 'resource' | 'prompt';
31
+ }
32
+ export interface AuditPage {
33
+ requests: RequestMetric[];
34
+ /** Pass as `cursor` to get the next (older) page. */
35
+ nextCursor?: string;
36
+ }
37
+ export interface AuditStore {
38
+ readonly kind: string;
39
+ append(record: RequestMetric): void;
40
+ query(q: AuditQuery): AuditPage;
41
+ /** Delete records older than `cutoffMs`; returns the number removed. */
42
+ prune(cutoffMs: number): number;
43
+ close(): void;
44
+ }
45
+ /** Whether a record matches the non-cursor filters of a query. */
46
+ export declare function matchesQuery(m: RequestMetric, q: AuditQuery): boolean;
47
+ /** Whether the built-in SQLite store can be used on this Node version. */
48
+ export declare function sqliteAvailable(): boolean;
49
+ export declare class SqliteAuditStore implements AuditStore {
50
+ readonly path: string;
51
+ readonly kind = "sqlite";
52
+ private readonly db;
53
+ private readonly insert;
54
+ constructor(path: string);
55
+ append(m: RequestMetric): void;
56
+ query(q: AuditQuery): AuditPage;
57
+ prune(cutoffMs: number): number;
58
+ close(): void;
59
+ }
60
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/monitor/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;CACvC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,wEAAwE;IACxE,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAWrE;AAyBD,0EAA0E;AAC1E,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,qBAAa,gBAAiB,YAAW,UAAU;IAKrC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAJjC,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAEpB,IAAI,EAAE,MAAM;IAmCjC,MAAM,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAe9B,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS;IA2C/B,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI/B,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Persistent audit log of request records.
3
+ *
4
+ * Optional and off by default. The built-in store uses SQLite through Node's
5
+ * own `node:sqlite` module (Node 22.5+), so the gateway gains no dependency
6
+ * and nothing native is compiled on install. On older Node versions enabling
7
+ * the audit log fails at startup with a clear message; embedders can pass any
8
+ * {@link AuditStore} implementation to `MetricsCollector#setAuditStore`.
9
+ *
10
+ * Only metadata is stored (time, server, tool / URI / prompt, duration,
11
+ * outcome, error message, client id, interface) — never call arguments or
12
+ * results, which may contain secrets.
13
+ *
14
+ * @module monitor/audit
15
+ */
16
+ import { createRequire } from 'module';
17
+ import { mkdirSync } from 'fs';
18
+ import { dirname, resolve } from 'path';
19
+ /** Whether a record matches the non-cursor filters of a query. */
20
+ export function matchesQuery(m, q) {
21
+ const t = m.timestamp.getTime();
22
+ if (q.since !== undefined && t < q.since)
23
+ return false;
24
+ if (q.until !== undefined && t >= q.until)
25
+ return false;
26
+ if (q.server !== undefined && m.serverId !== q.server)
27
+ return false;
28
+ if (q.tool !== undefined && m.toolName !== q.tool)
29
+ return false;
30
+ if (q.clientId !== undefined && m.clientId !== q.clientId)
31
+ return false;
32
+ if (q.success !== undefined && m.success !== q.success)
33
+ return false;
34
+ if (q.via !== undefined && (m.via ?? 'rest') !== q.via)
35
+ return false;
36
+ if (q.kind !== undefined && (m.kind ?? 'tool') !== q.kind)
37
+ return false;
38
+ return true;
39
+ }
40
+ function loadSqlite() {
41
+ try {
42
+ const getBuiltin = process.getBuiltinModule;
43
+ const mod = getBuiltin ? getBuiltin('node:sqlite') : createRequire(import.meta.url)('node:sqlite');
44
+ return mod && typeof mod.DatabaseSync === 'function' ? mod : undefined;
45
+ }
46
+ catch {
47
+ return undefined;
48
+ }
49
+ }
50
+ /** Whether the built-in SQLite store can be used on this Node version. */
51
+ export function sqliteAvailable() {
52
+ return loadSqlite() !== undefined;
53
+ }
54
+ export class SqliteAuditStore {
55
+ path;
56
+ kind = 'sqlite';
57
+ db;
58
+ insert;
59
+ constructor(path) {
60
+ this.path = path;
61
+ const sqlite = loadSqlite();
62
+ if (!sqlite) {
63
+ throw new Error(`audit.enabled requires the built-in node:sqlite module (Node.js 22.5 or newer); this is Node ${process.versions.node}`);
64
+ }
65
+ const file = path === ':memory:' ? path : resolve(path);
66
+ if (file !== ':memory:')
67
+ mkdirSync(dirname(file), { recursive: true });
68
+ this.db = new sqlite.DatabaseSync(file);
69
+ this.db.exec(`
70
+ PRAGMA journal_mode = WAL;
71
+ PRAGMA synchronous = NORMAL;
72
+ CREATE TABLE IF NOT EXISTS requests (
73
+ seq INTEGER PRIMARY KEY AUTOINCREMENT,
74
+ id TEXT NOT NULL UNIQUE,
75
+ ts INTEGER NOT NULL,
76
+ server TEXT NOT NULL,
77
+ tool TEXT NOT NULL,
78
+ kind TEXT NOT NULL DEFAULT 'tool',
79
+ duration_ms INTEGER NOT NULL,
80
+ success INTEGER NOT NULL,
81
+ error TEXT,
82
+ client_id TEXT,
83
+ via TEXT
84
+ );
85
+ CREATE INDEX IF NOT EXISTS requests_ts ON requests (ts);
86
+ CREATE INDEX IF NOT EXISTS requests_server ON requests (server, ts);
87
+ CREATE INDEX IF NOT EXISTS requests_client ON requests (client_id, ts);
88
+ `);
89
+ this.insert = this.db.prepare('INSERT OR IGNORE INTO requests (id, ts, server, tool, kind, duration_ms, success, error, client_id, via) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
90
+ }
91
+ append(m) {
92
+ this.insert.run(m.id, m.timestamp.getTime(), m.serverId, m.toolName, m.kind ?? 'tool', Math.round(m.durationMs), m.success ? 1 : 0, m.errorMessage ?? null, m.clientId ?? null, m.via ?? null);
93
+ }
94
+ query(q) {
95
+ const where = [];
96
+ const params = [];
97
+ const add = (sql, v) => {
98
+ where.push(sql);
99
+ params.push(v);
100
+ };
101
+ if (q.cursor !== undefined) {
102
+ const seq = /^s(\d+)$/.exec(q.cursor);
103
+ if (!seq)
104
+ throw new RangeError('invalid cursor');
105
+ add('seq < ?', Number(seq[1]));
106
+ }
107
+ if (q.since !== undefined)
108
+ add('ts >= ?', q.since);
109
+ if (q.until !== undefined)
110
+ add('ts < ?', q.until);
111
+ if (q.server !== undefined)
112
+ add('server = ?', q.server);
113
+ if (q.tool !== undefined)
114
+ add('tool = ?', q.tool);
115
+ if (q.clientId !== undefined)
116
+ add('client_id = ?', q.clientId);
117
+ if (q.success !== undefined)
118
+ add('success = ?', q.success ? 1 : 0);
119
+ if (q.via !== undefined)
120
+ add("COALESCE(via, 'rest') = ?", q.via);
121
+ if (q.kind !== undefined)
122
+ add('kind = ?', q.kind);
123
+ const sql = 'SELECT * FROM requests' + (where.length ? ` WHERE ${where.join(' AND ')}` : '') + ' ORDER BY seq DESC LIMIT ?';
124
+ const rows = this.db.prepare(sql).all(...params, q.limit + 1);
125
+ const page = rows.slice(0, q.limit);
126
+ const requests = page.map((r) => {
127
+ const m = {
128
+ id: String(r.id),
129
+ timestamp: new Date(Number(r.ts)),
130
+ serverId: String(r.server),
131
+ toolName: String(r.tool),
132
+ durationMs: Number(r.duration_ms),
133
+ success: Number(r.success) === 1,
134
+ };
135
+ if (r.error !== null && r.error !== undefined)
136
+ m.errorMessage = String(r.error);
137
+ if (r.client_id !== null && r.client_id !== undefined)
138
+ m.clientId = String(r.client_id);
139
+ if (r.via !== null && r.via !== undefined)
140
+ m.via = r.via;
141
+ if (r.kind && r.kind !== 'tool')
142
+ m.kind = r.kind;
143
+ return m;
144
+ });
145
+ const last = page[page.length - 1];
146
+ return rows.length > q.limit && last ? { requests, nextCursor: `s${String(last.seq)}` } : { requests };
147
+ }
148
+ prune(cutoffMs) {
149
+ return Number(this.db.prepare('DELETE FROM requests WHERE ts < ?').run(cutoffMs).changes);
150
+ }
151
+ close() {
152
+ this.db.close();
153
+ }
154
+ }
155
+ //# sourceMappingURL=audit.js.map