@blen/fedreg-mcp-server 2.0.9 → 2.0.11

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 (50) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/README.md +6 -0
  3. package/dist/bin.js +36 -16
  4. package/dist/bin.js.map +1 -1
  5. package/dist/sdk/bindings.js +1 -1
  6. package/dist/sdk/bindings.js.map +1 -1
  7. package/dist/sdk/sources/ecfr.d.ts.map +1 -1
  8. package/dist/sdk/sources/ecfr.js +2 -0
  9. package/dist/sdk/sources/ecfr.js.map +1 -1
  10. package/dist/sdk/sources/fr.d.ts.map +1 -1
  11. package/dist/sdk/sources/fr.js +2 -0
  12. package/dist/sdk/sources/fr.js.map +1 -1
  13. package/dist/sdk/sources/regs.js +1 -1
  14. package/dist/sdk/sources/regs.js.map +1 -1
  15. package/dist/sdk/sources/source.d.ts +4 -0
  16. package/dist/sdk/sources/source.d.ts.map +1 -1
  17. package/dist/server/http.d.ts +6 -0
  18. package/dist/server/http.d.ts.map +1 -1
  19. package/dist/server/http.js +5 -5
  20. package/dist/server/http.js.map +1 -1
  21. package/dist/server/ipRateLimiter.d.ts +11 -0
  22. package/dist/server/ipRateLimiter.d.ts.map +1 -1
  23. package/dist/server/ipRateLimiter.js +32 -1
  24. package/dist/server/ipRateLimiter.js.map +1 -1
  25. package/dist/server/mcpServer.js +2 -2
  26. package/dist/server/mcpServer.js.map +1 -1
  27. package/dist/server/stdio.js +1 -1
  28. package/dist/server/stdio.js.map +1 -1
  29. package/dist/server/toolCatalog.d.ts +1 -0
  30. package/dist/server/toolCatalog.d.ts.map +1 -1
  31. package/dist/server/toolCatalog.js.map +1 -1
  32. package/dist/supervisor/index.d.ts +11 -0
  33. package/dist/supervisor/index.d.ts.map +1 -1
  34. package/dist/supervisor/index.js +16 -1
  35. package/dist/supervisor/index.js.map +1 -1
  36. package/dist/tools/execute.d.ts +3 -0
  37. package/dist/tools/execute.d.ts.map +1 -1
  38. package/dist/tools/execute.js +10 -0
  39. package/dist/tools/execute.js.map +1 -1
  40. package/dist/util/httpClient.d.ts +21 -0
  41. package/dist/util/httpClient.d.ts.map +1 -1
  42. package/dist/util/httpClient.js +120 -49
  43. package/dist/util/httpClient.js.map +1 -1
  44. package/dist/util/logger.js +7 -1
  45. package/dist/util/logger.js.map +1 -1
  46. package/dist/util/upstreamGate.d.ts +28 -0
  47. package/dist/util/upstreamGate.d.ts.map +1 -0
  48. package/dist/util/upstreamGate.js +74 -0
  49. package/dist/util/upstreamGate.js.map +1 -0
  50. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -15,6 +15,16 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
15
15
 
16
16
 
17
17
 
18
+
19
+
20
+ ## [2.0.11] - 2026-10-13
21
+
22
+ ### Fixed
23
+ - stop fr/ecfr calls from tripping federalregister.gov rate limits (#9) (upstream)
24
+ ## [2.0.10] - 2026-10-13
25
+
26
+ ### Fixed
27
+ - key the per-IP rate limit on the real client behind proxies (#8) (http)
18
28
  ## [2.0.9] - 2026-10-08
19
29
 
20
30
  ### Fixed
@@ -190,7 +200,9 @@ Initial public release.
190
200
  → notifications/initialized → tools/list → tools/call → sandbox → SDK
191
201
  → mocked upstream).
192
202
 
193
- [Unreleased]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.9...HEAD
203
+ [Unreleased]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.11...HEAD
204
+ [2.0.11]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.10...v2.0.11
205
+ [2.0.10]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.9...v2.0.10
194
206
  [2.0.9]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.8...v2.0.9
195
207
  [2.0.8]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.7...v2.0.8
196
208
  [2.0.7]: https://github.com/blen-labs/fedreg-mcp-server/compare/v2.0.6...v2.0.7
package/README.md CHANGED
@@ -186,10 +186,16 @@ The most common knobs (full list and defaults in [`.env.example`](./.env.example
186
186
  | `FEDREG_REGS_API_KEY` | — | Free key from regulations.gov / api.data.gov. Unset ⇒ `regs` disabled (fr/ecfr unaffected). |
187
187
  | `FEDREG_REGS_BASE_URL` | `https://api.regulations.gov` | regulations.gov v4 API base URL. |
188
188
  | `FEDREG_REGS_MAX_CALLS_PER_EXECUTE` | `30` | Caps regulations.gov upstream calls per `execute()` run (rate-limit guardrail). |
189
+ | `FEDREG_UPSTREAM_CONCURRENCY` | `8` | Federal Register / eCFR requests in flight, per API, shared by all users. |
190
+ | `FEDREG_UPSTREAM_RATE_PER_SEC` | `10` | Federal Register / eCFR requests started per second, per API, shared by all users. |
191
+ | `FEDREG_UPSTREAM_MAX_WAIT_MS` | `15000` | Longest a call waits for a slot before failing with `RateLimited`. |
192
+ | `FEDREG_PUBLIC_MAX_CALLS_PER_EXECUTE` | `100` | Caps Federal Register + eCFR calls per `execute()` run (`CallBudgetExceeded`). |
189
193
  | `FEDREG_REGS_RATE_PER_HOUR` | `1000` | Process-wide cap on regs upstream calls/hour (protects the shared key). In-memory; with N replicas, divide by N. Must be ≥ 1. |
190
194
  | `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
195
  | `FEDREG_AUTH_PROVIDER` | `none` | `none` / `embedded` / `generic-oidc` / `clerk` / `workos` / `auth0` |
192
196
  | `FEDREG_PUBLIC_ORIGIN` | — | Public origin clients reach (used in OAuth metadata). |
197
+ | `FEDREG_IP_RPS` / `FEDREG_IP_BURST` | `5` / `20` | Per-IP token bucket on the HTTP transport. |
198
+ | `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
199
  | `FEDREG_SUBJECT_DAILY_QUOTA` | `10000` | Requests per authenticated subject per UTC day. |
194
200
 
195
201
  CLI options: `--http`, `--port`, `--host`, `--sandbox auto|isolate|deno`, `--insecure`, `--help`.
package/dist/bin.js CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { startStdio } from './server/stdio.js';
3
3
  import { startHttp } from './server/http.js';
4
- import { buildSupervisor } from './supervisor/index.js';
4
+ import { buildSupervisor, UPSTREAM_DEFAULTS } from './supervisor/index.js';
5
+ import { PUBLIC_MAX_CALLS_PER_EXECUTE } from './tools/execute.js';
5
6
  import { log } from './util/logger.js';
6
7
  function parseArgs(argv) {
7
8
  const args = {
@@ -42,6 +43,15 @@ function printHelp() {
42
43
  -h, --help Show this help
43
44
  `);
44
45
  }
46
+ /** A positive number (and at least `min`) from the environment, or `fallback` when unset or invalid. */
47
+ function positive(value, fallback, min = 0) {
48
+ const n = Number(value ?? fallback);
49
+ return Number.isFinite(n) && n > 0 && n >= min ? n : fallback;
50
+ }
51
+ /** A number >= 1 from the environment, or `fallback` when unset or invalid. */
52
+ function atLeastOne(value, fallback) {
53
+ return positive(value, fallback, 1);
54
+ }
45
55
  async function main() {
46
56
  const args = parseArgs(process.argv.slice(2));
47
57
  const deps = await buildSupervisor({
@@ -55,21 +65,20 @@ async function main() {
55
65
  cacheTtlMs: Number(process.env.FEDREG_CACHE_TTL_MS ?? 300_000),
56
66
  cacheMaxItems: Number(process.env.FEDREG_CACHE_MAX_ITEMS ?? 2000),
57
67
  sandbox: args.sandbox,
68
+ // Public upstreams (fr, ecfr) see one client: this server. Each must be >= 1.
69
+ upstreamConcurrency: atLeastOne(process.env.FEDREG_UPSTREAM_CONCURRENCY, UPSTREAM_DEFAULTS.concurrency),
70
+ upstreamRatePerSec: atLeastOne(process.env.FEDREG_UPSTREAM_RATE_PER_SEC, UPSTREAM_DEFAULTS.ratePerSec),
71
+ upstreamMaxWaitMs: atLeastOne(process.env.FEDREG_UPSTREAM_MAX_WAIT_MS, UPSTREAM_DEFAULTS.maxWaitMs),
72
+ publicMaxCallsPerExecute: atLeastOne(process.env.FEDREG_PUBLIC_MAX_CALLS_PER_EXECUTE, PUBLIC_MAX_CALLS_PER_EXECUTE),
58
73
  regsMaxCallsPerExecute: (() => {
59
74
  const n = Number(process.env.FEDREG_REGS_MAX_CALLS_PER_EXECUTE ?? 30);
60
75
  return Number.isFinite(n) && n >= 0 ? n : 30;
61
76
  })(),
62
- regsRatePerHour: (() => {
63
- // Require >= 1: a rate of 0 would silently block ALL regs calls (it is NOT
64
- // "unlimited"). To disable regs, leave FEDREG_REGS_API_KEY unset instead.
65
- const n = Number(process.env.FEDREG_REGS_RATE_PER_HOUR ?? 1000);
66
- return Number.isFinite(n) && n >= 1 ? n : 1000;
67
- })(),
68
- regsSubjectRatePerHour: (() => {
69
- // Require >= 1; per-subject hourly cap, not "unlimited".
70
- const n = Number(process.env.FEDREG_REGS_SUBJECT_RATE_PER_HOUR ?? 500);
71
- return Number.isFinite(n) && n >= 1 ? n : 500;
72
- })(),
77
+ // Require >= 1: a rate of 0 would silently block ALL regs calls (it is NOT
78
+ // "unlimited"). To disable regs, leave FEDREG_REGS_API_KEY unset instead.
79
+ regsRatePerHour: atLeastOne(process.env.FEDREG_REGS_RATE_PER_HOUR, 1000),
80
+ // Require >= 1; per-subject hourly cap, not "unlimited".
81
+ regsSubjectRatePerHour: atLeastOne(process.env.FEDREG_REGS_SUBJECT_RATE_PER_HOUR, 500),
73
82
  });
74
83
  let handle;
75
84
  if (args.http) {
@@ -82,8 +91,19 @@ async function main() {
82
91
  handle = await startHttp(deps, {
83
92
  port: args.port,
84
93
  host: args.host,
85
- rps: Number(process.env.FEDREG_IP_RPS ?? 5),
86
- burst: Number(process.env.FEDREG_IP_BURST ?? 20),
94
+ // rps must be > 0 (a NaN or non-positive rate makes the bucket arithmetic meaningless);
95
+ // burst must be >= 1, since a bucket that can never hold a whole token rejects everything.
96
+ rps: positive(process.env.FEDREG_IP_RPS, 5),
97
+ burst: positive(process.env.FEDREG_IP_BURST, 20, 1),
98
+ clientIpHeader: (() => {
99
+ const name = process.env.FEDREG_CLIENT_IP_HEADER?.trim().toLowerCase();
100
+ if (!name)
101
+ return undefined;
102
+ if (/^[a-z0-9-]+$/.test(name))
103
+ return name;
104
+ log.warn('config.invalid_client_ip_header', { header: name });
105
+ return undefined;
106
+ })(),
87
107
  subjectDailyQuota: Number(process.env.FEDREG_SUBJECT_DAILY_QUOTA ?? 10_000),
88
108
  insecure: args.insecure,
89
109
  allowedHosts,
@@ -110,7 +130,7 @@ async function main() {
110
130
  await handle.close();
111
131
  }
112
132
  catch (err) {
113
- log.warn('shutdown.error', { message: err.message });
133
+ log.warn('shutdown.error', { error: err.message });
114
134
  }
115
135
  process.exit(0);
116
136
  };
@@ -118,7 +138,7 @@ async function main() {
118
138
  process.on('SIGINT', () => void shutdown('SIGINT'));
119
139
  }
120
140
  main().catch(err => {
121
- log.error('bin.fatal', { message: err.message, stack: err.stack });
141
+ log.error('bin.fatal', { error: err.message, stack: err.stack });
122
142
  process.exit(1);
123
143
  });
124
144
  //# sourceMappingURL=bin.js.map
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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"}
@@ -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.9', // x-release-version
16
+ version: () => '2.0.11', // x-release-version
17
17
  };
18
18
  }
19
19
  //# sourceMappingURL=bindings.js.map
@@ -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,OAAO,EAAE,oBAAoB;KAC7C,CAAC;AACJ,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.d.ts","sourceRoot":"","sources":["../../../src/sdk/sources/ecfr.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAyB1D"}
1
+ {"version":3,"file":"ecfr.d.ts","sourceRoot":"","sources":["../../../src/sdk/sources/ecfr.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CA2B1D"}
@@ -5,6 +5,8 @@ export function createEcfrSource(cfg) {
5
5
  const http = new HttpClient({
6
6
  baseUrl: cfg.ecfrBaseUrl, userAgent: cfg.userAgent, timeoutMs: cfg.timeoutMs,
7
7
  retries: cfg.retries, cacheTtlMs: cfg.cacheTtlMs, cacheMaxItems: cfg.cacheMaxItems,
8
+ label: 'eCFR API',
9
+ ...(cfg.ecfrGate ? { gate: cfg.ecfrGate } : {}),
8
10
  ...(cfg.dispatcher ? { dispatcher: cfg.dispatcher } : {}),
9
11
  });
10
12
  const client = new EcfrClient(http);
@@ -1 +1 @@
1
- {"version":3,"file":"ecfr.js","sourceRoot":"","sources":["../../../src/sdk/sources/ecfr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,UAAU,gBAAgB,CAAC,GAAiB;IAChD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;QAC1B,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS;QAC5E,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa;QAClF,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO;QACL,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACpF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;YACvC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW;YAC7C,6BAA6B,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB;YACjE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACjC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;YACvC,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY;YACjD,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa;YACnD,yBAAyB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB;YACzD,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;SAChD,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ecfr.js","sourceRoot":"","sources":["../../../src/sdk/sources/ecfr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,UAAU,gBAAgB,CAAC,GAAiB;IAChD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;QAC1B,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS;QAC5E,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa;QAClF,KAAK,EAAE,UAAU;QACjB,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO;QACL,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;QACpF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;YACvC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW;YAC7C,6BAA6B,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB;YACjE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACjC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;YACvC,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY;YACjD,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa;YACnD,yBAAyB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB;YACzD,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;SAChD,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../../src/sdk/sources/fr.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CA0BxD"}
1
+ {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../../src/sdk/sources/fr.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,wBAAgB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CA4BxD"}
@@ -5,6 +5,8 @@ export function createFrSource(cfg) {
5
5
  const http = new HttpClient({
6
6
  baseUrl: cfg.frBaseUrl, userAgent: cfg.userAgent, timeoutMs: cfg.timeoutMs,
7
7
  retries: cfg.retries, cacheTtlMs: cfg.cacheTtlMs, cacheMaxItems: cfg.cacheMaxItems,
8
+ label: 'Federal Register API',
9
+ ...(cfg.frGate ? { gate: cfg.frGate } : {}),
8
10
  ...(cfg.dispatcher ? { dispatcher: cfg.dispatcher } : {}),
9
11
  });
10
12
  const client = new FederalRegisterClient(http);
@@ -1 +1 @@
1
- {"version":3,"file":"fr.js","sourceRoot":"","sources":["../../../src/sdk/sources/fr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,UAAU,cAAc,CAAC,GAAiB;IAC9C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;QAC1B,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS;QAC1E,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa;QAClF,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5F,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;YAC3C,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG;YACrC,mBAAmB,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO;YAC7C,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;YAC3C,0BAA0B,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO;YAC3D,yBAAyB,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM;YACzD,sBAAsB,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG;YACnD,0BAA0B,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO;YAC3D,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;YACrC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;YACnC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG;YAC/B,wBAAwB,EAAE,MAAM,CAAC,iBAAiB,CAAC,IAAI;YACvD,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG;YACrD,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG;SAChC,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fr.js","sourceRoot":"","sources":["../../../src/sdk/sources/fr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,UAAU,cAAc,CAAC,GAAiB;IAC9C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;QAC1B,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS;QAC1E,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa;QAClF,KAAK,EAAE,sBAAsB;QAC7B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC5F,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;YAC3C,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG;YACrC,mBAAmB,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO;YAC7C,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;YAC3C,0BAA0B,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO;YAC3D,yBAAyB,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM;YACzD,sBAAsB,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG;YACnD,0BAA0B,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO;YAC3D,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;YACrC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;YACnC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG;YAC/B,wBAAwB,EAAE,MAAM,CAAC,iBAAiB,CAAC,IAAI;YACvD,uBAAuB,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG;YACrD,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG;SAChC,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -7,7 +7,7 @@ export function createRegsSource(cfg) {
7
7
  const http = new HttpClient({
8
8
  baseUrl: cfg.regsBaseUrl, userAgent: cfg.userAgent, timeoutMs: cfg.timeoutMs,
9
9
  retries: cfg.retries, cacheTtlMs: cfg.cacheTtlMs, cacheMaxItems: cfg.cacheMaxItems,
10
- retry429: false,
10
+ retry429: false, label: 'Regulations.gov API',
11
11
  ...(enabled ? { defaultHeaders: { 'X-Api-Key': key } } : {}),
12
12
  ...(cfg.regsPreflightLimiter ? { preflightLimiter: cfg.regsPreflightLimiter } : {}),
13
13
  ...(cfg.dispatcher ? { dispatcher: cfg.dispatcher } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"regs.js","sourceRoot":"","sources":["../../../src/sdk/sources/regs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,UAAU,gBAAgB,CAAC,GAAiB;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;QAC1B,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS;QAC5E,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa;QAClF,QAAQ,EAAE,KAAK;QACf,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,GAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,iBAAiB;QACxB,OAAO;QACP,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kHAAkH;QACxJ,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;YAC3C,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG;YACrC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YACzC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;YACnC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YACvC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;SAClC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;KACjC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"regs.js","sourceRoot":"","sources":["../../../src/sdk/sources/regs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,UAAU,gBAAgB,CAAC,GAAiB;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;QAC1B,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS;QAC5E,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa;QAClF,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB;QAC7C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,GAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,iBAAiB;QACxB,OAAO;QACP,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kHAAkH;QACxJ,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM;YAC3C,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG;YACrC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YACzC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG;YACnC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YACvC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG;SAClC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;KACjC,CAAC;AACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { Dispatcher } from 'undici';
2
2
  import type { CorpusEntry } from '../../search/corpus.js';
3
+ import type { UpstreamGateLike } from '../../util/httpClient.js';
3
4
  export interface SourceMeta {
4
5
  name: string;
5
6
  label: string;
@@ -30,5 +31,8 @@ export interface SourceConfig {
30
31
  tryTake(): boolean;
31
32
  secondsUntilNext?(): number;
32
33
  };
34
+ /** Process-wide admission control per public upstream; built once in buildSupervisor. */
35
+ frGate?: UpstreamGateLike;
36
+ ecfrGate?: UpstreamGateLike;
33
37
  }
34
38
  //# sourceMappingURL=source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/sdk/sources/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE;QAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QAAC,MAAM,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC;CAC7D;AAID,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oBAAoB,CAAC,EAAE;QAAE,OAAO,IAAI,OAAO,CAAC;QAAC,gBAAgB,CAAC,IAAI,MAAM,CAAA;KAAE,CAAC;CAC5E"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/sdk/sources/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE;QAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QAAC,MAAM,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC;CAC7D;AAID,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oBAAoB,CAAC,EAAE;QAAE,OAAO,IAAI,OAAO,CAAC;QAAC,gBAAgB,CAAC,IAAI,MAAM,CAAA;KAAE,CAAC;IAC3E,yFAAyF;IACzF,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B"}
@@ -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"}
@@ -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';
@@ -68,14 +68,14 @@ export async function startHttp(deps, opts) {
68
68
  // `0` refuses every listen request (the limit check is `open.size >= max`).
69
69
  maxSubscriptions: 0,
70
70
  // Rejections carry attacker-supplied header/body fragments, so cap what reaches stderr.
71
- onerror: (err) => log.warn('mcp.handler.error', { message: truncate(err.message) }),
71
+ onerror: (err) => log.warn('mcp.handler.error', { error: truncate(err.message) }),
72
72
  });
73
73
  const nodeHandler = toNodeHandler(mcpHandler, {
74
- onerror: (err) => log.warn('mcp.adapter.error', { message: truncate(err.message) }),
74
+ onerror: (err) => log.warn('mcp.adapter.error', { error: truncate(err.message) }),
75
75
  });
76
76
  const server = createServer(async (req, res) => {
77
77
  try {
78
- const ip = (req.socket.remoteAddress ?? 'unknown').replace('::ffff:', '');
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.
@@ -146,7 +146,7 @@ export async function startHttp(deps, opts) {
146
146
  reply(res, 404, { error: 'not_found' });
147
147
  }
148
148
  catch (err) {
149
- log.error('http.unhandled', { message: err.message, stack: err.stack });
149
+ log.error('http.unhandled', { error: err.message, stack: err.stack });
150
150
  if (!res.headersSent)
151
151
  reply(res, 500, { error: 'internal' });
152
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
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,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;KAClF,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,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;KAClF,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,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,KAAK,EAAG,GAAa,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5F,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,CAA4D;gBACvD,GAAG,EAAE,MAAM,EAAmB,KAAK,EAAE,MAAM;IAExE,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAc3B"}
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 = new Map();
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":"AAAA;;GAEG;AACH,MAAM,OAAO,aAAa;IAEK;IAA8B;IAD1C,OAAO,GAAG,IAAI,GAAG,EAAiD,CAAC;IACpF,YAA6B,GAAW,EAAmB,KAAa;QAA3C,QAAG,GAAH,GAAG,CAAQ;QAAmB,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAE5E,KAAK,CAAC,EAAU;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QACzE,MAAM,UAAU,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC9C,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC;QAClB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"ipRateLimiter.js","sourceRoot":"","sources":["../../src/server/ipRateLimiter.ts"],"names":[],"mappings":"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"}
@@ -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.9' }, // x-release-version
37
+ const server = new McpServer({ name: 'fedreg-mcp-server', version: '2.0.11' }, // x-release-version
38
38
  {
39
39
  capabilities: { tools: {} },
40
40
  cacheHints: { 'tools/list': LIST_CACHE_HINT, 'server/discover': LIST_CACHE_HINT },
@@ -56,7 +56,7 @@ export function buildMcpServer(deps, requestCtx) {
56
56
  }
57
57
  catch (err) {
58
58
  const e = err;
59
- log.warn('tool.error', { tool: tool.name, name: e.name, message: e.message });
59
+ log.warn('tool.error', { tool: tool.name, name: e.name, error: e.message });
60
60
  return {
61
61
  isError: true,
62
62
  content: [{ type: 'text', text: `${e.name}: ${e.message}` }],
@@ -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,OAAO,EAAE,EAAE,oBAAoB;IACrE;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
+ {"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,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5E,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"}
@@ -9,7 +9,7 @@ export async function startStdio(deps) {
9
9
  // process would log `stdio.ready` and then answer every request with -32603 in silence;
10
10
  // the v1 `await server.connect(transport)` at least rejected into `bin.fatal`.
11
11
  serveStdio(() => buildMcpServer(deps), {
12
- onerror: (err) => log.error('stdio.error', { name: err.name, message: err.message }),
12
+ onerror: (err) => log.error('stdio.error', { name: err.name, error: err.message }),
13
13
  });
14
14
  log.info('stdio.ready', { sandbox: deps.sandbox.kind });
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/server/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAiB;IAChD,yFAAyF;IACzF,EAAE;IACF,uFAAuF;IACvF,qFAAqF;IACrF,wFAAwF;IACxF,+EAA+E;IAC/E,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;QACrC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;KACrF,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/server/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAiB;IAChD,yFAAyF;IACzF,EAAE;IACF,uFAAuF;IACvF,qFAAqF;IACrF,wFAAwF;IACxF,+EAA+E;IAC/E,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;QACrC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;KACnF,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC"}
@@ -18,6 +18,7 @@ export interface CatalogDeps {
18
18
  corpus: Corpus;
19
19
  regsMaxCallsPerExecute: number;
20
20
  regsSubjectQuota: SubjectQuota;
21
+ publicMaxCallsPerExecute?: number;
21
22
  }
22
23
  export declare function buildCatalog(deps: CatalogDeps, requestCtx?: RequestCtx): ToolDescriptor[];
23
24
  //# sourceMappingURL=toolCatalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolCatalog.d.ts","sourceRoot":"","sources":["../../src/server/toolCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,YAAY,CAAC;CAChC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,cAAc,EAAE,CAkCzF"}
1
+ {"version":3,"file":"toolCatalog.d.ts","sourceRoot":"","sources":["../../src/server/toolCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,cAAc,EAAE,CAkCzF"}
@@ -1 +1 @@
1
- {"version":3,"file":"toolCatalog.js","sourceRoot":"","sources":["../../src/server/toolCatalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,OAAO,EAAmB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAuBvD,MAAM,UAAU,YAAY,CAAC,IAAiB,EAAE,UAAuB;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO;QACL;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,qCAAqC;YAC5C,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;YACvG,WAAW,EACT,0FAA0F,KAAK,0EAA0E;YAC3K,WAAW,EAAE,eAAe,CAAC,cAAc,CAAC;YAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;SAC5E;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,gCAAgC;YACvC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;YACvG,WAAW,EACT,+HAA+H,UAAU,IAAI;YAC/I,WAAW,EAAE,eAAe,CAAC,mBAAmB,CAAC;YACjD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;SAC9F;QACD;YACE,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,+BAA+B;YACtC,2EAA2E;YAC3E,0EAA0E;YAC1E,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;YACtG,WAAW,EACT,wIAAwI,KAAK,4EAA4E;YAC3N,WAAW,EAAE,eAAe,CAAC,YAAY,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC;SAC7E;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"toolCatalog.js","sourceRoot":"","sources":["../../src/server/toolCatalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,OAAO,EAAmB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAwBvD,MAAM,UAAU,YAAY,CAAC,IAAiB,EAAE,UAAuB;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO;QACL;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,qCAAqC;YAC5C,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;YACvG,WAAW,EACT,0FAA0F,KAAK,0EAA0E;YAC3K,WAAW,EAAE,eAAe,CAAC,cAAc,CAAC;YAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;SAC5E;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,gCAAgC;YACvC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;YACvG,WAAW,EACT,+HAA+H,UAAU,IAAI;YAC/I,WAAW,EAAE,eAAe,CAAC,mBAAmB,CAAC;YACjD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;SAC9F;QACD;YACE,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,+BAA+B;YACtC,2EAA2E;YAC3E,0EAA0E;YAC1E,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;YACtG,WAAW,EACT,wIAAwI,KAAK,4EAA4E;YAC3N,WAAW,EAAE,eAAe,CAAC,YAAY,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC;SAC7E;KACF,CAAC;AACJ,CAAC"}
@@ -14,6 +14,17 @@ export interface SupervisorConfig {
14
14
  regsMaxCallsPerExecute: number;
15
15
  regsRatePerHour: number;
16
16
  regsSubjectRatePerHour: number;
17
+ /** Per public upstream (fr, ecfr), shared by every user: requests in flight and started per second. */
18
+ upstreamConcurrency?: number;
19
+ upstreamRatePerSec?: number;
20
+ /** Longest a call waits for an upstream slot before failing with RateLimited. */
21
+ upstreamMaxWaitMs?: number;
22
+ publicMaxCallsPerExecute?: number;
17
23
  }
24
+ export declare const UPSTREAM_DEFAULTS: {
25
+ readonly concurrency: 8;
26
+ readonly ratePerSec: 10;
27
+ readonly maxWaitMs: 15000;
28
+ };
18
29
  export declare function buildSupervisor(cfg: SupervisorConfig): Promise<CatalogDeps>;
19
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/supervisor/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAcjF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/supervisor/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uGAAuG;IACvG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,eAAO,MAAM,iBAAiB;;;;CAAiE,CAAC;AAEhG,wBAAsB,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBjF"}