@blen/fedreg-mcp-server 2.0.8 → 2.0.10
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 +13 -1
- package/README.md +2 -0
- package/dist/bin.js +18 -2
- package/dist/bin.js.map +1 -1
- package/dist/sdk/bindings.js +1 -1
- package/dist/sdk/bindings.js.map +1 -1
- package/dist/sdk/ecfr-client.d.ts.map +1 -1
- package/dist/sdk/ecfr-client.js +5 -1
- package/dist/sdk/ecfr-client.js.map +1 -1
- package/dist/server/http.d.ts +6 -0
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +2 -2
- package/dist/server/http.js.map +1 -1
- package/dist/server/ipRateLimiter.d.ts +11 -0
- package/dist/server/ipRateLimiter.d.ts.map +1 -1
- package/dist/server/ipRateLimiter.js +32 -1
- package/dist/server/ipRateLimiter.js.map +1 -1
- package/dist/server/mcpServer.js +1 -1
- package/dist/server/mcpServer.js.map +1 -1
- package/dist/util/httpClient.d.ts.map +1 -1
- package/dist/util/httpClient.js +12 -3
- package/dist/util/httpClient.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -14,6 +14,16 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
## [2.0.10] - 2026-10-13
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
- key the per-IP rate limit on the real client behind proxies (#8) (http)
|
|
23
|
+
## [2.0.9] - 2026-10-08
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
- request and decode gzip full-text responses (ecfr)
|
|
17
27
|
## [2.0.8] - 2026-09-23
|
|
18
28
|
|
|
19
29
|
### Changed
|
|
@@ -185,7 +195,9 @@ Initial public release.
|
|
|
185
195
|
→ notifications/initialized → tools/list → tools/call → sandbox → SDK
|
|
186
196
|
→ mocked upstream).
|
|
187
197
|
|
|
188
|
-
[Unreleased]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.
|
|
198
|
+
[Unreleased]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.10...HEAD
|
|
199
|
+
[2.0.10]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.9...v2.0.10
|
|
200
|
+
[2.0.9]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.8...v2.0.9
|
|
189
201
|
[2.0.8]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.7...v2.0.8
|
|
190
202
|
[2.0.7]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.6...v2.0.7
|
|
191
203
|
[2.0.6]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.5...v2.0.6
|
package/README.md
CHANGED
|
@@ -190,6 +190,8 @@ The most common knobs (full list and defaults in [`.env.example`](./.env.example
|
|
|
190
190
|
| `FEDREG_REGS_SUBJECT_RATE_PER_HOUR` | `500` | Per-subject regs calls/hour (HTTP mode only; skipped on stdio; one shared `anonymous` bucket under `--insecure`). Must be ≥ 1. |
|
|
191
191
|
| `FEDREG_AUTH_PROVIDER` | `none` | `none` / `embedded` / `generic-oidc` / `clerk` / `workos` / `auth0` |
|
|
192
192
|
| `FEDREG_PUBLIC_ORIGIN` | — | Public origin clients reach (used in OAuth metadata). |
|
|
193
|
+
| `FEDREG_IP_RPS` / `FEDREG_IP_BURST` | `5` / `20` | Per-IP token bucket on the HTTP transport. |
|
|
194
|
+
| `FEDREG_CLIENT_IP_HEADER` | unset | Header your reverse proxy overwrites with the client address (Railway: `x-real-ip`). Required behind a proxy for the per-IP limit to see real clients. |
|
|
193
195
|
| `FEDREG_SUBJECT_DAILY_QUOTA` | `10000` | Requests per authenticated subject per UTC day. |
|
|
194
196
|
|
|
195
197
|
CLI options: `--http`, `--port`, `--host`, `--sandbox auto|isolate|deno`, `--insecure`, `--help`.
|
package/dist/bin.js
CHANGED
|
@@ -42,6 +42,11 @@ function printHelp() {
|
|
|
42
42
|
-h, --help Show this help
|
|
43
43
|
`);
|
|
44
44
|
}
|
|
45
|
+
/** A positive number (and at least `min`) from the environment, or `fallback` when unset or invalid. */
|
|
46
|
+
function positive(value, fallback, min = 0) {
|
|
47
|
+
const n = Number(value ?? fallback);
|
|
48
|
+
return Number.isFinite(n) && n > 0 && n >= min ? n : fallback;
|
|
49
|
+
}
|
|
45
50
|
async function main() {
|
|
46
51
|
const args = parseArgs(process.argv.slice(2));
|
|
47
52
|
const deps = await buildSupervisor({
|
|
@@ -82,8 +87,19 @@ async function main() {
|
|
|
82
87
|
handle = await startHttp(deps, {
|
|
83
88
|
port: args.port,
|
|
84
89
|
host: args.host,
|
|
85
|
-
rps
|
|
86
|
-
burst
|
|
90
|
+
// rps must be > 0 (a NaN or non-positive rate makes the bucket arithmetic meaningless);
|
|
91
|
+
// burst must be >= 1, since a bucket that can never hold a whole token rejects everything.
|
|
92
|
+
rps: positive(process.env.FEDREG_IP_RPS, 5),
|
|
93
|
+
burst: positive(process.env.FEDREG_IP_BURST, 20, 1),
|
|
94
|
+
clientIpHeader: (() => {
|
|
95
|
+
const name = process.env.FEDREG_CLIENT_IP_HEADER?.trim().toLowerCase();
|
|
96
|
+
if (!name)
|
|
97
|
+
return undefined;
|
|
98
|
+
if (/^[a-z0-9-]+$/.test(name))
|
|
99
|
+
return name;
|
|
100
|
+
log.warn('config.invalid_client_ip_header', { header: name });
|
|
101
|
+
return undefined;
|
|
102
|
+
})(),
|
|
87
103
|
subjectDailyQuota: Number(process.env.FEDREG_SUBJECT_DAILY_QUOTA ?? 10_000),
|
|
88
104
|
insecure: args.insecure,
|
|
89
105
|
allowedHosts,
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/bindings.js
CHANGED
|
@@ -13,7 +13,7 @@ export function buildSdk(cfg) {
|
|
|
13
13
|
methods: Object.freeze(methods),
|
|
14
14
|
meta: sources.map(({ name, label, enabled, disabledReason }) => ({ name, label, enabled, disabledReason })),
|
|
15
15
|
registeredNames: sources.map(s => s.name),
|
|
16
|
-
version: () => '2.0.
|
|
16
|
+
version: () => '2.0.10', // x-release-version
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=bindings.js.map
|
package/dist/sdk/bindings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/sdk/bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,MAAM,oBAAoB,CAAC;AAWnE,MAAM,UAAU,QAAQ,CAAC,GAAiB;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAA+B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChE,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAC3B,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QAC9B,CAAC;IACD,OAAO;QACL,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QAC3G,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,OAAO,EAAE,GAAG,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/sdk/bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,MAAM,oBAAoB,CAAC;AAWnE,MAAM,UAAU,QAAQ,CAAC,GAAiB;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,MAAM,OAAO,GAA+B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChE,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAC3B,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QAC9B,CAAC;IACD,OAAO;QACL,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QAC3G,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,oBAAoB;KAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecfr-client.d.ts","sourceRoot":"","sources":["../../src/sdk/ecfr-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACzD;AAED,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,KAAK;;8BAEmB;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;SAAE;uCAEvD,MAAM,UAAU;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE;MAEhE;IAEF,MAAM;;MAEJ;IAEF,SAAS,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,sBAC0C;IAElF,QAAQ,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,sBACQ;IAExF,QAAQ,GAAI,OAAO,MAAM,EAAE,QAAQ;QAAE,UAAU,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,sBACd;IAEtG,wFAAwF;IACxF,IAAI,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"ecfr-client.d.ts","sourceRoot":"","sources":["../../src/sdk/ecfr-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACzD;AAED,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,KAAK;;8BAEmB;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;SAAE;uCAEvD,MAAM,UAAU;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE;MAEhE;IAEF,MAAM;;MAEJ;IAEF,SAAS,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,sBAC0C;IAElF,QAAQ,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,sBACQ;IAExF,QAAQ,GAAI,OAAO,MAAM,EAAE,QAAQ;QAAE,UAAU,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,sBACd;IAEtG,wFAAwF;IACxF,IAAI,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,qBAKvE;IAEL,MAAM;0BACc,gBAAgB;+BAEX,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,cAAc,GAAG,WAAW,CAAC;gCAE7D,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,cAAc,GAAG,WAAW,CAAC;mCAE3D,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,cAAc,GAAG,WAAW,CAAC;8BAEnE,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC;MAErD;CACH"}
|
package/dist/sdk/ecfr-client.js
CHANGED
|
@@ -15,7 +15,11 @@ export class EcfrClient {
|
|
|
15
15
|
ancestry = (date, title, query) => this.http.call({ path: `/versioner/v1/ancestry/${date}/title-${title}.json`, query });
|
|
16
16
|
versions = (title, query) => this.http.call({ path: `/versioner/v1/versions/title-${title}.json`, query: flatten(query ?? {}) });
|
|
17
17
|
/** Returns XML as a string. Large for whole titles; prefer structure/ancestry first. */
|
|
18
|
-
full = (date, title, query) => this.http.call({
|
|
18
|
+
full = (date, title, query) => this.http.call({
|
|
19
|
+
path: `/versioner/v1/full/${date}/title-${title}.xml`, query, accept: 'xml',
|
|
20
|
+
// eCFR requires compression for its full-text endpoint.
|
|
21
|
+
headers: { 'accept-encoding': 'gzip' },
|
|
22
|
+
});
|
|
19
23
|
search = {
|
|
20
24
|
results: (params) => this.http.call({ path: '/search/v1/results', query: flatten(params) }),
|
|
21
25
|
counts_daily: (params) => this.http.call({ path: '/search/v1/counts/daily', query: flatten(params) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecfr-client.js","sourceRoot":"","sources":["../../src/sdk/ecfr-client.ts"],"names":[],"mappings":"AAyBA,MAAM,OAAO,UAAU;IACQ;IAA7B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,KAAK,GAAG;QACN,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;QACnE,WAAW,EAAE,CAAC,KAAwE,EAAE,EAAE,CACxF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACrF,qBAAqB,EAAE,CAAC,KAAa,EAAE,KAAyB,EAAE,EAAE,CAClE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,+BAA+B,KAAK,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;KACrG,CAAC;IAEF,MAAM,GAAG;QACP,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;KAClE,CAAC;IAEF,SAAS,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE,CAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,2BAA2B,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC;IAElF,QAAQ,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,KAAuC,EAAE,EAAE,CAClF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,0BAA0B,IAAI,UAAU,KAAK,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAExF,QAAQ,GAAG,CAAC,KAAa,EAAE,KAAyF,EAAE,EAAE,CACtH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gCAAgC,KAAK,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAEtG,wFAAwF;IACxF,IAAI,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,KAAuC,EAAE,EAAE,CAC9E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAS,
|
|
1
|
+
{"version":3,"file":"ecfr-client.js","sourceRoot":"","sources":["../../src/sdk/ecfr-client.ts"],"names":[],"mappings":"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"}
|
package/dist/server/http.d.ts
CHANGED
|
@@ -5,6 +5,12 @@ export interface HttpOptions {
|
|
|
5
5
|
host: string;
|
|
6
6
|
rps: number;
|
|
7
7
|
burst: number;
|
|
8
|
+
/**
|
|
9
|
+
* Header a reverse proxy in front of this server overwrites with the client address
|
|
10
|
+
* (Railway: `x-real-ip`). Unset keys the per-IP limit on the TCP peer, which behind a
|
|
11
|
+
* proxy is the proxy, not the client.
|
|
12
|
+
*/
|
|
13
|
+
clientIpHeader?: string;
|
|
8
14
|
subjectDailyQuota: number;
|
|
9
15
|
auth: AuthConfig;
|
|
10
16
|
insecure?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAK5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAmDD,wBAAsB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmIzF"}
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAK5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAmDD,wBAAsB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmIzF"}
|
package/dist/server/http.js
CHANGED
|
@@ -2,7 +2,7 @@ import { createServer } from 'node:http';
|
|
|
2
2
|
import { createMcpHandler } from '@modelcontextprotocol/server';
|
|
3
3
|
import { toNodeHandler } from '@modelcontextprotocol/node';
|
|
4
4
|
import { buildMcpServer, MCP_PROTOCOL_VERSION } from './mcpServer.js';
|
|
5
|
-
import { IpRateLimiter } from './ipRateLimiter.js';
|
|
5
|
+
import { IpRateLimiter, clientIp } from './ipRateLimiter.js';
|
|
6
6
|
import { SubjectQuota } from '../util/quotas.js';
|
|
7
7
|
import { buildVerifier } from './authz.js';
|
|
8
8
|
import { oauthProtectedResource } from './wellKnown.js';
|
|
@@ -75,7 +75,7 @@ export async function startHttp(deps, opts) {
|
|
|
75
75
|
});
|
|
76
76
|
const server = createServer(async (req, res) => {
|
|
77
77
|
try {
|
|
78
|
-
const ip = (req
|
|
78
|
+
const ip = clientIp(req, opts.clientIpHeader);
|
|
79
79
|
if (!limiter.allow(ip))
|
|
80
80
|
return reply(res, 429, { error: 'rate_limited' });
|
|
81
81
|
// DNS rebinding protection: validate Host header against allowlist when provided.
|
package/dist/server/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAyC,MAAM,8BAA8B,CAAC;AACvG,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAyC,MAAM,8BAA8B,CAAC;AACvG,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAmCxC,MAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,MAAM,sBAAsB,GAAG,2CAA2C,CAAC;AAE3E,kFAAkF;AAClF,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,2FAA2F;AAC3F,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC,SAAS,QAAQ,CAAC,OAAe;IAC/B,OAAO,OAAO,CAAC,MAAM,GAAG,sBAAsB;QAC5C,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,cAAc;QAC3D,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,oFAAoF;AACpF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAE/E,SAAS,aAAa,CAAC,YAAoB,EAAE,SAAiB,EAAE,SAAmB;IACjF,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,KAAK,KAAK,SAAS,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,uDAAuD;IACvE,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAsB;IACvC,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,aAAa,CAAC,MAAkB;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IACrF,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAiB,EAAE,IAAiB;IAClE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAEvD,yFAAyF;IACzF,0FAA0F;IAC1F,4FAA4F;IAC5F,MAAM,UAAU,GAAG,gBAAgB,CACjC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAC1D;QACE,MAAM,EAAE,WAAW;QACnB,+EAA+E;QAC/E,oFAAoF;QACpF,sFAAsF;QACtF,4EAA4E;QAC5E,gBAAgB,EAAE,CAAC;QACnB,wFAAwF;QACxF,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;KACpF,CACF,CAAC;IACF,MAAM,WAAW,GAAG,aAAa,CAAC,UAAU,EAAE;QAC5C,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;KACpF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;QAC9E,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;YAE1E,kFAAkF;YAClF,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC1D,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtC,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;YAE5C,IAAI,GAAG,CAAC,QAAQ,KAAK,sBAAsB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACpE,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpF,CAAC;YAED,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACvD,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAC1G,CAAC;YAED,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9B,6EAA6E;gBAC7E,6EAA6E;gBAC7E,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBACxC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;oBACxG,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;gBAChF,CAAC;gBAED,kFAAkF;gBAClF,8EAA8E;gBAC9E,IAAI,OAAO,GAAG,WAAW,CAAC;gBAC1B,IAAI,KAAK,GAAG,EAAE,CAAC;gBACf,IAAI,MAAM,GAAa,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACnB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;oBACvC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBACjC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;4BACjB,cAAc,EAAE,kBAAkB;4BAClC,kBAAkB,EAAE,6BAA6B,MAAM,GAAG,sBAAsB,GAAG;yBACpF,CAAC,CAAC;wBACH,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;oBAC5D,CAAC;oBACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACzC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;wBACtB,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACrC,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;4BACjB,cAAc,EAAE,kBAAkB;4BAClC,kBAAkB,EAAE,6BAA6B,MAAM,GAAG,sBAAsB,0BAA0B;yBAC3G,CAAC,CAAC;wBACH,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC7F,CAAC;oBACD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACjC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;wBACf,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;gBAED,6EAA6E;gBAC7E,MAAM,QAAQ,GAAa;oBACzB,KAAK;oBACL,QAAQ,EAAE,OAAO;oBACjB,MAAM;oBACN,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE;iBAClC,CAAC;gBACD,GAA6C,CAAC,IAAI,GAAG,QAAQ,CAAC;gBAE/D,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAG,GAAa,CAAC,OAAO,EAAE,KAAK,EAAG,GAAa,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9F,IAAI,CAAC,GAAG,CAAC,WAAW;gBAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5E,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU;QACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;QAChC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;QACxB,eAAe,EAAE,oBAAoB;KACtC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,qFAAqF;YACrF,sFAAsF;YACtF,sFAAsF;YACtF,wDAAwD;YACxD,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,GAAmB,EAAE,MAAc,EAAE,IAAa;IAC/D,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'node:http';
|
|
1
2
|
/**
|
|
2
3
|
* Token-bucket IP rate limiter. In-memory; one process.
|
|
3
4
|
*/
|
|
@@ -8,4 +9,14 @@ export declare class IpRateLimiter {
|
|
|
8
9
|
constructor(rps: number, burst: number);
|
|
9
10
|
allow(ip: string): boolean;
|
|
10
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* The caller's address. Without `trustedHeader` it is the TCP peer. Behind a reverse proxy
|
|
14
|
+
* the peer is the proxy (on Railway, a different internal 100.64.x.x address per
|
|
15
|
+
* connection), so name the header the proxy sets to the client address and that header is
|
|
16
|
+
* used instead. Only name a header the proxy always overwrites: a client could otherwise
|
|
17
|
+
* forge it. Railway overwrites `x-real-ip` (verified 2026-10-13; it also rebuilds
|
|
18
|
+
* X-Forwarded-For as "<client>, <edge>", so that header's rightmost entry is NOT the client).
|
|
19
|
+
* For a list-valued header the rightmost entry, the one the nearest proxy added, is used.
|
|
20
|
+
*/
|
|
21
|
+
export declare function clientIp(req: IncomingMessage, trustedHeader?: string): string;
|
|
11
22
|
//# sourceMappingURL=ipRateLimiter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipRateLimiter.d.ts","sourceRoot":"","sources":["../../src/server/ipRateLimiter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,aAAa;IAEZ,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,KAAK;IADhE,OAAO,CAAC,QAAQ,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"ipRateLimiter.d.ts","sourceRoot":"","sources":["../../src/server/ipRateLimiter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGjD;;GAEG;AACH,qBAAa,aAAa;IAEZ,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,KAAK;IADhE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0D;gBACrD,GAAG,EAAE,MAAM,EAAmB,KAAK,EAAE,MAAM;IAWxE,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAc3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ7E"}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
+
import { LRUCache } from 'lru-cache';
|
|
1
2
|
/**
|
|
2
3
|
* Token-bucket IP rate limiter. In-memory; one process.
|
|
3
4
|
*/
|
|
4
5
|
export class IpRateLimiter {
|
|
5
6
|
rps;
|
|
6
7
|
burst;
|
|
7
|
-
buckets
|
|
8
|
+
buckets;
|
|
8
9
|
constructor(rps, burst) {
|
|
9
10
|
this.rps = rps;
|
|
10
11
|
this.burst = burst;
|
|
12
|
+
// An idle bucket refills to `burst` within burst/rps seconds; after that it is
|
|
13
|
+
// indistinguishable from a new one, so it can be dropped. Bounded so a flood of
|
|
14
|
+
// distinct addresses cannot grow memory without limit.
|
|
15
|
+
// Clamped to a finite integer: lru-cache throws on a non-integer or infinite ttl, which
|
|
16
|
+
// rps = 0 or an extreme burst/rps ratio would otherwise produce.
|
|
17
|
+
const refillMs = Math.ceil((burst / rps) * 1000);
|
|
18
|
+
const ttl = Number.isFinite(refillMs) ? Math.min(Math.max(refillMs, 1000), Number.MAX_SAFE_INTEGER) : Number.MAX_SAFE_INTEGER;
|
|
19
|
+
this.buckets = new LRUCache({ max: 50_000, ttl });
|
|
11
20
|
}
|
|
12
21
|
allow(ip) {
|
|
13
22
|
const now = Date.now();
|
|
@@ -24,4 +33,26 @@ export class IpRateLimiter {
|
|
|
24
33
|
return true;
|
|
25
34
|
}
|
|
26
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* The caller's address. Without `trustedHeader` it is the TCP peer. Behind a reverse proxy
|
|
38
|
+
* the peer is the proxy (on Railway, a different internal 100.64.x.x address per
|
|
39
|
+
* connection), so name the header the proxy sets to the client address and that header is
|
|
40
|
+
* used instead. Only name a header the proxy always overwrites: a client could otherwise
|
|
41
|
+
* forge it. Railway overwrites `x-real-ip` (verified 2026-10-13; it also rebuilds
|
|
42
|
+
* X-Forwarded-For as "<client>, <edge>", so that header's rightmost entry is NOT the client).
|
|
43
|
+
* For a list-valued header the rightmost entry, the one the nearest proxy added, is used.
|
|
44
|
+
*/
|
|
45
|
+
export function clientIp(req, trustedHeader) {
|
|
46
|
+
const peer = normalize(req.socket.remoteAddress ?? 'unknown');
|
|
47
|
+
if (!trustedHeader)
|
|
48
|
+
return peer;
|
|
49
|
+
const value = req.headers[trustedHeader.toLowerCase()];
|
|
50
|
+
const entries = (Array.isArray(value) ? value.join(',') : value ?? '')
|
|
51
|
+
.split(',').map(s => s.trim()).filter(Boolean);
|
|
52
|
+
const candidate = entries[entries.length - 1];
|
|
53
|
+
return candidate ? normalize(candidate) : peer;
|
|
54
|
+
}
|
|
55
|
+
function normalize(ip) {
|
|
56
|
+
return ip.replace(/^::ffff:/, '');
|
|
57
|
+
}
|
|
27
58
|
//# sourceMappingURL=ipRateLimiter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipRateLimiter.js","sourceRoot":"","sources":["../../src/server/ipRateLimiter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ipRateLimiter.js","sourceRoot":"","sources":["../../src/server/ipRateLimiter.ts"],"names":[],"mappings":"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"}
|
package/dist/server/mcpServer.js
CHANGED
|
@@ -34,7 +34,7 @@ function cachedInputSchema(name, jsonSchema) {
|
|
|
34
34
|
return converted;
|
|
35
35
|
}
|
|
36
36
|
export function buildMcpServer(deps, requestCtx) {
|
|
37
|
-
const server = new McpServer({ name: 'fedreg-mcp-server', version: '2.0.
|
|
37
|
+
const server = new McpServer({ name: 'fedreg-mcp-server', version: '2.0.10' }, // x-release-version
|
|
38
38
|
{
|
|
39
39
|
capabilities: { tools: {} },
|
|
40
40
|
cacheHints: { 'tools/list': LIST_CACHE_HINT, 'server/discover': LIST_CACHE_HINT },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpServer.js","sourceRoot":"","sources":["../../src/server/mcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAuB,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAoB,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,wFAAwF;AACxF,sFAAsF;AACtF,MAAM,eAAe,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAiB,EAAE,CAAC;AAE1E;;;;;;;;;GASG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA6C,CAAC;AAE9E,SAAS,iBAAiB,CAAC,IAAY,EAAE,UAAmB;IAC1D,IAAI,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,cAAc,CAAC,UAA4B,CAAC,CAAC;QACzD,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAiB,EAAE,UAAuB;IACvE,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"mcpServer.js","sourceRoot":"","sources":["../../src/server/mcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAuB,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAoB,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,wFAAwF;AACxF,sFAAsF;AACtF,MAAM,eAAe,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAiB,EAAE,CAAC;AAE1E;;;;;;;;;GASG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA6C,CAAC;AAE9E,SAAS,iBAAiB,CAAC,IAAY,EAAE,UAAmB;IAC1D,IAAI,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,cAAc,CAAC,UAA4B,CAAC,CAAC;QACzD,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAiB,EAAE,UAAuB;IACvE,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,oBAAoB;IACtE;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,UAAU,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE;KAClF,CACF,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iFAAiF;YACjF,kFAAkF;YAClF,kFAAkF;YAClF,8EAA8E;YAC9E,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;SAC5D,EACD,KAAK,EAAE,IAAa,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACzF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,GAAG,GAAY,CAAC;gBACvB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9E,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;iBACtE,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../../src/util/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../../src/util/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AASlD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE;QAAE,OAAO,IAAI,OAAO,CAAC;QAAC,gBAAgB,CAAC,IAAI,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,UAAU;;IAErB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuF;IAC7G,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAsD;gBAE5E,IAAI,EAAE,iBAAiB;IAe7B,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IA8EnD,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,QAAQ;CAajB;AAED,qBAAa,SAAU,SAAQ,KAAK;aACW,MAAM,EAAE,MAAM;aAAkB,WAAW,EAAE,MAAM;gBAApF,OAAO,EAAE,MAAM,EAAkB,MAAM,EAAE,MAAM,EAAkB,WAAW,EAAE,MAAM;CAIjG"}
|
package/dist/util/httpClient.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { request } from 'undici';
|
|
2
2
|
import { LRUCache } from 'lru-cache';
|
|
3
3
|
import { createHash } from 'node:crypto';
|
|
4
|
+
import { gunzip } from 'node:zlib';
|
|
5
|
+
import { promisify } from 'node:util';
|
|
4
6
|
import { log } from './logger.js';
|
|
7
|
+
const decompressGzip = promisify(gunzip);
|
|
5
8
|
export class HttpClient {
|
|
6
9
|
#defaultHeaders;
|
|
7
10
|
cache;
|
|
@@ -62,8 +65,14 @@ export class HttpClient {
|
|
|
62
65
|
headersTimeout: this.timeoutMs,
|
|
63
66
|
...(this.dispatcher ? { dispatcher: this.dispatcher } : {}),
|
|
64
67
|
});
|
|
68
|
+
// undici.request returns raw bytes, unlike fetch. Decode before parsing,
|
|
69
|
+
// reporting upstream errors, or caching the response.
|
|
70
|
+
const encoding = res.headers['content-encoding'];
|
|
71
|
+
const decoded = typeof encoding === 'string' && encoding.trim().toLowerCase() === 'gzip'
|
|
72
|
+
? new TextDecoder().decode(await decompressGzip(Buffer.from(await res.body.arrayBuffer())))
|
|
73
|
+
: undefined;
|
|
65
74
|
if (res.statusCode >= 400) {
|
|
66
|
-
const text = await res.body.text();
|
|
75
|
+
const text = decoded ?? await res.body.text();
|
|
67
76
|
const err = new HttpError(`${method} ${url} -> ${res.statusCode}`, res.statusCode, text);
|
|
68
77
|
if (res.statusCode === 429) {
|
|
69
78
|
const retryAfter = Array.isArray(res.headers['retry-after']) ? res.headers['retry-after'][0] : res.headers['retry-after'];
|
|
@@ -74,9 +83,9 @@ export class HttpClient {
|
|
|
74
83
|
}
|
|
75
84
|
let body;
|
|
76
85
|
if (accept.startsWith('application/json'))
|
|
77
|
-
body = await res.body.json();
|
|
86
|
+
body = decoded === undefined ? await res.body.json() : JSON.parse(decoded);
|
|
78
87
|
else
|
|
79
|
-
body = await res.body.text();
|
|
88
|
+
body = decoded ?? await res.body.text();
|
|
80
89
|
const headers = {};
|
|
81
90
|
for (const [k, v] of Object.entries(res.headers))
|
|
82
91
|
headers[k] = Array.isArray(v) ? v.join(',') : String(v ?? '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../src/util/httpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAmB,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../src/util/httpClient.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blen/fedreg-mcp-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.10",
|
|
4
4
|
"description": "Code-mode MCP server for the U.S. Federal Register, Electronic Code of Federal Regulations, and regulations.gov APIs.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "BLEN, Inc. (https://blenlabs.com)",
|