@cyanheads/epa-mcp-server 0.4.0 → 0.4.1

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 (60) hide show
  1. package/AGENTS.md +5 -5
  2. package/CLAUDE.md +5 -5
  3. package/Dockerfile +3 -3
  4. package/README.md +24 -19
  5. package/changelog/0.4.x/0.4.1.md +34 -0
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/mcp-server/resources/definitions/facility.resource.d.ts +8 -1
  9. package/dist/mcp-server/resources/definitions/facility.resource.d.ts.map +1 -1
  10. package/dist/mcp-server/resources/definitions/facility.resource.js +13 -7
  11. package/dist/mcp-server/resources/definitions/facility.resource.js.map +1 -1
  12. package/dist/mcp-server/resources/definitions/index.d.ts +7 -1
  13. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -1
  14. package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts +30 -2
  15. package/dist/mcp-server/tools/definitions/get-facility.tool.d.ts.map +1 -1
  16. package/dist/mcp-server/tools/definitions/get-facility.tool.js +208 -43
  17. package/dist/mcp-server/tools/definitions/get-facility.tool.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts +4 -2
  19. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js +12 -5
  21. package/dist/mcp-server/tools/definitions/get-tri-releases.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/definitions/index.d.ts +116 -16
  23. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  24. package/dist/mcp-server/tools/definitions/search-facilities.tool.d.ts.map +1 -1
  25. package/dist/mcp-server/tools/definitions/search-facilities.tool.js +34 -16
  26. package/dist/mcp-server/tools/definitions/search-facilities.tool.js.map +1 -1
  27. package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts +3 -1
  28. package/dist/mcp-server/tools/definitions/search-superfund.tool.d.ts.map +1 -1
  29. package/dist/mcp-server/tools/definitions/search-superfund.tool.js +11 -1
  30. package/dist/mcp-server/tools/definitions/search-superfund.tool.js.map +1 -1
  31. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts +7 -0
  32. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.d.ts.map +1 -1
  33. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js +21 -9
  34. package/dist/mcp-server/tools/definitions/search-tri-releases.tool.js.map +1 -1
  35. package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts +20 -3
  36. package/dist/mcp-server/tools/definitions/search-violations.tool.d.ts.map +1 -1
  37. package/dist/mcp-server/tools/definitions/search-violations.tool.js +84 -15
  38. package/dist/mcp-server/tools/definitions/search-violations.tool.js.map +1 -1
  39. package/dist/services/airnow/airnow-service.d.ts.map +1 -1
  40. package/dist/services/airnow/airnow-service.js +9 -3
  41. package/dist/services/airnow/airnow-service.js.map +1 -1
  42. package/dist/services/call-budget.d.ts +22 -0
  43. package/dist/services/call-budget.d.ts.map +1 -0
  44. package/dist/services/call-budget.js +28 -0
  45. package/dist/services/call-budget.js.map +1 -0
  46. package/dist/services/dmap/dmap-service.d.ts +43 -13
  47. package/dist/services/dmap/dmap-service.d.ts.map +1 -1
  48. package/dist/services/dmap/dmap-service.js +270 -68
  49. package/dist/services/dmap/dmap-service.js.map +1 -1
  50. package/dist/services/echo/echo-service.d.ts +38 -11
  51. package/dist/services/echo/echo-service.d.ts.map +1 -1
  52. package/dist/services/echo/echo-service.js +417 -223
  53. package/dist/services/echo/echo-service.js.map +1 -1
  54. package/dist/services/echo/types.d.ts +167 -80
  55. package/dist/services/echo/types.d.ts.map +1 -1
  56. package/dist/services/ejscreen/ejscreen-service.d.ts.map +1 -1
  57. package/dist/services/ejscreen/ejscreen-service.js +9 -3
  58. package/dist/services/ejscreen/ejscreen-service.js.map +1 -1
  59. package/package.json +6 -6
  60. package/server.json +3 -3
@@ -3,9 +3,124 @@
3
3
  * Wraps data.epa.gov/dmapservice REST endpoints.
4
4
  * @module services/dmap/dmap-service
5
5
  */
6
- import { serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
6
+ import { JsonRpcErrorCode, serviceUnavailable, validationError, } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { httpErrorFromResponse, withRetry } from '@cyanheads/mcp-ts-core/utils';
8
8
  import { getServerConfig } from '../../config/server-config.js';
9
+ import { callBudget } from '../call-budget.js';
10
+ /**
11
+ * Characters DMAP reads literally in a `contains` value. Live (2026-10-16), its path parser
12
+ * answers any other punctuation and every non-ASCII letter with HTTP 500 "The query could not be
13
+ * parsed" (apostrophes, brackets, parentheses, periods, slashes, Greek letters), `%` draws an nginx
14
+ * HTTP 403, a comma ends the value (`contains/1,3-Butadiene` matches every name containing "1"),
15
+ * and `_` and `?` match any one character.
16
+ */
17
+ const CONTAINS_LITERAL = /^[A-Za-z0-9 -]$/;
18
+ /** Characters DMAP reads literally in an `equals` or `in` value, where `_` and `?` are not wildcards. */
19
+ const EXACT_LITERAL = /^[A-Za-z0-9 _?@-]$/;
20
+ /**
21
+ * `value` without slashes at either end, unless it is nothing but slashes. DMAP decodes its path
22
+ * before splitting it and drops empty segments, so an end slash never reached a filter: live
23
+ * (2026-10-16), `equals/98108THBNG7500E%2F`, `equals/%2F98108THBNG7500E`, and
24
+ * `contains/Seattle%2F` answer exactly as the bare values do. A slash inside a value shifts the
25
+ * path apart and is still rejected.
26
+ */
27
+ function trimSlashes(value) {
28
+ let start = 0;
29
+ let end = value.length;
30
+ while (start < end && value[start] === '/')
31
+ start++;
32
+ while (end > start && value[end - 1] === '/')
33
+ end--;
34
+ return start === end ? value : value.slice(start, end);
35
+ }
36
+ /**
37
+ * A `contains` filter DMAP can carry. Each character it cannot read literally becomes `_`, its
38
+ * one-character wildcard, and `literal` keeps the text as given so fetchMatchingRows keeps only
39
+ * the rows that contain it; a `_` the caller wrote is a wildcard too, so it gets the same pass.
40
+ * Across all 860 TRI chemical names and every TRI county name, the wildcard form of a name
41
+ * matches no other name; Superfund city names carry spelling variants (COEUR D ALENE beside
42
+ * COEUR D'ALENE) that the exact pass drops.
43
+ */
44
+ function containsFilter(column, text) {
45
+ const value = trimSlashes(text);
46
+ const characters = Array.from(value);
47
+ if (characters.every((c) => CONTAINS_LITERAL.test(c))) {
48
+ return { column, operator: 'contains', value };
49
+ }
50
+ const pattern = characters.map((c) => (CONTAINS_LITERAL.test(c) ? c : '_')).join('');
51
+ if (!/[A-Za-z0-9]/.test(pattern)) {
52
+ throw validationError(`"${value}" has no letter or digit to search on. EPA's DMAP service matches text by its letters, digits, spaces, and hyphens.`, { value });
53
+ }
54
+ return { column, operator: 'contains', value: pattern, literal: value };
55
+ }
56
+ /**
57
+ * An `equals` or `in` filter as DMAP reads it: end slashes dropped (trimSlashes), and a value
58
+ * carrying a character DMAP cannot match rejected before any request.
59
+ */
60
+ function exactFilter(filter) {
61
+ if (filter.operator === 'contains')
62
+ return filter;
63
+ const exact = { ...filter, value: trimSlashes(filter.value) };
64
+ const values = exact.operator === 'in' ? exact.value.split(',') : [exact.value];
65
+ for (const value of values) {
66
+ for (const character of value) {
67
+ if (!EXACT_LITERAL.test(character)) {
68
+ const recovery = character === ',' ? 'Pass one value per call.' : 'Remove it and retry.';
69
+ throw validationError(`"${value}" contains "${character}", a character EPA's DMAP service cannot match in an exact-value filter. ${recovery}`, { value, character });
70
+ }
71
+ }
72
+ }
73
+ return exact;
74
+ }
75
+ /** Rows read per page while a wildcard filter's exact matches are collected. */
76
+ const EXACT_TEXT_PAGE_ROWS = 100;
77
+ /**
78
+ * Pages read for a wildcard filter before returning what matched. Reaching it takes hundreds of
79
+ * near-variant rows ahead of the exact ones in DMAP's order.
80
+ */
81
+ const EXACT_TEXT_MAX_PAGES = 3;
82
+ /** DMAP's front end refuses a longer request line with HTTP 400 "Request Line is too large". */
83
+ const DMAP_REQUEST_LINE_LIMIT = 4094;
84
+ /**
85
+ * Bytes of the client's request line DMAP leaves out of that count: live (2026-10-16), a
86
+ * 4,105-byte line is answered and a 4,106-byte one is refused as "(4095 > 4094)".
87
+ */
88
+ const DMAP_UNCOUNTED_BYTES = 11;
89
+ /**
90
+ * Newest reporting year first, then submission number, so a row range pages deterministically.
91
+ * Keys must be table-qualified: DMAP resolves a bare column against the first table of a join
92
+ * (`reporting_year` there is HTTP 500). Without the doc_ctrl_num tiebreak, AK rows `1:50` and
93
+ * `51:100` shared 36 records.
94
+ */
95
+ const NEWEST_FIRST = [
96
+ { column: 'tri.tri_reporting_form.reporting_year', direction: 'desc' },
97
+ { column: 'tri.tri_reporting_form.doc_ctrl_num', direction: 'asc' },
98
+ ];
99
+ /**
100
+ * Request-line budget for a batched `in` list, under DMAP_REQUEST_LINE_LIMIT. DMAP counts 11 bytes
101
+ * fewer than the client sends, and the budget leaves a further ~300 bytes of margin.
102
+ */
103
+ const IN_LIST_REQUEST_LINE_BUDGET = 3800;
104
+ /**
105
+ * Breakdown chunks in flight at once. An uncached tri.tri_release_qty request takes ~18 s however
106
+ * many submissions it names, so chunks run side by side: getTriReleases' 500 forms make at most
107
+ * three chunks, one wave.
108
+ */
109
+ const BREAKDOWN_CONCURRENCY = 3;
110
+ /**
111
+ * One budget for every DMAP request a service call chains — a TRI search and its breakdown chunks,
112
+ * a ZIP's system read and its violation checks, every retry and backoff — so the call settles
113
+ * under the 60 s request timeout of MCP SDK clients. An expiry names how to narrow the call.
114
+ */
115
+ const CALL_DEADLINE_MS = 50_000;
116
+ const dmapBudget = (task, narrow) => callBudget('DMAP', task, CALL_DEADLINE_MS, narrow);
117
+ /** Max tri.tri_release_qty rows read per submission (live submissions carry about 10). */
118
+ const RELEASE_QTY_ROWS_PER_SUBMISSION = 30;
119
+ /** The HTTP/1.1 request line a GET of `url` sends: method, path and query, protocol. */
120
+ function requestLineBytes(url) {
121
+ const { pathname, search } = new URL(url);
122
+ return Buffer.byteLength(`GET ${pathname}${search} HTTP/1.1`);
123
+ }
9
124
  /** Parse a numeric field, returning undefined if absent/NaN. */
10
125
  function parseNum(val) {
11
126
  if (val === undefined || val === null || val === '')
@@ -46,8 +161,8 @@ function normalizeTriRelease(raw) {
46
161
  ...(inGrams && { reportedUnit: 'grams' }),
47
162
  };
48
163
  // one_time_release_qty is the only release qty in tri_reporting_form; the per-medium routine
49
- // breakdown lives in tri.tri_release_qty and is merged in by the callers after one batched
50
- // fetchReleaseBreakdown request (always for getTriReleases, opt-in for searchTriReleases).
164
+ // breakdown lives in tri.tri_release_qty and is merged in by the callers through
165
+ // fetchReleaseBreakdown (always for getTriReleases, opt-in for searchTriReleases).
51
166
  const oneTime = parseNum(raw.one_time_release_qty);
52
167
  if (oneTime !== undefined)
53
168
  result.totalReleasesInLbs = inGrams ? gramsToPounds(oneTime) : oneTime;
@@ -168,8 +283,8 @@ export class DmapService {
168
283
  this.baseUrl = getServerConfig().dmapBaseUrl;
169
284
  }
170
285
  /**
171
- * Build a DMAP REST URL for a multi-filter query.
172
- * Format: {base}/{schema}.{table}/{col1}/{op1}/{val1}/and/{col2}/{op2}/{val2}/{first}:{last}
286
+ * Build a DMAP REST JSON URL for a multi-filter query.
287
+ * Format: {base}/{schema}.{table}/{col1}/{op1}/{val1}/and/{col2}/{op2}/{val2}/{first}:{last}/json
173
288
  * Rows are 1-based and inclusive: `1:50` is 50 rows. DMAP reads a `first` of 0 as row 1, so
174
289
  * `0:49` would return only 49.
175
290
  *
@@ -177,25 +292,49 @@ export class DmapService {
177
292
  * `/join/{schema}.{table}/{leftColumn}/equals/{rightColumn}/and/{filter}…`. Filters before the
178
293
  * join bind to the first table only (DMAP rejects a column the first table lacks); filters
179
294
  * after the join comparison bind to the joined table. The range then counts joined rows.
295
+ *
296
+ * With `sort`, `/sort/{column}:{asc|desc},…` follows the filters and join, before the range.
297
+ *
298
+ * An `equals` or `in` value goes through exactFilter, so one carrying a character DMAP cannot
299
+ * match throws a ValidationError naming it; `contains` values arrive already rewritten by
300
+ * containsFilter.
180
301
  */
181
- buildTableUrl(schema, table, filters, pagination, join) {
302
+ buildTableUrl(schema, table, filters, pagination, options = {}) {
303
+ const { join, sort } = options;
182
304
  const toPath = (list) => list
305
+ .map(exactFilter)
183
306
  .map((f) => `${encodeURIComponent(f.column)}/${f.operator}/${encodeURIComponent(f.value)}`)
184
307
  .join('/and/');
185
308
  const joinPath = join
186
309
  ? `/join/${join.table}/${join.on.left}/equals/${join.on.right}${join.filters.length > 0 ? `/and/${toPath(join.filters)}` : ''}`
187
310
  : '';
311
+ const sortPath = sort ? `/sort/${sort.map((k) => `${k.column}:${k.direction}`).join(',')}` : '';
188
312
  const pagePath = `${pagination.first}:${pagination.last}`;
189
- return `${this.baseUrl}/${schema}.${table}/${toPath(filters)}${joinPath}/${pagePath}`;
313
+ return `${this.baseUrl}/${schema}.${table}/${toPath(filters)}${joinPath}${sortPath}/${pagePath}/json`;
190
314
  }
191
- /** Fetch a DMAP table result as JSON array. */
192
- // biome-ignore lint/suspicious/useAwait: delegates to withRetry() which returns a Promise — async typing is correct
193
- async fetchTable(url, ctx) {
194
- return withRetry(async () => {
195
- const jsonUrl = url.endsWith('/json') ? url : `${url}/json`;
196
- const response = await fetch(jsonUrl, { signal: ctx.signal });
315
+ /**
316
+ * Fetch a DMAP table result as JSON array. Every attempt and backoff ends within `budget`
317
+ * (shared by every request of one service call); expiry rejects with the budget's Timeout.
318
+ *
319
+ * A request line DMAP would count past DMAP_REQUEST_LINE_LIMIT is never sent: batched `in`
320
+ * lists are chunked to fit, so only caller-supplied filter text can push one over, and it fails
321
+ * as a ValidationError. DMAP answers HTTP 400 only from its front end, for a request it cannot
322
+ * parse, never for a filter value — those are HTTP 500. A 400 that still arrives is a request
323
+ * this server built wrong, not the caller's input, and maps to InternalError rather than the
324
+ * default InvalidParams.
325
+ */
326
+ fetchTable(url, ctx, budget) {
327
+ const countedBytes = requestLineBytes(url) - DMAP_UNCOUNTED_BYTES;
328
+ if (countedBytes > DMAP_REQUEST_LINE_LIMIT) {
329
+ return Promise.reject(validationError(`The search filters are too long for EPA's DMAP service: the request would be ${countedBytes} bytes, over its ${DMAP_REQUEST_LINE_LIMIT}-byte limit. Shorten the text filters.`, { requestLineBytes: countedBytes }));
330
+ }
331
+ return withRetry(async ({ signal }) => {
332
+ const response = await fetch(url, { signal });
197
333
  if (!response.ok) {
198
- throw await httpErrorFromResponse(response, { service: 'DMAP' });
334
+ throw await httpErrorFromResponse(response, {
335
+ service: 'DMAP',
336
+ codeOverride: (status) => (status === 400 ? JsonRpcErrorCode.InternalError : undefined),
337
+ });
199
338
  }
200
339
  const text = await response.text();
201
340
  if (/^\s*<(!DOCTYPE\s+html|html[\s>])/i.test(text)) {
@@ -212,7 +351,41 @@ export class DmapService {
212
351
  operation: 'DmapService.fetchTable',
213
352
  baseDelayMs: 1000,
214
353
  signal: ctx.signal,
215
- });
354
+ deadlineMs: budget.remainingMs(),
355
+ }).catch(budget.rethrow);
356
+ }
357
+ /**
358
+ * Fetch up to `wanted` rows. Without a wildcarded filter (containsFilter) that is one request
359
+ * ranged `1:wanted`. With one, DMAP's rows can include near-variants that match only through the
360
+ * wildcard, so pages of at least EXACT_TEXT_PAGE_ROWS are read and narrowed to rows containing
361
+ * the text as given, until `wanted` are found, DMAP runs out, or EXACT_TEXT_MAX_PAGES are read.
362
+ * A walk the page limit ends short of `wanted` carries a notice that more matches may exist.
363
+ */
364
+ async fetchMatchingRows(urlForRange, filters, wanted, ctx, budget) {
365
+ const wildcarded = filters.filter((f) => f.literal !== undefined);
366
+ if (wildcarded.length === 0) {
367
+ return this.fetchTable(urlForRange({ first: 1, last: wanted }), ctx, budget);
368
+ }
369
+ const pageRows = Math.max(wanted, EXACT_TEXT_PAGE_ROWS);
370
+ const matches = [];
371
+ let exhausted = false;
372
+ for (let page = 0; page < EXACT_TEXT_MAX_PAGES && matches.length < wanted; page++) {
373
+ const first = page * pageRows + 1;
374
+ const rows = await this.fetchTable(urlForRange({ first, last: first + pageRows - 1 }), ctx, budget);
375
+ matches.push(...rows.filter((row) => wildcarded.every((f) => String(row[f.column] ?? '')
376
+ .toLowerCase()
377
+ .includes(f.literal.toLowerCase()))));
378
+ if (rows.length < pageRows) {
379
+ exhausted = true;
380
+ break;
381
+ }
382
+ }
383
+ if (!exhausted && matches.length < wanted) {
384
+ const texts = wildcarded.map((f) => `"${f.literal}"`).join(' and ');
385
+ const kept = `${matches.length} ${matches.length === 1 ? 'match' : 'matches'}`;
386
+ ctx.enrich.notice(`${texts} ${wildcarded.length === 1 ? 'was' : 'were'} searched with a one-character wildcard in place of punctuation, and the first ${(EXACT_TEXT_MAX_PAGES * pageRows).toLocaleString('en-US')} rows matching the wildcard held ${kept} spelled as given, so more may exist past them. Narrow the search with other filters or more of the text.`);
387
+ }
388
+ return matches.slice(0, wanted);
216
389
  }
217
390
  /** Get TRI releases for a specific facility. */
218
391
  async getTriReleases(params, ctx) {
@@ -224,22 +397,18 @@ export class DmapService {
224
397
  }
225
398
  if (params.chemicalName) {
226
399
  // actual field is cas_chem_name, not chemical_name_text
227
- filters.push({
228
- column: 'cas_chem_name',
229
- operator: 'contains',
230
- value: params.chemicalName,
231
- });
400
+ filters.push(containsFilter('cas_chem_name', params.chemicalName));
232
401
  }
233
- const url = this.buildTableUrl('tri', 'tri_reporting_form', filters, { first: 1, last: 500 });
402
+ const budget = dmapBudget('TRI release lookup', 'Narrow it with year or chemical_name, or call again later.');
234
403
  ctx.log.debug('DMAP TRI releases query', { facilityId: params.facilityId, year: params.year });
235
- const rows = await this.fetchTable(url, ctx);
236
- return this.withReleaseBreakdown(rows, rows.map(normalizeTriRelease), ctx);
404
+ const rows = await this.fetchMatchingRows((range) => this.buildTableUrl('tri', 'tri_reporting_form', filters, range), filters, 500, ctx, budget);
405
+ return this.withReleaseBreakdown(rows, rows.map(normalizeTriRelease), ctx, budget);
237
406
  }
238
407
  /**
239
- * Add each release's per-medium routine breakdown (tri.tri_release_qty, joined on doc_ctrl_num)
240
- * with one batched request. `releases[i]` is the normalized form of `rows[i]`.
408
+ * Add each release's per-medium routine breakdown (tri.tri_release_qty, joined on doc_ctrl_num).
409
+ * `releases[i]` is the normalized form of `rows[i]`.
241
410
  */
242
- async withReleaseBreakdown(rows, releases, ctx) {
411
+ async withReleaseBreakdown(rows, releases, ctx, budget) {
243
412
  const docCtrlNums = [
244
413
  ...new Set(rows
245
414
  .map((r) => r.doc_ctrl_num)
@@ -247,27 +416,61 @@ export class DmapService {
247
416
  ];
248
417
  if (docCtrlNums.length === 0)
249
418
  return releases;
250
- const breakdownByDoc = await this.fetchReleaseBreakdown(docCtrlNums, ctx);
419
+ const breakdownByDoc = await this.fetchReleaseBreakdown(docCtrlNums, ctx, budget);
251
420
  return releases.map((release, i) => {
252
421
  const doc = rows[i]?.doc_ctrl_num;
253
422
  return withBreakdown(release, typeof doc === 'string' ? breakdownByDoc.get(doc) : undefined);
254
423
  });
255
424
  }
256
425
  /**
257
- * Batch-fetch the per-medium routine releases (tri.tri_release_qty) for a set of TRI
258
- * submissions and roll them up into air/water/land/underground-injection sums keyed by
259
- * doc_ctrl_num. getTriReleases makes this one request per call; searchTriReleases makes it
260
- * once per call, and only when includeReleaseBreakdown is set — an uncached tri_release_qty
261
- * query takes ~20 s upstream.
426
+ * Fetch the per-medium routine releases (tri.tri_release_qty) for a set of TRI submissions and
427
+ * roll them up into air/water/land/underground-injection sums keyed by doc_ctrl_num.
428
+ * getTriReleases does this on every call; searchTriReleases only when includeReleaseBreakdown
429
+ * is set — an uncached tri_release_qty request takes ~18 s upstream.
430
+ *
431
+ * The submissions travel as one `doc_ctrl_num in` list per request, split so each request line
432
+ * stays within IN_LIST_REQUEST_LINE_BUDGET (about 230 thirteen-digit numbers per request). The
433
+ * chunks run BREAKDOWN_CONCURRENCY at a time against the call's deadline, and their rows merge
434
+ * into one rollup; the lists are disjoint, so no row is counted twice.
262
435
  *
263
436
  * Sparsity is preserved: a row flagged release_na="1" (medium not applicable) or carrying only
264
437
  * a release_range_code (no hard total_release) contributes nothing — a null quantity is never
265
438
  * coerced to 0.
266
439
  */
267
- async fetchReleaseBreakdown(docCtrlNums, ctx) {
268
- const url = this.buildTableUrl('tri', 'tri_release_qty', [{ column: 'doc_ctrl_num', operator: 'in', value: docCtrlNums.join(',') }], { first: 1, last: docCtrlNums.length * 30 });
269
- ctx.log.debug('DMAP TRI release-qty breakdown query', { submissions: docCtrlNums.length });
270
- const rows = await this.fetchTable(url, ctx);
440
+ async fetchReleaseBreakdown(docCtrlNums, ctx, budget) {
441
+ const urlFor = (docs) => this.buildTableUrl('tri', 'tri_release_qty', [{ column: 'doc_ctrl_num', operator: 'in', value: docs.join(',') }], { first: 1, last: docs.length * RELEASE_QTY_ROWS_PER_SUBMISSION });
442
+ const urls = [];
443
+ let chunk = [];
444
+ for (const doc of docCtrlNums) {
445
+ if (chunk.length > 0 &&
446
+ requestLineBytes(urlFor([...chunk, doc])) > IN_LIST_REQUEST_LINE_BUDGET) {
447
+ urls.push(urlFor(chunk));
448
+ chunk = [];
449
+ }
450
+ chunk.push(doc);
451
+ }
452
+ urls.push(urlFor(chunk));
453
+ ctx.log.debug('DMAP TRI release-qty breakdown query', {
454
+ submissions: docCtrlNums.length,
455
+ requests: urls.length,
456
+ });
457
+ const rows = [];
458
+ let next = 0;
459
+ let failed = false;
460
+ const worker = async () => {
461
+ while (!failed && next < urls.length) {
462
+ const url = urls[next++];
463
+ try {
464
+ rows.push(...(await this.fetchTable(url, ctx, budget)));
465
+ }
466
+ catch (error) {
467
+ // The call has already failed; start no further chunks.
468
+ failed = true;
469
+ throw error;
470
+ }
471
+ }
472
+ };
473
+ await Promise.all(Array.from({ length: Math.min(BREAKDOWN_CONCURRENCY, urls.length) }, worker));
271
474
  const byDoc = new Map();
272
475
  for (const row of rows) {
273
476
  const doc = row.doc_ctrl_num;
@@ -294,9 +497,11 @@ export class DmapService {
294
497
  * Search TRI releases by state, optionally filtered by county, year, or chemical.
295
498
  * tri.tri_reporting_form carries no state, so one request joins it to tri.tri_facility: the
296
499
  * state and county filters bind to the facility table, the year and chemical filters to the
297
- * forms, and the row range caps the joined rows at `limit`. However sparse the filters, the
298
- * search is one request; with includeReleaseBreakdown, one fetchReleaseBreakdown request adds
299
- * the per-medium routine releases to every kept record.
500
+ * forms, and the row range caps the joined rows at `limit`. Without `year` the joined rows are
501
+ * sorted newest reporting year first, so `limit` keeps the most recent filings; with `year` the
502
+ * request is unsorted (table order already pages deterministically). However sparse the
503
+ * filters, the search is one request; with includeReleaseBreakdown, fetchReleaseBreakdown adds
504
+ * the per-medium routine releases to every kept record (one request at the 200-record cap).
300
505
  */
301
506
  async searchTriReleases(params, ctx) {
302
507
  const limit = params.limit ?? 50;
@@ -307,7 +512,7 @@ export class DmapService {
307
512
  // DMAP matches county_name case-insensitively; `contains` catches states that store both a
308
513
  // bare and a suffixed form of one county (CALCASIEU / CALCASIEU PARISH), at the cost of
309
514
  // also matching a longer name that contains this one (LAKE / LAKE OF THE WOODS).
310
- facilityFilters.push({ column: 'county_name', operator: 'contains', value: params.county });
515
+ facilityFilters.push(containsFilter('county_name', params.county));
311
516
  }
312
517
  const formFilters = [];
313
518
  if (params.year !== undefined) {
@@ -319,23 +524,23 @@ export class DmapService {
319
524
  }
320
525
  if (params.chemicalName) {
321
526
  // actual field is cas_chem_name, not chemical_name_text
322
- formFilters.push({
323
- column: 'cas_chem_name',
324
- operator: 'contains',
325
- value: params.chemicalName,
326
- });
527
+ formFilters.push(containsFilter('cas_chem_name', params.chemicalName));
327
528
  }
328
- const url = this.buildTableUrl('tri', 'tri_facility', facilityFilters, { first: 1, last: limit }, {
329
- table: 'tri.tri_reporting_form',
330
- on: { left: 'tri_facility_id', right: 'tri_facility_id' },
331
- filters: formFilters,
332
- });
529
+ const budget = dmapBudget('TRI release search', 'Narrow it with year, county, or chemical_name, leave include_release_breakdown off, or call again later.');
333
530
  ctx.log.debug('DMAP TRI facility-form join query', {
334
531
  state: params.state,
335
532
  county: params.county,
336
533
  year: params.year,
337
534
  });
338
- const rows = await this.fetchTable(url, ctx);
535
+ // Joined rows carry both tables' columns, so the exact pass reads county and chemical alike.
536
+ const rows = await this.fetchMatchingRows((range) => this.buildTableUrl('tri', 'tri_facility', facilityFilters, range, {
537
+ join: {
538
+ table: 'tri.tri_reporting_form',
539
+ on: { left: 'tri_facility_id', right: 'tri_facility_id' },
540
+ filters: formFilters,
541
+ },
542
+ ...(params.year === undefined && { sort: NEWEST_FIRST }),
543
+ }), [...facilityFilters, ...formFilters], limit, ctx, budget);
339
544
  const kept = rows.slice(0, limit);
340
545
  const releases = kept.map((row) => ({
341
546
  ...normalizeTriRelease(row),
@@ -343,7 +548,7 @@ export class DmapService {
343
548
  ...(row.county_name && { countyName: row.county_name }),
344
549
  }));
345
550
  return params.includeReleaseBreakdown
346
- ? this.withReleaseBreakdown(kept, releases, ctx)
551
+ ? this.withReleaseBreakdown(kept, releases, ctx, budget)
347
552
  : releases;
348
553
  }
349
554
  /** Search Superfund sites by state or coordinates + radius. */
@@ -354,7 +559,7 @@ export class DmapService {
354
559
  filters.push({ column: 'fk_ref_state_code', operator: 'equals', value: params.state });
355
560
  }
356
561
  if (params.city) {
357
- filters.push({ column: 'city_name', operator: 'contains', value: params.city });
562
+ filters.push(containsFilter('city_name', params.city));
358
563
  }
359
564
  if (params.zipCode) {
360
565
  filters.push({ column: 'zip_code', operator: 'equals', value: params.zipCode });
@@ -374,12 +579,8 @@ export class DmapService {
374
579
  const pageSize = params.latitude !== undefined && params.longitude !== undefined
375
580
  ? Math.min(500, limit * 10)
376
581
  : limit;
377
- const url = this.buildTableUrl('sems', 'envirofacts_site', filters, {
378
- first: 1,
379
- last: pageSize,
380
- });
381
582
  ctx.log.debug('DMAP Superfund query', { state: params.state, lat: params.latitude });
382
- const rows = await this.fetchTable(url, ctx);
583
+ const rows = await this.fetchMatchingRows((range) => this.buildTableUrl('sems', 'envirofacts_site', filters, range), filters, pageSize, ctx, dmapBudget('Superfund site search', 'Narrow it with zip_code, city, or npl_status, or call again later.'));
383
584
  let sites = rows.map(normalizeSemsSite);
384
585
  if (params.latitude !== undefined && params.longitude !== undefined && params.radiusMiles) {
385
586
  const originLat = params.latitude;
@@ -397,7 +598,7 @@ export class DmapService {
397
598
  async searchSuperfundById(siteId, ctx) {
398
599
  const url = this.buildTableUrl('sems', 'envirofacts_site', [{ column: 'site_id', operator: 'equals', value: siteId }], { first: 1, last: 1 });
399
600
  ctx.log.debug('DMAP Superfund by ID', { siteId });
400
- const rows = await this.fetchTable(url, ctx);
601
+ const rows = await this.fetchTable(url, ctx, dmapBudget('Superfund site lookup', 'Call again later.'));
401
602
  return rows.map(normalizeSemsSite);
402
603
  }
403
604
  /** Search drinking water systems by state or ZIP code. */
@@ -421,16 +622,17 @@ export class DmapService {
421
622
  }
422
623
  if (filters.length === 0)
423
624
  return [];
625
+ const budget = dmapBudget('water system search', 'Narrow it with zip_code or pws_type, or call again later.');
424
626
  // sdwis.violation has no zip column: a ZIP's systems are checked by PWSID, a state is scanned.
425
627
  if (params.hasViolation && params.zipCode) {
426
- return this.searchViolatingWaterSystemsInZip(params.zipCode, filters, limit, ctx);
628
+ return this.searchViolatingWaterSystemsInZip(params.zipCode, filters, limit, ctx, budget);
427
629
  }
428
630
  if (params.hasViolation && params.state) {
429
- return this.searchViolatingWaterSystems(params.state, filters, limit, ctx);
631
+ return this.searchViolatingWaterSystems(params.state, filters, limit, ctx, budget);
430
632
  }
431
633
  const url = this.buildTableUrl('sdwis', 'water_system', filters, { first: 1, last: limit });
432
634
  ctx.log.debug('DMAP water systems query', { state: params.state });
433
- const rows = await this.fetchTable(url, ctx);
635
+ const rows = await this.fetchTable(url, ctx, budget);
434
636
  return rows.slice(0, limit).map((r) => normalizeSdwisWaterSystem(r));
435
637
  }
436
638
  /**
@@ -440,10 +642,10 @@ export class DmapService {
440
642
  * at most 1 + VIOLATION_SCAN_ROWS / PWSID_CHUNK_SIZE requests. A state with more open violation
441
643
  * rows than the scan reads can have violators it never sees; the result then carries a notice.
442
644
  */
443
- async searchViolatingWaterSystems(state, filters, limit, ctx) {
645
+ async searchViolatingWaterSystems(state, filters, limit, ctx, budget) {
444
646
  const violUrl = this.buildTableUrl('sdwis', 'violation', [{ column: 'primacy_agency_code', operator: 'equals', value: state }, OPEN_VIOLATION_FILTER], { first: 1, last: VIOLATION_SCAN_ROWS });
445
647
  ctx.log.debug('DMAP SDWIS violation query', { state });
446
- const violRows = await this.fetchTable(violUrl, ctx);
648
+ const violRows = await this.fetchTable(violUrl, ctx, budget);
447
649
  const violatingPwsids = pwsidSet(violRows);
448
650
  if (violRows.length >= VIOLATION_SCAN_ROWS) {
449
651
  ctx.enrich.notice(`The violation check stopped at the first ${VIOLATION_SCAN_ROWS.toLocaleString('en-US')} of ${state}'s open SDWIS violation records, which name ${violatingPwsids.size} distinct systems. Records past that point were not read, so these results may not include every system with an open violation in the state.`);
@@ -454,7 +656,7 @@ export class DmapService {
454
656
  const chunk = ids.slice(i, i + PWSID_CHUNK_SIZE);
455
657
  const url = this.buildTableUrl('sdwis', 'water_system', [...filters, { column: 'pwsid', operator: 'in', value: chunk.join(',') }], { first: 1, last: limit - systems.length });
456
658
  ctx.log.debug('DMAP water systems query', { state, chunkStart: i, chunkSize: chunk.length });
457
- const rows = await this.fetchTable(url, ctx);
659
+ const rows = await this.fetchTable(url, ctx, budget);
458
660
  for (const row of rows.slice(0, limit - systems.length)) {
459
661
  systems.push(normalizeSdwisWaterSystem(row, violatingPwsids));
460
662
  }
@@ -468,13 +670,13 @@ export class DmapService {
468
670
  * past the system read, or a chunk whose violation rows fill VIOLATION_SCAN_ROWS, can hide
469
671
  * violators; the result then carries a notice.
470
672
  */
471
- async searchViolatingWaterSystemsInZip(zipCode, filters, limit, ctx) {
673
+ async searchViolatingWaterSystemsInZip(zipCode, filters, limit, ctx, budget) {
472
674
  const url = this.buildTableUrl('sdwis', 'water_system', filters, {
473
675
  first: 1,
474
676
  last: ZIP_SYSTEM_SCAN_ROWS,
475
677
  });
476
678
  ctx.log.debug('DMAP water systems query', { zipCode });
477
- const zipRows = await this.fetchTable(url, ctx);
679
+ const zipRows = await this.fetchTable(url, ctx, budget);
478
680
  const notices = [];
479
681
  if (zipRows.length >= ZIP_SYSTEM_SCAN_ROWS) {
480
682
  notices.push(`The violation check read only the first ${ZIP_SYSTEM_SCAN_ROWS.toLocaleString('en-US')} water systems in ZIP ${zipCode}; systems past that point were not checked.`);
@@ -493,7 +695,7 @@ export class DmapService {
493
695
  chunkStart: i,
494
696
  chunkSize: chunk.length,
495
697
  });
496
- const violRows = await this.fetchTable(violUrl, ctx);
698
+ const violRows = await this.fetchTable(violUrl, ctx, budget);
497
699
  if (violRows.length >= VIOLATION_SCAN_ROWS)
498
700
  truncatedChunk = true;
499
701
  const violatingPwsids = pwsidSet(violRows);
@@ -1 +1 @@
1
- {"version":3,"file":"dmap-service.js","sourceRoot":"","sources":["../../../src/services/dmap/dmap-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dmap-service.js","sourceRoot":"","sources":["../../../src/services/dmap/dmap-service.ts"],"names":[],"mappings":"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"}