mcp-aiven 1.14.6 → 1.15.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 +20 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -0
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -1
- package/dist/config.js.map +1 -1
- package/dist/edge-auth.d.ts +10 -0
- package/dist/edge-auth.d.ts.map +1 -0
- package/dist/edge-auth.js +55 -0
- package/dist/edge-auth.js.map +1 -0
- package/dist/generated/aiven-api.d.ts +98 -0
- package/dist/generated/aiven-api.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/tools/pg/descriptions.d.ts +2 -2
- package/dist/tools/pg/descriptions.d.ts.map +1 -1
- package/dist/tools/pg/descriptions.js +7 -7
- package/dist/tools/pg/descriptions.js.map +1 -1
- package/dist/tools/pg/handlers.d.ts.map +1 -1
- package/dist/tools/pg/handlers.js +6 -2
- package/dist/tools/pg/handlers.js.map +1 -1
- package/dist/tools/pg/pg-run-query.d.ts +11 -0
- package/dist/tools/pg/pg-run-query.d.ts.map +1 -0
- package/dist/tools/pg/pg-run-query.js +10 -0
- package/dist/tools/pg/pg-run-query.js.map +1 -0
- package/dist/tools/pg/query.d.ts +4 -1
- package/dist/tools/pg/query.d.ts.map +1 -1
- package/dist/tools/pg/query.js +89 -74
- package/dist/tools/pg/query.js.map +1 -1
- package/dist/tools/pg/schemas.d.ts +6 -0
- package/dist/tools/pg/schemas.d.ts.map +1 -1
- package/dist/tools/pg/schemas.js +10 -2
- package/dist/tools/pg/schemas.js.map +1 -1
- package/dist/transport.d.ts +10 -2
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +69 -31
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -4
- package/dist/cloudflare-ips.d.ts +0 -5
- package/dist/cloudflare-ips.d.ts.map +0 -1
- package/dist/cloudflare-ips.js +0 -63
- package/dist/cloudflare-ips.js.map +0 -1
- package/dist/tools/pg/connection.d.ts +0 -5
- package/dist/tools/pg/connection.d.ts.map +0 -1
- package/dist/tools/pg/connection.js +0 -28
- package/dist/tools/pg/connection.js.map +0 -1
package/README.md
CHANGED
|
@@ -184,11 +184,30 @@ MCP_HOST=http://localhost:3000 node dist/index.js
|
|
|
184
184
|
| `AIVEN_WRITE_ALLOWLIST` | No | -- | Comma-separated tool names to re-enable while `AIVEN_READ_ONLY=true` (e.g. `aiven_kafka_topic_create`). Ignored when read-only mode is not enabled. |
|
|
185
185
|
| `MCP_HOST` | No | `https://mcp.aiven.live` | Override the OAuth protected resource host |
|
|
186
186
|
| `MCP_TRANSPORT` | No | `stdio` | Set to `http` to start an HTTP server instead of stdio |
|
|
187
|
-
| `MCP_HTTP_RATE_LIMIT_MAX` | No | `1000` | Max requests per window on `POST /mcp` (HTTP transport)
|
|
187
|
+
| `MCP_HTTP_RATE_LIMIT_MAX` | No | `1000` | Max requests per window on `POST /mcp` (HTTP transport), per bearer token. Client IP rate limiting is expected at Cloudflare. |
|
|
188
188
|
| `MCP_HTTP_RATE_LIMIT_WINDOW_MS` | No | `60000` | Window length in milliseconds for `MCP_HTTP_RATE_LIMIT_MAX`. |
|
|
189
|
+
| `EXTRA_PROTECTION` | No | `false` | Set to `true` on HTTP deployments to require a valid `X-Edge-Auth` header on every request except `GET /health`. See [Edge protection rollout](#edge-protection-rollout) below. |
|
|
190
|
+
| `MCP_EDGE_AUTH_SECRET` | When `EXTRA_PROTECTION=true` | -- | Shared secret; must match the value Cloudflare injects as `X-Edge-Auth` via Transform Rules. |
|
|
189
191
|
|
|
190
192
|
In remote (HTTP) mode, `AIVEN_TOKEN` is not needed. Your MCP client sends your token as a Bearer token with each request.
|
|
191
193
|
|
|
194
|
+
Production HTTP traffic is rate-limited in two layers: Cloudflare enforces a per-client-IP limit (configured in the Cloudflare dashboard), and this server enforces `MCP_HTTP_RATE_LIMIT_*` per bearer token on `POST /mcp`.
|
|
195
|
+
|
|
196
|
+
### Edge protection rollout
|
|
197
|
+
|
|
198
|
+
When `EXTRA_PROTECTION=true`, any mismatch between `MCP_EDGE_AUTH_SECRET` and the value Cloudflare injects as `X-Edge-Auth` causes **every request to return 403** (except `GET /health`). Both values are environment/config on opposite sides of the wire, so the only recovery path is to fix the secret and redeploy or update Cloudflare.
|
|
199
|
+
|
|
200
|
+
**Enable in this order:**
|
|
201
|
+
|
|
202
|
+
1. **Cloudflare Transform Rule** — Add a rule that sets `X-Edge-Auth` (and, if used for PG tools, `X-Client-IP`) on traffic to the MCP origin. Note the secret value you configure.
|
|
203
|
+
2. **`MCP_EDGE_AUTH_SECRET`** — Deploy the server with this env var set to the **same** secret as the Transform Rule. Leave `EXTRA_PROTECTION` unset or `false` for now; verify the origin still accepts traffic.
|
|
204
|
+
3. **`EXTRA_PROTECTION=true`** — Enable only after steps 1–2 are live and matched. Confirm a normal MCP request succeeds and direct origin access without `X-Edge-Auth` is rejected.
|
|
205
|
+
4. **Secret rotation** — Update Cloudflare and `MCP_EDGE_AUTH_SECRET` together (or briefly set `EXTRA_PROTECTION=false`), redeploy, then re-enable. Never rotate one side alone while the flag is on.
|
|
206
|
+
|
|
207
|
+
If `EXTRA_PROTECTION=true` at startup and `MCP_EDGE_AUTH_SECRET` is missing, the process exits immediately with an error.
|
|
208
|
+
|
|
209
|
+
While rejections continue, the server logs a misconfig warning at most once every 15 minutes (reset after a request with valid `X-Edge-Auth`), so a secret mismatch is visible in logs without one line per rejected request.
|
|
210
|
+
|
|
192
211
|
## Tools
|
|
193
212
|
|
|
194
213
|
### Core
|
package/dist/client.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AivenConfig, HttpMethod, RequestOptions } from './types.js';
|
|
2
2
|
export declare class AivenClient {
|
|
3
3
|
private readonly token;
|
|
4
|
+
private readonly mcpAcornSecret;
|
|
4
5
|
private readonly defaultTimeout;
|
|
5
6
|
private readonly transport;
|
|
6
7
|
private readonly fetchClient;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI1E,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;gBAEzD,MAAM,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI1E,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;gBAEzD,MAAM,EAAE,WAAW;IAezB,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,CAAC;IAwCb,OAAO,CAAC,YAAY;IAiCd,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI3E,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1E,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;CAGpE"}
|
package/dist/client.js
CHANGED
|
@@ -3,11 +3,13 @@ import { AivenError } from './errors.js';
|
|
|
3
3
|
import { VERSION, API_BASE_URL } from './config.js';
|
|
4
4
|
export class AivenClient {
|
|
5
5
|
token;
|
|
6
|
+
mcpAcornSecret;
|
|
6
7
|
defaultTimeout;
|
|
7
8
|
transport;
|
|
8
9
|
fetchClient;
|
|
9
10
|
constructor(config) {
|
|
10
11
|
this.token = config.token;
|
|
12
|
+
this.mcpAcornSecret = config.mcpAcornSecret;
|
|
11
13
|
this.defaultTimeout = 30000;
|
|
12
14
|
this.transport = config.transport;
|
|
13
15
|
this.fetchClient = createClient({
|
|
@@ -51,12 +53,23 @@ export class AivenClient {
|
|
|
51
53
|
if (options?.mcpClient) {
|
|
52
54
|
headers['X-MCP-Client'] = options.mcpClient;
|
|
53
55
|
}
|
|
56
|
+
if (options?.clientIp) {
|
|
57
|
+
headers['X-MCP-Client-IP'] = options.clientIp;
|
|
58
|
+
}
|
|
54
59
|
if (options?.requestId) {
|
|
55
60
|
headers['X-MCP-Request-ID'] = options.requestId;
|
|
56
61
|
}
|
|
57
62
|
if (options?.toolReasoning) {
|
|
58
63
|
headers['X-MCP-Tool-Reasoning'] = options.toolReasoning;
|
|
59
64
|
}
|
|
65
|
+
if (options?.mcpAcornAuth) {
|
|
66
|
+
if (this.mcpAcornSecret) {
|
|
67
|
+
headers['X-MCP-Acorn-Authorization'] = this.mcpAcornSecret;
|
|
68
|
+
}
|
|
69
|
+
else if (this.transport === 'http') {
|
|
70
|
+
throw new AivenError(500, 'MCP_ACORN_SECRET environment variable is required for PG Editor run-query');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
60
73
|
return headers;
|
|
61
74
|
}
|
|
62
75
|
async get(path, options) {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare const VERSION: string;
|
|
|
4
4
|
export declare const API_ORIGIN: string;
|
|
5
5
|
export declare const API_BASE_URL: string;
|
|
6
6
|
export declare const HOST: string;
|
|
7
|
-
/** HTTP POST /mcp rate limit (per bearer token hash
|
|
7
|
+
/** HTTP POST /mcp rate limit (per bearer token hash). */
|
|
8
8
|
export interface HttpMcpRateLimitConfig {
|
|
9
9
|
windowMs: number;
|
|
10
10
|
limit: number;
|
|
@@ -18,5 +18,7 @@ export declare function parseScopes(raw: string | undefined): {
|
|
|
18
18
|
};
|
|
19
19
|
export declare function parseWriteAllowlist(raw: string | undefined): ReadonlySet<string> | undefined;
|
|
20
20
|
export declare function isMaintenanceMode(): boolean;
|
|
21
|
+
export declare function isExtraProtectionEnabled(): boolean;
|
|
22
|
+
export declare function loadEdgeAuthSecret(): string | undefined;
|
|
21
23
|
export declare function loadConfig(transport?: 'stdio' | 'http'): AivenConfig;
|
|
22
24
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,eAAO,MAAM,OAAO,QAAc,CAAC;AACnC,eAAO,MAAM,UAAU,QAA4D,CAAC;AACpF,eAAO,MAAM,YAAY,QAAqB,CAAC;AAC/C,eAAO,MAAM,IAAI,QAAsD,CAAC;AAExE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,eAAO,MAAM,OAAO,QAAc,CAAC;AACnC,eAAO,MAAM,UAAU,QAA4D,CAAC;AACpF,eAAO,MAAM,YAAY,QAAqB,CAAC;AAC/C,eAAO,MAAM,IAAI,QAAsD,CAAC;AAExE,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AASD,wBAAgB,oBAAoB,IAAI,sBAAsB,CAK7D;AAcD,eAAO,MAAM,YAAY,mBAA4D,CAAC;AAEtF,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,UAAU,EAAE,WAAW,CAAC,eAAe,CAAC,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAiC9E;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAS5F;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAIvD;AAED,wBAAgB,UAAU,CAAC,SAAS,GAAE,OAAO,GAAG,MAAgB,GAAG,WAAW,CAqB7E"}
|
package/dist/config.js
CHANGED
|
@@ -74,6 +74,15 @@ export function parseWriteAllowlist(raw) {
|
|
|
74
74
|
export function isMaintenanceMode() {
|
|
75
75
|
return process.env['MAINTENANCE_MODE'] === 'true';
|
|
76
76
|
}
|
|
77
|
+
export function isExtraProtectionEnabled() {
|
|
78
|
+
return process.env['EXTRA_PROTECTION'] === 'true';
|
|
79
|
+
}
|
|
80
|
+
export function loadEdgeAuthSecret() {
|
|
81
|
+
const raw = process.env['MCP_EDGE_AUTH_SECRET'];
|
|
82
|
+
if (raw === undefined || raw === '')
|
|
83
|
+
return undefined;
|
|
84
|
+
return raw;
|
|
85
|
+
}
|
|
77
86
|
export function loadConfig(transport = 'stdio') {
|
|
78
87
|
const token = process.env['AIVEN_TOKEN'];
|
|
79
88
|
if (!token && transport !== 'http') {
|
|
@@ -87,6 +96,7 @@ export function loadConfig(transport = 'stdio') {
|
|
|
87
96
|
if ('error' in parsed) {
|
|
88
97
|
throw new Error(`AIVEN_SERVICES_SCOPE: ${parsed.error}`);
|
|
89
98
|
}
|
|
90
|
-
|
|
99
|
+
const mcpAcornSecret = process.env['MCP_ACORN_SECRET'];
|
|
100
|
+
return { token, readOnly, transport, categories: parsed.categories, allowSecrets, writeAllowlist, mcpAcornSecret };
|
|
91
101
|
}
|
|
92
102
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAC9D,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,sBAAsB,CAAC;AACpF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,UAAU,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,wBAAwB,CAAC;AAQxE,SAAS,mBAAmB,CAAC,IAAY,EAAE,YAAoB;IAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,YAAY,CAAC;IACzD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,QAAQ,EAAE,mBAAmB,CAAC,+BAA+B,EAAE,MAAM,CAAC;QACtE,KAAK,EAAE,mBAAmB,CAAC,yBAAyB,EAAE,IAAI,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,iBAAiB,GAAoC;IACzD,IAAI,EAAE,eAAe,CAAC,IAAI;IAC1B,EAAE,EAAE,eAAe,CAAC,EAAE;IACtB,KAAK,EAAE,eAAe,CAAC,KAAK;IAC5B,WAAW,EAAE,eAAe,CAAC,WAAW;IACxC,YAAY,EAAE,eAAe,CAAC,YAAY;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAEtF,MAAM,UAAU,WAAW,CACzB,GAAuB;IAEvB,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAExD,MAAM,KAAK,GAAG,GAAG;SACd,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,mCAAmC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACjF,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,qBAAqB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC3F,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB,CAAC;IACvC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,GAAG;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAuB;IACzD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAExC,MAAM,KAAK,GAAG,GAAG;SACd,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,MAAM,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAA8B,OAAO;IAC9D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEzC,IAAI,CAAC,KAAK,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,iDAAiD;YAC/C,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,MAAM,CAAC;IAC3D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,MAAM,CAAC;IACnE,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAEjF,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChE,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Request, Response, NextFunction } from 'express';
|
|
2
|
+
/** Header set by Cloudflare Transform Rules (`X-Edge-Auth`); compared to `MCP_EDGE_AUTH_SECRET`. */
|
|
3
|
+
export declare const EDGE_AUTH_HEADER = "x-edge-auth";
|
|
4
|
+
/** Min interval between misconfig warnings while rejections continue. */
|
|
5
|
+
export declare const EDGE_AUTH_MISCONFIG_WARN_COOLDOWN_MS: number;
|
|
6
|
+
/** Resets deduped misconfig warning state (for tests). */
|
|
7
|
+
export declare function resetEdgeAuthMisconfigWarnCooldown(): void;
|
|
8
|
+
export declare function hasValidEdgeAuth(req: Request, expectedSecret: string): boolean;
|
|
9
|
+
export declare function createEdgeAuthMiddleware(extraProtection: boolean, edgeAuthSecret: string | undefined): (req: Request, res: Response, next: NextFunction) => void;
|
|
10
|
+
//# sourceMappingURL=edge-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-auth.d.ts","sourceRoot":"","sources":["../src/edge-auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/D,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAE9C,yEAAyE;AACzE,eAAO,MAAM,oCAAoC,QAAiB,CAAC;AAInE,0DAA0D;AAC1D,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AA2BD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAI9E;AAED,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,OAAO,EACxB,cAAc,EAAE,MAAM,GAAG,SAAS,IAE1B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAiB/D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { timingSafeEqual } from 'node:crypto';
|
|
2
|
+
/** Header set by Cloudflare Transform Rules (`X-Edge-Auth`); compared to `MCP_EDGE_AUTH_SECRET`. */
|
|
3
|
+
export const EDGE_AUTH_HEADER = 'x-edge-auth';
|
|
4
|
+
/** Min interval between misconfig warnings while rejections continue. */
|
|
5
|
+
export const EDGE_AUTH_MISCONFIG_WARN_COOLDOWN_MS = 15 * 60 * 1000;
|
|
6
|
+
let lastMisconfigWarnAt = 0;
|
|
7
|
+
/** Resets deduped misconfig warning state (for tests). */
|
|
8
|
+
export function resetEdgeAuthMisconfigWarnCooldown() {
|
|
9
|
+
lastMisconfigWarnAt = 0;
|
|
10
|
+
}
|
|
11
|
+
function secureCompare(provided, expected) {
|
|
12
|
+
const a = Buffer.from(provided);
|
|
13
|
+
const b = Buffer.from(expected);
|
|
14
|
+
if (a.length !== b.length)
|
|
15
|
+
return false;
|
|
16
|
+
return timingSafeEqual(a, b);
|
|
17
|
+
}
|
|
18
|
+
function shouldLogMisconfigWarn(now) {
|
|
19
|
+
return (lastMisconfigWarnAt === 0 || now - lastMisconfigWarnAt >= EDGE_AUTH_MISCONFIG_WARN_COOLDOWN_MS);
|
|
20
|
+
}
|
|
21
|
+
function logEdgeAuthMisconfig(req) {
|
|
22
|
+
const now = Date.now();
|
|
23
|
+
if (!shouldLogMisconfigWarn(now))
|
|
24
|
+
return;
|
|
25
|
+
lastMisconfigWarnAt = now;
|
|
26
|
+
console.warn(`mcp-aiven: EXTRA_PROTECTION is enabled but X-Edge-Auth is missing or invalid — ` +
|
|
27
|
+
`verify MCP_EDGE_AUTH_SECRET matches the Cloudflare Transform Rule (${req.method} ${req.path}); ` +
|
|
28
|
+
`further warnings suppressed for ${String(EDGE_AUTH_MISCONFIG_WARN_COOLDOWN_MS / 60_000)}m`);
|
|
29
|
+
}
|
|
30
|
+
export function hasValidEdgeAuth(req, expectedSecret) {
|
|
31
|
+
const header = req.headers[EDGE_AUTH_HEADER];
|
|
32
|
+
if (typeof header !== 'string' || header.length === 0)
|
|
33
|
+
return false;
|
|
34
|
+
return secureCompare(header, expectedSecret);
|
|
35
|
+
}
|
|
36
|
+
export function createEdgeAuthMiddleware(extraProtection, edgeAuthSecret) {
|
|
37
|
+
return (req, res, next) => {
|
|
38
|
+
if (!extraProtection) {
|
|
39
|
+
next();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (req.method === 'GET' && req.path === '/health') {
|
|
43
|
+
next();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (!edgeAuthSecret || !hasValidEdgeAuth(req, edgeAuthSecret)) {
|
|
47
|
+
logEdgeAuthMisconfig(req);
|
|
48
|
+
res.status(403).json({ error: 'Forbidden' });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
lastMisconfigWarnAt = 0;
|
|
52
|
+
next();
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=edge-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-auth.js","sourceRoot":"","sources":["../src/edge-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,oGAAoG;AACpG,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAE9C,yEAAyE;AACzE,MAAM,CAAC,MAAM,oCAAoC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnE,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B,0DAA0D;AAC1D,MAAM,UAAU,kCAAkC;IAChD,mBAAmB,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,QAAgB;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW;IACzC,OAAO,CACL,mBAAmB,KAAK,CAAC,IAAI,GAAG,GAAG,mBAAmB,IAAI,oCAAoC,CAC/F,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAY;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;QAAE,OAAO;IAEzC,mBAAmB,GAAG,GAAG,CAAC;IAC1B,OAAO,CAAC,IAAI,CACV,iFAAiF;QAC/E,sEAAsE,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK;QACjG,mCAAmC,MAAM,CAAC,oCAAoC,GAAG,MAAM,CAAC,GAAG,CAC9F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAY,EAAE,cAAsB;IACnE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,OAAO,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,eAAwB,EACxB,cAAkC;IAElC,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnD,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,CAAC,cAAc,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC;YAC9D,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,mBAAmB,GAAG,CAAC,CAAC;QACxB,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -24690,6 +24690,20 @@ export interface components {
|
|
|
24690
24690
|
* @enum {string}
|
|
24691
24691
|
*/
|
|
24692
24692
|
phase: "prepare" | "basebackup" | "basebackup_prepare" | "stream" | "finalize";
|
|
24693
|
+
/**
|
|
24694
|
+
* Restore chain position
|
|
24695
|
+
* @description Position in the backup chain being restored. May be missing.
|
|
24696
|
+
*/
|
|
24697
|
+
position?: {
|
|
24698
|
+
/** @description Whether the backup currently being restored is an incremental one */
|
|
24699
|
+
backup_incremental: boolean;
|
|
24700
|
+
/** @description Name of the backup currently being restored, matching the name in the service backup list */
|
|
24701
|
+
backup_name: string;
|
|
24702
|
+
/** @description 1-based position of the backup currently being restored within the restore chain */
|
|
24703
|
+
chain_index: number;
|
|
24704
|
+
/** @description Total number of backups in the restore chain */
|
|
24705
|
+
chain_total: number;
|
|
24706
|
+
};
|
|
24693
24707
|
/**
|
|
24694
24708
|
* @description Unit for current/min/max values. New units may be added. If null should be treated as generic unit
|
|
24695
24709
|
* @enum {string}
|
|
@@ -25338,6 +25352,20 @@ export interface components {
|
|
|
25338
25352
|
* @enum {string}
|
|
25339
25353
|
*/
|
|
25340
25354
|
phase: "prepare" | "basebackup" | "basebackup_prepare" | "stream" | "finalize";
|
|
25355
|
+
/**
|
|
25356
|
+
* Restore chain position
|
|
25357
|
+
* @description Position in the backup chain being restored. May be missing.
|
|
25358
|
+
*/
|
|
25359
|
+
position?: {
|
|
25360
|
+
/** @description Whether the backup currently being restored is an incremental one */
|
|
25361
|
+
backup_incremental: boolean;
|
|
25362
|
+
/** @description Name of the backup currently being restored, matching the name in the service backup list */
|
|
25363
|
+
backup_name: string;
|
|
25364
|
+
/** @description 1-based position of the backup currently being restored within the restore chain */
|
|
25365
|
+
chain_index: number;
|
|
25366
|
+
/** @description Total number of backups in the restore chain */
|
|
25367
|
+
chain_total: number;
|
|
25368
|
+
};
|
|
25341
25369
|
/**
|
|
25342
25370
|
* @description Unit for current/min/max values. New units may be added. If null should be treated as generic unit
|
|
25343
25371
|
* @enum {string}
|
|
@@ -25893,6 +25921,20 @@ export interface components {
|
|
|
25893
25921
|
* @enum {string}
|
|
25894
25922
|
*/
|
|
25895
25923
|
phase: "prepare" | "basebackup" | "basebackup_prepare" | "stream" | "finalize";
|
|
25924
|
+
/**
|
|
25925
|
+
* Restore chain position
|
|
25926
|
+
* @description Position in the backup chain being restored. May be missing.
|
|
25927
|
+
*/
|
|
25928
|
+
position?: {
|
|
25929
|
+
/** @description Whether the backup currently being restored is an incremental one */
|
|
25930
|
+
backup_incremental: boolean;
|
|
25931
|
+
/** @description Name of the backup currently being restored, matching the name in the service backup list */
|
|
25932
|
+
backup_name: string;
|
|
25933
|
+
/** @description 1-based position of the backup currently being restored within the restore chain */
|
|
25934
|
+
chain_index: number;
|
|
25935
|
+
/** @description Total number of backups in the restore chain */
|
|
25936
|
+
chain_total: number;
|
|
25937
|
+
};
|
|
25896
25938
|
/**
|
|
25897
25939
|
* @description Unit for current/min/max values. New units may be added. If null should be treated as generic unit
|
|
25898
25940
|
* @enum {string}
|
|
@@ -27083,6 +27125,20 @@ export interface components {
|
|
|
27083
27125
|
* @enum {string}
|
|
27084
27126
|
*/
|
|
27085
27127
|
phase: "prepare" | "basebackup" | "basebackup_prepare" | "stream" | "finalize";
|
|
27128
|
+
/**
|
|
27129
|
+
* Restore chain position
|
|
27130
|
+
* @description Position in the backup chain being restored. May be missing.
|
|
27131
|
+
*/
|
|
27132
|
+
position?: {
|
|
27133
|
+
/** @description Whether the backup currently being restored is an incremental one */
|
|
27134
|
+
backup_incremental: boolean;
|
|
27135
|
+
/** @description Name of the backup currently being restored, matching the name in the service backup list */
|
|
27136
|
+
backup_name: string;
|
|
27137
|
+
/** @description 1-based position of the backup currently being restored within the restore chain */
|
|
27138
|
+
chain_index: number;
|
|
27139
|
+
/** @description Total number of backups in the restore chain */
|
|
27140
|
+
chain_total: number;
|
|
27141
|
+
};
|
|
27086
27142
|
/**
|
|
27087
27143
|
* @description Unit for current/min/max values. New units may be added. If null should be treated as generic unit
|
|
27088
27144
|
* @enum {string}
|
|
@@ -27747,6 +27803,20 @@ export interface components {
|
|
|
27747
27803
|
* @enum {string}
|
|
27748
27804
|
*/
|
|
27749
27805
|
phase: "prepare" | "basebackup" | "basebackup_prepare" | "stream" | "finalize";
|
|
27806
|
+
/**
|
|
27807
|
+
* Restore chain position
|
|
27808
|
+
* @description Position in the backup chain being restored. May be missing.
|
|
27809
|
+
*/
|
|
27810
|
+
position?: {
|
|
27811
|
+
/** @description Whether the backup currently being restored is an incremental one */
|
|
27812
|
+
backup_incremental: boolean;
|
|
27813
|
+
/** @description Name of the backup currently being restored, matching the name in the service backup list */
|
|
27814
|
+
backup_name: string;
|
|
27815
|
+
/** @description 1-based position of the backup currently being restored within the restore chain */
|
|
27816
|
+
chain_index: number;
|
|
27817
|
+
/** @description Total number of backups in the restore chain */
|
|
27818
|
+
chain_total: number;
|
|
27819
|
+
};
|
|
27750
27820
|
/**
|
|
27751
27821
|
* @description Unit for current/min/max values. New units may be added. If null should be treated as generic unit
|
|
27752
27822
|
* @enum {string}
|
|
@@ -28421,6 +28491,20 @@ export interface components {
|
|
|
28421
28491
|
* @enum {string}
|
|
28422
28492
|
*/
|
|
28423
28493
|
phase: "prepare" | "basebackup" | "basebackup_prepare" | "stream" | "finalize";
|
|
28494
|
+
/**
|
|
28495
|
+
* Restore chain position
|
|
28496
|
+
* @description Position in the backup chain being restored. May be missing.
|
|
28497
|
+
*/
|
|
28498
|
+
position?: {
|
|
28499
|
+
/** @description Whether the backup currently being restored is an incremental one */
|
|
28500
|
+
backup_incremental: boolean;
|
|
28501
|
+
/** @description Name of the backup currently being restored, matching the name in the service backup list */
|
|
28502
|
+
backup_name: string;
|
|
28503
|
+
/** @description 1-based position of the backup currently being restored within the restore chain */
|
|
28504
|
+
chain_index: number;
|
|
28505
|
+
/** @description Total number of backups in the restore chain */
|
|
28506
|
+
chain_total: number;
|
|
28507
|
+
};
|
|
28424
28508
|
/**
|
|
28425
28509
|
* @description Unit for current/min/max values. New units may be added. If null should be treated as generic unit
|
|
28426
28510
|
* @enum {string}
|
|
@@ -28918,6 +29002,20 @@ export interface components {
|
|
|
28918
29002
|
* @enum {string}
|
|
28919
29003
|
*/
|
|
28920
29004
|
phase: "prepare" | "basebackup" | "basebackup_prepare" | "stream" | "finalize";
|
|
29005
|
+
/**
|
|
29006
|
+
* Restore chain position
|
|
29007
|
+
* @description Position in the backup chain being restored. May be missing.
|
|
29008
|
+
*/
|
|
29009
|
+
position?: {
|
|
29010
|
+
/** @description Whether the backup currently being restored is an incremental one */
|
|
29011
|
+
backup_incremental: boolean;
|
|
29012
|
+
/** @description Name of the backup currently being restored, matching the name in the service backup list */
|
|
29013
|
+
backup_name: string;
|
|
29014
|
+
/** @description 1-based position of the backup currently being restored within the restore chain */
|
|
29015
|
+
chain_index: number;
|
|
29016
|
+
/** @description Total number of backups in the restore chain */
|
|
29017
|
+
chain_total: number;
|
|
29018
|
+
};
|
|
28921
29019
|
/**
|
|
28922
29020
|
* @description Unit for current/min/max values. New units may be added. If null should be treated as generic unit
|
|
28923
29021
|
* @enum {string}
|