@cliwant/mcp-sam-gov 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/LICENSE +21 -21
  2. package/README.ja.md +48 -16
  3. package/README.ko.md +48 -16
  4. package/README.md +226 -64
  5. package/dist/attachments.d.ts +63 -0
  6. package/dist/attachments.d.ts.map +1 -0
  7. package/dist/attachments.js +576 -0
  8. package/dist/attachments.js.map +1 -0
  9. package/dist/bls.d.ts +267 -0
  10. package/dist/bls.d.ts.map +1 -0
  11. package/dist/bls.js +1549 -0
  12. package/dist/bls.js.map +1 -0
  13. package/dist/cache.d.ts +2 -0
  14. package/dist/cache.d.ts.map +1 -1
  15. package/dist/cache.js +4 -0
  16. package/dist/cache.js.map +1 -1
  17. package/dist/census.d.ts +182 -0
  18. package/dist/census.d.ts.map +1 -0
  19. package/dist/census.js +576 -0
  20. package/dist/census.js.map +1 -0
  21. package/dist/ckan.d.ts +141 -0
  22. package/dist/ckan.d.ts.map +1 -0
  23. package/dist/ckan.js +393 -0
  24. package/dist/ckan.js.map +1 -0
  25. package/dist/clinicaltrials.d.ts +180 -0
  26. package/dist/clinicaltrials.d.ts.map +1 -0
  27. package/dist/clinicaltrials.js +730 -0
  28. package/dist/clinicaltrials.js.map +1 -0
  29. package/dist/cms.d.ts +140 -0
  30. package/dist/cms.d.ts.map +1 -0
  31. package/dist/cms.js +482 -0
  32. package/dist/cms.js.map +1 -0
  33. package/dist/coerce.d.ts +32 -0
  34. package/dist/coerce.d.ts.map +1 -0
  35. package/dist/coerce.js +50 -0
  36. package/dist/coerce.js.map +1 -0
  37. package/dist/datagov-catalog.d.ts +84 -0
  38. package/dist/datagov-catalog.d.ts.map +1 -0
  39. package/dist/datagov-catalog.js +233 -0
  40. package/dist/datagov-catalog.js.map +1 -0
  41. package/dist/datagov.d.ts +146 -0
  42. package/dist/datagov.d.ts.map +1 -0
  43. package/dist/datagov.js +689 -0
  44. package/dist/datagov.js.map +1 -0
  45. package/dist/datagovKey.d.ts +36 -0
  46. package/dist/datagovKey.d.ts.map +1 -0
  47. package/dist/datagovKey.js +60 -0
  48. package/dist/datagovKey.js.map +1 -0
  49. package/dist/datasource.d.ts +313 -0
  50. package/dist/datasource.d.ts.map +1 -0
  51. package/dist/datasource.js +551 -0
  52. package/dist/datasource.js.map +1 -0
  53. package/dist/disclosure.d.ts +55 -0
  54. package/dist/disclosure.d.ts.map +1 -0
  55. package/dist/disclosure.js +57 -0
  56. package/dist/disclosure.js.map +1 -0
  57. package/dist/ecfr.d.ts +4 -2
  58. package/dist/ecfr.d.ts.map +1 -1
  59. package/dist/ecfr.js +74 -1
  60. package/dist/ecfr.js.map +1 -1
  61. package/dist/echo.d.ts +143 -0
  62. package/dist/echo.d.ts.map +1 -0
  63. package/dist/echo.js +424 -0
  64. package/dist/echo.js.map +1 -0
  65. package/dist/edgar.d.ts +377 -0
  66. package/dist/edgar.d.ts.map +1 -0
  67. package/dist/edgar.js +2418 -0
  68. package/dist/edgar.js.map +1 -0
  69. package/dist/errors.d.ts +26 -0
  70. package/dist/errors.d.ts.map +1 -1
  71. package/dist/errors.js +69 -1
  72. package/dist/errors.js.map +1 -1
  73. package/dist/fac.d.ts +180 -0
  74. package/dist/fac.d.ts.map +1 -0
  75. package/dist/fac.js +416 -0
  76. package/dist/fac.js.map +1 -0
  77. package/dist/far.d.ts +170 -0
  78. package/dist/far.d.ts.map +1 -0
  79. package/dist/far.js +804 -0
  80. package/dist/far.js.map +1 -0
  81. package/dist/fdic.d.ts +599 -0
  82. package/dist/fdic.d.ts.map +1 -0
  83. package/dist/fdic.js +1624 -0
  84. package/dist/fdic.js.map +1 -0
  85. package/dist/federal-register.d.ts +139 -2
  86. package/dist/federal-register.d.ts.map +1 -1
  87. package/dist/federal-register.js +419 -3
  88. package/dist/federal-register.js.map +1 -1
  89. package/dist/fema.d.ts +181 -0
  90. package/dist/fema.d.ts.map +1 -0
  91. package/dist/fema.js +436 -0
  92. package/dist/fema.js.map +1 -0
  93. package/dist/fpds.d.ts +108 -0
  94. package/dist/fpds.d.ts.map +1 -0
  95. package/dist/fpds.js +519 -0
  96. package/dist/fpds.js.map +1 -0
  97. package/dist/gao.d.ts +64 -0
  98. package/dist/gao.d.ts.map +1 -0
  99. package/dist/gao.js +640 -0
  100. package/dist/gao.js.map +1 -0
  101. package/dist/govinfo.d.ts +111 -0
  102. package/dist/govinfo.d.ts.map +1 -0
  103. package/dist/govinfo.js +422 -0
  104. package/dist/govinfo.js.map +1 -0
  105. package/dist/grants.d.ts +27 -4
  106. package/dist/grants.d.ts.map +1 -1
  107. package/dist/grants.js +111 -6
  108. package/dist/grants.js.map +1 -1
  109. package/dist/gsa-csv.d.ts +249 -0
  110. package/dist/gsa-csv.d.ts.map +1 -0
  111. package/dist/gsa-csv.js +784 -0
  112. package/dist/gsa-csv.js.map +1 -0
  113. package/dist/integrity.d.ts +212 -0
  114. package/dist/integrity.d.ts.map +1 -0
  115. package/dist/integrity.js +707 -0
  116. package/dist/integrity.js.map +1 -0
  117. package/dist/meta.d.ts +165 -0
  118. package/dist/meta.d.ts.map +1 -0
  119. package/dist/meta.js +162 -0
  120. package/dist/meta.js.map +1 -0
  121. package/dist/nih.d.ts +117 -0
  122. package/dist/nih.d.ts.map +1 -0
  123. package/dist/nih.js +291 -0
  124. package/dist/nih.js.map +1 -0
  125. package/dist/nppes.d.ts +157 -0
  126. package/dist/nppes.d.ts.map +1 -0
  127. package/dist/nppes.js +648 -0
  128. package/dist/nppes.js.map +1 -0
  129. package/dist/nsf.d.ts +176 -0
  130. package/dist/nsf.d.ts.map +1 -0
  131. package/dist/nsf.js +554 -0
  132. package/dist/nsf.js.map +1 -0
  133. package/dist/nvd.d.ts +176 -0
  134. package/dist/nvd.d.ts.map +1 -0
  135. package/dist/nvd.js +912 -0
  136. package/dist/nvd.js.map +1 -0
  137. package/dist/ofac.d.ts +205 -0
  138. package/dist/ofac.d.ts.map +1 -0
  139. package/dist/ofac.js +919 -0
  140. package/dist/ofac.js.map +1 -0
  141. package/dist/pricing.d.ts +110 -0
  142. package/dist/pricing.d.ts.map +1 -0
  143. package/dist/pricing.js +843 -0
  144. package/dist/pricing.js.map +1 -0
  145. package/dist/sam-gov/client.d.ts +60 -2
  146. package/dist/sam-gov/client.d.ts.map +1 -1
  147. package/dist/sam-gov/client.js +320 -54
  148. package/dist/sam-gov/client.js.map +1 -1
  149. package/dist/sam-gov/index.d.ts +1 -1
  150. package/dist/sam-gov/index.d.ts.map +1 -1
  151. package/dist/sam-gov/index.js +1 -1
  152. package/dist/sam-gov/index.js.map +1 -1
  153. package/dist/sam-gov/types.d.ts +24 -0
  154. package/dist/sam-gov/types.d.ts.map +1 -1
  155. package/dist/sba.d.ts +72 -0
  156. package/dist/sba.d.ts.map +1 -0
  157. package/dist/sba.js +281 -0
  158. package/dist/sba.js.map +1 -0
  159. package/dist/server.d.ts +14 -2
  160. package/dist/server.d.ts.map +1 -1
  161. package/dist/server.js +3889 -296
  162. package/dist/server.js.map +1 -1
  163. package/dist/snapshot.d.ts +98 -0
  164. package/dist/snapshot.d.ts.map +1 -0
  165. package/dist/snapshot.js +146 -0
  166. package/dist/snapshot.js.map +1 -0
  167. package/dist/socrata.d.ts +157 -0
  168. package/dist/socrata.d.ts.map +1 -0
  169. package/dist/socrata.js +448 -0
  170. package/dist/socrata.js.map +1 -0
  171. package/dist/treasury.d.ts +143 -0
  172. package/dist/treasury.d.ts.map +1 -0
  173. package/dist/treasury.js +436 -0
  174. package/dist/treasury.js.map +1 -0
  175. package/dist/usaspending.d.ts +260 -65
  176. package/dist/usaspending.d.ts.map +1 -1
  177. package/dist/usaspending.js +1629 -201
  178. package/dist/usaspending.js.map +1 -1
  179. package/dist/usitc.d.ts +142 -0
  180. package/dist/usitc.d.ts.map +1 -0
  181. package/dist/usitc.js +339 -0
  182. package/dist/usitc.js.map +1 -0
  183. package/package.json +24 -2
  184. package/src/attachments.ts +652 -0
  185. package/src/bls.ts +1943 -0
  186. package/src/cache.ts +5 -0
  187. package/src/census.ts +735 -0
  188. package/src/ckan.ts +495 -0
  189. package/src/clinicaltrials.ts +923 -0
  190. package/src/cms.ts +634 -0
  191. package/src/coerce.ts +47 -0
  192. package/src/datagov-catalog.ts +296 -0
  193. package/src/datagov.ts +907 -0
  194. package/src/datagovKey.ts +68 -0
  195. package/src/datasource.ts +721 -0
  196. package/src/disclosure.ts +61 -0
  197. package/src/ecfr.ts +98 -1
  198. package/src/echo.ts +496 -0
  199. package/src/edgar.ts +3014 -0
  200. package/src/errors.ts +84 -1
  201. package/src/fac.ts +529 -0
  202. package/src/far.ts +1007 -0
  203. package/src/fdic.ts +2052 -0
  204. package/src/federal-register.ts +512 -3
  205. package/src/fema.ts +541 -0
  206. package/src/fpds.ts +620 -0
  207. package/src/gao.ts +744 -0
  208. package/src/govinfo.ts +497 -0
  209. package/src/grants.ts +139 -7
  210. package/src/gsa-csv.ts +992 -0
  211. package/src/integrity.ts +928 -0
  212. package/src/meta.ts +292 -0
  213. package/src/nih.ts +375 -0
  214. package/src/nppes.ts +834 -0
  215. package/src/nsf.ts +706 -0
  216. package/src/nvd.ts +1124 -0
  217. package/src/ofac.ts +1166 -0
  218. package/src/pricing.ts +1075 -0
  219. package/src/sam-gov/client.ts +345 -63
  220. package/src/sam-gov/index.ts +5 -1
  221. package/src/sam-gov/types.ts +22 -0
  222. package/src/sba.ts +357 -0
  223. package/src/server.ts +4551 -328
  224. package/src/snapshot.ts +192 -0
  225. package/src/socrata.ts +532 -0
  226. package/src/treasury.ts +575 -0
  227. package/src/usaspending.ts +1946 -214
  228. package/src/usitc.ts +420 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
@@ -19,13 +19,23 @@ export declare class SamGovClient {
19
19
  private readonly fetchImpl;
20
20
  private readonly logger;
21
21
  constructor(options?: SamGovClientOptions);
22
+ /**
23
+ * True when no SAM API key is configured, i.e. requests fall back to the
24
+ * keyless HAL layer. The keyless list endpoint ignores the structured
25
+ * facet filters (NAICS / set-aside / state / org) and nulls those fields,
26
+ * so tools use this to populate an honest `_meta` (filtersDropped /
27
+ * fieldsUnavailable). See docs/research/02-truthful-outputs-spec.md §1.2.
28
+ */
29
+ get isKeyless(): boolean;
22
30
  /**
23
31
  * Search SAM.gov opportunities.
24
32
  *
25
33
  * Three-tier fallback:
26
34
  * 1. Authenticated v2 search (if `apiKey` configured)
27
- * 2. Keyless HAL search
28
- * 3. Empty result (caller can decide how to surface "no data")
35
+ * 2. Keyless HAL search — returned AS-IS (a genuine 0 or an empty page
36
+ * past the end is an honest result, not a fallback trigger)
37
+ * 3. Only if EVERY tier throws (total outage): an empty result carrying
38
+ * `degraded` so the caller surfaces an outage, NOT a confirmed zero.
29
39
  */
30
40
  searchOpportunities(filters: SamSearchFilters): Promise<SamSearchResult>;
31
41
  /**
@@ -61,9 +71,57 @@ export declare class SamGovClient {
61
71
  private buildAuthSearchUrl;
62
72
  private searchPublic;
63
73
  private getOpportunityPublic;
74
+ /**
75
+ * Fetch the public attachment-download URLs for a notice.
76
+ *
77
+ * TRUTHFULNESS (DOWN-reads-as-absent guard): this is called ONLY after the
78
+ * detail endpoint already 200'd (the notice exists). The resources endpoint
79
+ * then returns HTTP 200 for every real notice — a genuine NO-attachment
80
+ * notice is 200 with an empty list. So any non-200 (or a network fault) here
81
+ * is an OUTAGE, never a genuine "no attachments", and MUST NOT be swallowed
82
+ * into `[]` — that would let a DOWN list-fetch read as "no documents" and an
83
+ * AI skip a solicitation whose RFP it could have read. We THROW on non-200
84
+ * and let a network error propagate; the caller (getOpportunityPublic / the
85
+ * auth tier) catches it INDIVIDUALLY and records the degradation. A 200 →
86
+ * the genuine links, which MAY be `[]` (an honest empty, disclosed as such).
87
+ */
64
88
  private getPublicResourceLinks;
89
+ /**
90
+ * Resolve an awarding-organization id to its canonical path/name.
91
+ *
92
+ * TRUTHFULNESS (same guard as getPublicResourceLinks): a genuine org with no
93
+ * path → 200 + empty field; a non-200/network fault → an OUTAGE. Do NOT
94
+ * swallow the outage into `""` (that reads as "no organization" when the
95
+ * fetch was DOWN). THROW on non-200; let a network error propagate. The
96
+ * caller catches it INDIVIDUALLY and records the degradation. A 200 → the
97
+ * name, which MAY be `""` (an honest empty).
98
+ */
65
99
  private getPublicOrgName;
66
100
  private publicHeaders;
67
101
  private warn;
68
102
  }
103
+ /**
104
+ * Whole days from `now` to an ISO `responseDeadline`. Returns null when the
105
+ * deadline is missing/unparseable (a null day count is COUNTED, never hidden —
106
+ * the shaping radar surfaces deadline-less notices rather than dropping them).
107
+ * Uses UTC-midnight flooring on both ends so the count is a stable whole number
108
+ * regardless of intraday time-of-day. Negative when the deadline is in the past.
109
+ */
110
+ export declare function daysUntilResponse(deadline: string | null | undefined, now?: Date): number | null;
111
+ /**
112
+ * Client-side response-deadline WINDOW filter for the shaping radar.
113
+ *
114
+ * The keyless SGS feed IGNORES rdlfrom/rdlto (VERIFIED LIVE 2026-07: a
115
+ * notice_type=r query with rdlfrom/rdlto returns the same total and deadlines
116
+ * outside the requested window), so a response-deadline window MUST be applied
117
+ * over the already-fetched page and DISCLOSED (the server flags
118
+ * `_meta.filtersDropped:["responseDeadline"]`). Bounds are inclusive ISO dates.
119
+ *
120
+ * A notice with NO deadline is EXCLUDED from a windowed query (it cannot be
121
+ * proven inside the window) — the caller discloses this. When neither bound is
122
+ * given, the page is returned unchanged (no window requested).
123
+ */
124
+ export declare function applyResponseDeadlineWindow<T extends {
125
+ responseDeadline?: string | null;
126
+ }>(notices: T[], from?: string, to?: string): T[];
69
127
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sam-gov/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AASpB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkD;gBAE7D,OAAO,GAAE,mBAAwB;IAO7C;;;;;;;OAOG;IACG,mBAAmB,CACvB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IA2B3B;;;;;;;OAOG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAqCtE;;;;;;;OAOG;IACG,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsDjE;;;;OAIG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkDhE;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAM7C,OAAO,CAAC,kBAAkB;YA2BZ,YAAY;YAyEZ,oBAAoB;YA8DpB,sBAAsB;YAwBtB,gBAAgB;IAuB9B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,IAAI;CAGb"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sam-gov/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AASpB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkD;gBAE7D,OAAO,GAAE,mBAAwB;IAO7C;;;;;;OAMG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;;;;;;OASG;IACG,mBAAmB,CACvB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IAoC3B;;;;;;;OAOG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA8DtE;;;;;;;OAOG;IACG,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6EjE;;;;OAIG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkDhE;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAM7C,OAAO,CAAC,kBAAkB;YA2BZ,YAAY;YAkHZ,oBAAoB;IA8JlC;;;;;;;;;;;;;OAaG;YACW,sBAAsB;IAmBpC;;;;;;;;;OASG;YACW,gBAAgB;IAkB9B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,IAAI;CAGb;AAID;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,GAAG,GAAE,IAAiB,GACrB,MAAM,GAAG,IAAI,CAiBf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CACzC,CAAC,SAAS;IAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC9C,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAY/C"}
@@ -12,6 +12,7 @@
12
12
  * The client picks layer 1 if an API key is available, falling back
13
13
  * to layer 2 transparently. Callers don't have to care.
14
14
  */
15
+ import { ToolErrorCarrier } from "../errors.js";
15
16
  const PROD_BASE = "https://api.sam.gov/opportunities/v2/search";
16
17
  const ENTITY_BASE = "https://api.sam.gov/entity-information/v3/entities";
17
18
  const PUBLIC_BASE = "https://sam.gov/api/prod";
@@ -27,13 +28,25 @@ export class SamGovClient {
27
28
  this.fetchImpl = options.fetch ?? globalThis.fetch.bind(globalThis);
28
29
  this.logger = options.logger ?? {};
29
30
  }
31
+ /**
32
+ * True when no SAM API key is configured, i.e. requests fall back to the
33
+ * keyless HAL layer. The keyless list endpoint ignores the structured
34
+ * facet filters (NAICS / set-aside / state / org) and nulls those fields,
35
+ * so tools use this to populate an honest `_meta` (filtersDropped /
36
+ * fieldsUnavailable). See docs/research/02-truthful-outputs-spec.md §1.2.
37
+ */
38
+ get isKeyless() {
39
+ return !this.apiKey;
40
+ }
30
41
  /**
31
42
  * Search SAM.gov opportunities.
32
43
  *
33
44
  * Three-tier fallback:
34
45
  * 1. Authenticated v2 search (if `apiKey` configured)
35
- * 2. Keyless HAL search
36
- * 3. Empty result (caller can decide how to surface "no data")
46
+ * 2. Keyless HAL search — returned AS-IS (a genuine 0 or an empty page
47
+ * past the end is an honest result, not a fallback trigger)
48
+ * 3. Only if EVERY tier throws (total outage): an empty result carrying
49
+ * `degraded` so the caller surfaces an outage, NOT a confirmed zero.
37
50
  */
38
51
  async searchOpportunities(filters) {
39
52
  if (this.apiKey) {
@@ -51,19 +64,26 @@ export class SamGovClient {
51
64
  }
52
65
  }
53
66
  try {
54
- const r = await this.searchPublic(filters);
55
- if (r.opportunitiesData.length > 0)
56
- return r;
67
+ // Return the public result AS-IS — even 0 rows. A genuine zero
68
+ // (source healthy, query matched nothing) and a real `totalRecords>0`
69
+ // but empty page (paging past the end) are both HONEST outcomes and
70
+ // must not be replaced by a hardcoded 0. Only a THROW below (all tiers
71
+ // failed) is an outage, which we mark `degraded` so callers can tell it
72
+ // apart from a genuine zero instead of silently reporting "0, complete".
73
+ return await this.searchPublic(filters);
57
74
  }
58
75
  catch (err) {
59
76
  this.warn("public search failed", err);
77
+ return {
78
+ totalRecords: 0,
79
+ limit: filters.limit ?? 25,
80
+ offset: filters.offset ?? 0,
81
+ opportunitiesData: [],
82
+ degraded: {
83
+ reason: "SAM opportunity search is unavailable (all access tiers failed).",
84
+ },
85
+ };
60
86
  }
61
- return {
62
- totalRecords: 0,
63
- limit: filters.limit ?? 25,
64
- offset: filters.offset ?? 0,
65
- opportunitiesData: [],
66
- };
67
87
  }
68
88
  /**
69
89
  * Resolve a single opportunity by `noticeId` (32-char hex).
@@ -93,7 +113,16 @@ export class SamGovClient {
93
113
  const hit = json.opportunitiesData?.[0];
94
114
  if (hit) {
95
115
  if (!hit.resourceLinks || hit.resourceLinks.length === 0) {
96
- hit.resourceLinks = await this.getPublicResourceLinks(noticeId);
116
+ // Same DOWN-reads-as-absent guard on the keyed path: a failed
117
+ // resource-list fetch is an outage, not "no attachments" —
118
+ // record the degradation instead of silently returning `[]`.
119
+ hit.resourceLinks = await this.getPublicResourceLinks(noticeId).catch(() => {
120
+ hit.enrichmentDegraded = [
121
+ ...(hit.enrichmentDegraded ?? []),
122
+ "attachments",
123
+ ];
124
+ return [];
125
+ });
97
126
  }
98
127
  return hit;
99
128
  }
@@ -103,12 +132,27 @@ export class SamGovClient {
103
132
  this.warn("auth getOpportunity failed, trying public", err);
104
133
  }
105
134
  }
135
+ // getOpportunityPublic returns null ONLY for a genuine not-found (401/404);
136
+ // an outage (5xx/network/timeout/hollow-200) THROWS a classified
137
+ // ToolErrorCarrier. That throw MUST propagate — collapsing it to null would
138
+ // make the wrapper render a DOWN service as found:false (a fabricated
139
+ // absence). A genuine null still passes through unchanged.
106
140
  try {
107
141
  return await this.getOpportunityPublic(noticeId);
108
142
  }
109
143
  catch (err) {
110
144
  this.warn("public getOpportunity failed", err);
111
- return null;
145
+ if (err instanceof ToolErrorCarrier)
146
+ throw err;
147
+ // A raw/unclassified error must not become a silent null either —
148
+ // classify it as a retryable outage so the caller learns the truth.
149
+ throw new ToolErrorCarrier({
150
+ kind: "upstream_unavailable",
151
+ message: `SAM detail lookup for ${noticeId} failed: ${err.message}. This is an outage, not a confirmed absence. Retry.`,
152
+ retryable: true,
153
+ retryAfterSeconds: 30,
154
+ upstreamEndpoint: "sam:opps/v2/opportunities",
155
+ });
112
156
  }
113
157
  }
114
158
  /**
@@ -141,8 +185,19 @@ export class SamGovClient {
141
185
  }
142
186
  try {
143
187
  const r = await this.fetchImpl(finalUrl, { headers });
144
- if (!r.ok)
145
- return "Description not available.";
188
+ // A DOWN description fetch must ERROR, never fabricate a "not available"
189
+ // placeholder that reads as "this description doesn't exist". THROW a
190
+ // classified retryable outage; the wrapper propagates it to a tool error.
191
+ if (!r.ok) {
192
+ throw new ToolErrorCarrier({
193
+ kind: "upstream_unavailable",
194
+ message: `SAM description fetch returned HTTP ${r.status} for ${finalUrl} — the service is unavailable, NOT an absent description. Retry.`,
195
+ retryable: true,
196
+ retryAfterSeconds: 60,
197
+ upstreamStatus: r.status,
198
+ upstreamEndpoint: "sam:description",
199
+ });
200
+ }
146
201
  const ct = r.headers.get("content-type") ?? "";
147
202
  if (ct.includes("application/json") || ct.includes("application/hal+json")) {
148
203
  const json = (await r.json());
@@ -165,7 +220,19 @@ export class SamGovClient {
165
220
  }
166
221
  catch (err) {
167
222
  this.warn("fetchOpportunityDescription failed", err);
168
- return "Description not available.";
223
+ // A classified outage (from the !r.ok throw above) propagates as-is. A raw
224
+ // network/parse fault must ALSO error (not fabricate "not available") —
225
+ // classify it as a retryable outage so a DOWN fetch is never read as an
226
+ // absent description.
227
+ if (err instanceof ToolErrorCarrier)
228
+ throw err;
229
+ throw new ToolErrorCarrier({
230
+ kind: "upstream_unavailable",
231
+ message: `SAM description fetch for ${finalUrl} failed: ${err.message}. This is an outage, not an absent description. Retry.`,
232
+ retryable: true,
233
+ retryAfterSeconds: 30,
234
+ upstreamEndpoint: "sam:description",
235
+ });
169
236
  }
170
237
  }
171
238
  /**
@@ -251,24 +318,63 @@ export class SamGovClient {
251
318
  url.searchParams.set("sort", "-modifiedDate");
252
319
  url.searchParams.set("size", String(filters.limit ?? 25));
253
320
  url.searchParams.set("is_active", "true");
321
+ // Keyless HAL facet params — VERIFIED LIVE (2026-07). The list endpoint
322
+ // honors these server-side: result counts drop correctly AND every returned
323
+ // notice's detail matches the filter (e.g. naics=236220 → all hits carry
324
+ // primary NAICS 236220). The param NAMES differ from the authenticated v2
325
+ // API's, and a wrong name is SILENTLY IGNORED (returns the full firehose):
326
+ // NAICS → `naics` (NOT `naics_code`/`ncode` — both ignored)
327
+ // place-of-perf → `pop_state` (NOT `place_of_performance_state`; value
328
+ // must be the UPPER-CASE 2-letter code)
329
+ // set-aside → `set_aside` (repeatable; SAM codes: SBA/8A/HZS/HZC/
330
+ // SDVOSBC/WOSB/EDWOSB/VSA/VSS — all verified)
331
+ // keyword → `q`
332
+ // Organization-name has NO keyless filter param (organization_name and
333
+ // organizationName are both ignored) — sent best-effort; the tool's `_meta`
334
+ // flags it as dropped so the AI never treats the set as org-filtered.
254
335
  if (filters.query)
255
336
  url.searchParams.set("q", filters.query);
256
337
  if (filters.ncode)
257
- url.searchParams.append("naics_code", filters.ncode);
338
+ url.searchParams.append("naics", filters.ncode);
258
339
  if (filters.organizationName)
259
340
  url.searchParams.set("organization_name", filters.organizationName);
260
341
  if (filters.setAside?.length)
261
342
  for (const sa of filters.setAside)
262
343
  url.searchParams.append("set_aside", sa);
263
344
  if (filters.state)
264
- url.searchParams.set("place_of_performance_state", filters.state);
345
+ url.searchParams.set("pop_state", filters.state.toUpperCase());
346
+ // Notice-type facet — VERIFIED LIVE (2026-07): the keyless list endpoint
347
+ // filters SERVER-SIDE on `notice_type` (comma-joined multi-value). Codes:
348
+ // r=Sources Sought, p=Presolicitation, s=Special Notice, k=Combined
349
+ // Synopsis/Solicitation, i=Intent to Bundle, u=Justification(J&A),
350
+ // o=Solicitation, a=Award. (e.g. notice_type=r → 3,641; r,p,s → 10,603;
351
+ // p&naics=541512 → 8 — counts drop correctly and every row matches.) The
352
+ // keyless param is `notice_type` — NOT `ptype` (the AUTHENTICATED endpoint's
353
+ // name, sent by buildAuthSearchUrl). ADDITIVE: existing callers that don't
354
+ // set `ptype` (e.g. sam_search_opportunities) send nothing here, so their
355
+ // behavior is UNCHANGED. Powers the pre-solicitation shaping radar
356
+ // (sam_search_shaping).
357
+ if (filters.ptype?.length)
358
+ url.searchParams.set("notice_type", filters.ptype.join(","));
265
359
  const r = await this.fetchImpl(url.toString(), {
266
360
  headers: this.publicHeaders(),
267
361
  });
268
362
  if (!r.ok)
269
363
  throw new Error(`SAM.gov public search ${r.status}`);
270
364
  const json = (await r.json());
271
- const totalRecords = json.page?.totalElements ?? 0;
365
+ // A 200 whose body lacks a well-formed HAL `page` block is NOT a genuine
366
+ // zero — it's a hollow/degraded response (a CloudFront/Envoy cached error
367
+ // envelope, a `{"message":"Access Denied"}` 200, or a dropped-`page` proxy
368
+ // body; the endpoint sits behind CloudFront→istio-envoy). A GENUINE empty
369
+ // result always carries `page.totalElements` (0); a healthy hit carries a
370
+ // positive one. So treat a non-finite `totalElements` as an OUTAGE (throw)
371
+ // — searchOpportunities' catch then marks it `degraded` instead of emitting
372
+ // the "0 notices, complete" lie. Mirrors far.ts's hollow-200 guard.
373
+ const totalElements = json.page?.totalElements;
374
+ if (!Number.isFinite(totalElements)) {
375
+ throw new Error("SAM.gov public search returned HTTP 200 without a valid page.totalElements — hollow/degraded body, not a genuine zero.");
376
+ }
377
+ const totalRecords = totalElements;
272
378
  const results = json._embedded?.results ?? [];
273
379
  const data = results.map((r) => {
274
380
  const hierarchy = (r.organizationHierarchy ?? [])
@@ -303,17 +409,111 @@ export class SamGovClient {
303
409
  }
304
410
  async getOpportunityPublic(noticeId) {
305
411
  const url = `${PUBLIC_BASE}/opps/v2/opportunities/${encodeURIComponent(noticeId)}`;
306
- const r = await this.fetchImpl(url, { headers: this.publicHeaders() });
307
- if (!r.ok)
412
+ // A network-level fault (DNS/socket/timeout) must surface as a classified
413
+ // retryable outage, NOT collapse to null (which the wrapper renders as
414
+ // "notice not found"). Mirrors far.ts/fetchWithRetry's network branch.
415
+ let r;
416
+ try {
417
+ r = await this.fetchImpl(url, { headers: this.publicHeaders() });
418
+ }
419
+ catch (err) {
420
+ throw new ToolErrorCarrier({
421
+ kind: "upstream_unavailable",
422
+ message: `Network error reaching the SAM detail endpoint for ${noticeId}: ${err.message}. This is an outage, not a confirmed absence. Retry.`,
423
+ retryable: true,
424
+ retryAfterSeconds: 30,
425
+ upstreamEndpoint: "sam:opps/v2/opportunities",
426
+ });
427
+ }
428
+ // LIVE-GROUNDED mapping (re-verified 2026-07-04): a real 32-hex id → 200 +
429
+ // data2.title, STABLE; the endpoint's ABSENT vocabulary (across ~20 bogus/
430
+ // malformed/hostile ids, incl. SQLi/XSS/traversal) is STRICTLY:
431
+ // • 401 UNAUTHORIZED "Error occured while get..." (most bogus/malformed ids)
432
+ // • 400 BAD_REQUEST "Record not found / Invalid request data"
433
+ // • 404 (documented not-found)
434
+ // and its OUTAGE vocabulary is 5xx (a hostile payload live-returned a 502).
435
+ // 403 was NEVER emitted; a 403 here would be a CDN/WAF block = an OUTAGE, not
436
+ // an absence. So ONLY the three CONFIRMED absent statuses {400,401,404} → null
437
+ // (→ wrapper found:false); 429 → rate_limited (a retryable throttle, not an
438
+ // absence); and EVERY OTHER non-2xx — 403, other 4xx (410/422/451/…), all 5xx,
439
+ // network, timeout, hollow-200 — THROWS upstream_unavailable. This honors the
440
+ // invariant "a DOWN service must NEVER read as absent" and errs toward
441
+ // retryable-outage for any ambiguous status (the safe direction: a spurious
442
+ // "retry" is far less harmful than a fabricated "does not exist").
443
+ if (r.status === 429) {
444
+ throw new ToolErrorCarrier({
445
+ kind: "rate_limited",
446
+ message: `SAM detail endpoint rate-limited (HTTP 429) for ${noticeId}. Retry after a short back-off.`,
447
+ retryable: true,
448
+ retryAfterSeconds: 30,
449
+ upstreamStatus: 429,
450
+ upstreamEndpoint: "sam:opps/v2/opportunities",
451
+ });
452
+ }
453
+ if (r.status === 400 || r.status === 401 || r.status === 404)
308
454
  return null;
309
- const detail = (await r.json());
455
+ if (!r.ok) {
456
+ throw new ToolErrorCarrier({
457
+ kind: "upstream_unavailable",
458
+ message: `SAM detail endpoint returned HTTP ${r.status} for ${noticeId} — the service is unavailable, NOT a confirmed absence. Retry.`,
459
+ retryable: true,
460
+ retryAfterSeconds: 60,
461
+ upstreamStatus: r.status,
462
+ upstreamEndpoint: "sam:opps/v2/opportunities",
463
+ });
464
+ }
465
+ let detail;
466
+ try {
467
+ detail = (await r.json());
468
+ }
469
+ catch (err) {
470
+ // A 200 whose body won't parse is a hollow/degraded response (CDN/proxy),
471
+ // NOT a genuine absence — classify as a retryable outage.
472
+ throw new ToolErrorCarrier({
473
+ kind: "upstream_unavailable",
474
+ message: `SAM detail endpoint returned HTTP 200 for ${noticeId} but the body could not be parsed as JSON (${err.message}) — hollow/degraded response, NOT a confirmed absence. Retry.`,
475
+ retryable: true,
476
+ retryAfterSeconds: 60,
477
+ upstreamStatus: 200,
478
+ upstreamEndpoint: "sam:opps/v2/opportunities",
479
+ });
480
+ }
310
481
  const d = detail.data2 ?? {};
311
- if (!d.title)
312
- return null;
482
+ // A 200 WITHOUT a usable notice body (no data2.title) is a hollow/degraded
483
+ // response — a CDN/proxy cached error envelope or dropped body — NOT a real
484
+ // "this notice does not exist". Real notices are stably 200+title; absent
485
+ // ids 401. So THROW (retryable), mirroring the searchPublic/far hollow-200
486
+ // guards, instead of returning null (which the wrapper would render as
487
+ // found:false — a fabricated absence over an outage).
488
+ if (!d.title) {
489
+ throw new ToolErrorCarrier({
490
+ kind: "upstream_unavailable",
491
+ message: `SAM detail returned HTTP 200 without a usable notice body (no data2.title) for ${noticeId} — hollow/degraded response, NOT a confirmed absence. Retry.`,
492
+ retryable: true,
493
+ retryAfterSeconds: 60,
494
+ upstreamStatus: 200,
495
+ upstreamEndpoint: "sam:opps/v2/opportunities",
496
+ });
497
+ }
498
+ // Each enrichment sub-fetch is caught INDIVIDUALLY: an outage on one must
499
+ // neither sink the notice (the primary fields still return) nor silently
500
+ // zero the field (a swallowed `[]`/`""` would read as "no attachments"/"no
501
+ // org"). We record WHICH bucket degraded so the wrapper can disclose an
502
+ // honest `_meta.degraded` + a note ("MAY have attachments; retry — NOT a
503
+ // confirmation it has none"), and never flag the OTHER (healthy) enrichment.
504
+ const enrichmentDegraded = [];
313
505
  const [resourceLinks, fullParentPathName] = await Promise.all([
314
- this.getPublicResourceLinks(noticeId),
506
+ this.getPublicResourceLinks(noticeId).catch((e) => {
507
+ this.warn("resourceLinks enrichment failed", e);
508
+ enrichmentDegraded.push("attachments");
509
+ return [];
510
+ }),
315
511
  d.organizationId
316
- ? this.getPublicOrgName(d.organizationId)
512
+ ? this.getPublicOrgName(d.organizationId).catch((e) => {
513
+ this.warn("orgName enrichment failed", e);
514
+ enrichmentDegraded.push("organization");
515
+ return "";
516
+ })
317
517
  : Promise.resolve(""),
318
518
  ]);
319
519
  return {
@@ -337,39 +537,54 @@ export class SamGovClient {
337
537
  pointOfContact: d.pointOfContact ?? [],
338
538
  uiLink: `https://sam.gov/opp/${noticeId}/view`,
339
539
  resourceLinks,
540
+ enrichmentDegraded: enrichmentDegraded.length
541
+ ? enrichmentDegraded
542
+ : undefined,
340
543
  };
341
544
  }
545
+ /**
546
+ * Fetch the public attachment-download URLs for a notice.
547
+ *
548
+ * TRUTHFULNESS (DOWN-reads-as-absent guard): this is called ONLY after the
549
+ * detail endpoint already 200'd (the notice exists). The resources endpoint
550
+ * then returns HTTP 200 for every real notice — a genuine NO-attachment
551
+ * notice is 200 with an empty list. So any non-200 (or a network fault) here
552
+ * is an OUTAGE, never a genuine "no attachments", and MUST NOT be swallowed
553
+ * into `[]` — that would let a DOWN list-fetch read as "no documents" and an
554
+ * AI skip a solicitation whose RFP it could have read. We THROW on non-200
555
+ * and let a network error propagate; the caller (getOpportunityPublic / the
556
+ * auth tier) catches it INDIVIDUALLY and records the degradation. A 200 →
557
+ * the genuine links, which MAY be `[]` (an honest empty, disclosed as such).
558
+ */
342
559
  async getPublicResourceLinks(noticeId) {
343
- try {
344
- const url = `${PUBLIC_BASE}/opps/v3/opportunities/${encodeURIComponent(noticeId)}/resources`;
345
- const r = await this.fetchImpl(url, { headers: this.publicHeaders() });
346
- if (!r.ok)
347
- return [];
348
- const json = (await r.json());
349
- const attachments = json._embedded?.opportunityAttachmentList?.[0]?.attachments ?? [];
350
- return attachments
351
- .filter((a) => a.resourceId)
352
- .map((a) => this.publicDownloadUrl(a.resourceId));
353
- }
354
- catch (err) {
355
- this.warn("getPublicResourceLinks failed", err);
356
- return [];
357
- }
560
+ const url = `${PUBLIC_BASE}/opps/v3/opportunities/${encodeURIComponent(noticeId)}/resources`;
561
+ const r = await this.fetchImpl(url, { headers: this.publicHeaders() });
562
+ if (!r.ok)
563
+ throw new Error(`resources HTTP ${r.status}`);
564
+ const json = (await r.json());
565
+ const attachments = json._embedded?.opportunityAttachmentList?.[0]?.attachments ?? [];
566
+ return attachments
567
+ .filter((a) => a.resourceId)
568
+ .map((a) => this.publicDownloadUrl(a.resourceId));
358
569
  }
570
+ /**
571
+ * Resolve an awarding-organization id to its canonical path/name.
572
+ *
573
+ * TRUTHFULNESS (same guard as getPublicResourceLinks): a genuine org with no
574
+ * path → 200 + empty field; a non-200/network fault → an OUTAGE. Do NOT
575
+ * swallow the outage into `""` (that reads as "no organization" when the
576
+ * fetch was DOWN). THROW on non-200; let a network error propagate. The
577
+ * caller catches it INDIVIDUALLY and records the degradation. A 200 → the
578
+ * name, which MAY be `""` (an honest empty).
579
+ */
359
580
  async getPublicOrgName(orgId) {
360
- try {
361
- const url = `${PUBLIC_BASE}/federalorganizations/v1/organizations/${encodeURIComponent(orgId)}`;
362
- const r = await this.fetchImpl(url, { headers: this.publicHeaders() });
363
- if (!r.ok)
364
- return "";
365
- const json = (await r.json());
366
- const org = json._embedded?.[0]?.org;
367
- return org?.fullParentPathName ?? org?.agencyName ?? org?.name ?? "";
368
- }
369
- catch (err) {
370
- this.warn("getPublicOrgName failed", err);
371
- return "";
372
- }
581
+ const url = `${PUBLIC_BASE}/federalorganizations/v1/organizations/${encodeURIComponent(orgId)}`;
582
+ const r = await this.fetchImpl(url, { headers: this.publicHeaders() });
583
+ if (!r.ok)
584
+ throw new Error(`org HTTP ${r.status}`);
585
+ const json = (await r.json());
586
+ const org = json._embedded?.[0]?.org;
587
+ return org?.fullParentPathName ?? org?.agencyName ?? org?.name ?? "";
373
588
  }
374
589
  publicHeaders() {
375
590
  return {
@@ -382,6 +597,57 @@ export class SamGovClient {
382
597
  this.logger.warn(`[mcp-sam-gov/sam-gov] ${msg}`, err);
383
598
  }
384
599
  }
600
+ // ─── Shaping-radar pure helpers (exported for offline unit testing) ──────────
601
+ /**
602
+ * Whole days from `now` to an ISO `responseDeadline`. Returns null when the
603
+ * deadline is missing/unparseable (a null day count is COUNTED, never hidden —
604
+ * the shaping radar surfaces deadline-less notices rather than dropping them).
605
+ * Uses UTC-midnight flooring on both ends so the count is a stable whole number
606
+ * regardless of intraday time-of-day. Negative when the deadline is in the past.
607
+ */
608
+ export function daysUntilResponse(deadline, now = new Date()) {
609
+ if (!deadline)
610
+ return null;
611
+ const then = new Date(deadline);
612
+ const t = then.getTime();
613
+ if (Number.isNaN(t))
614
+ return null;
615
+ const dayMs = 86_400_000;
616
+ const nowUtc = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate());
617
+ const thenUtc = Date.UTC(then.getUTCFullYear(), then.getUTCMonth(), then.getUTCDate());
618
+ return Math.round((thenUtc - nowUtc) / dayMs);
619
+ }
620
+ /**
621
+ * Client-side response-deadline WINDOW filter for the shaping radar.
622
+ *
623
+ * The keyless SGS feed IGNORES rdlfrom/rdlto (VERIFIED LIVE 2026-07: a
624
+ * notice_type=r query with rdlfrom/rdlto returns the same total and deadlines
625
+ * outside the requested window), so a response-deadline window MUST be applied
626
+ * over the already-fetched page and DISCLOSED (the server flags
627
+ * `_meta.filtersDropped:["responseDeadline"]`). Bounds are inclusive ISO dates.
628
+ *
629
+ * A notice with NO deadline is EXCLUDED from a windowed query (it cannot be
630
+ * proven inside the window) — the caller discloses this. When neither bound is
631
+ * given, the page is returned unchanged (no window requested).
632
+ */
633
+ export function applyResponseDeadlineWindow(notices, from, to) {
634
+ if (!from && !to)
635
+ return notices;
636
+ const fromMs = from ? Date.parse(from) : null;
637
+ const toMs = to ? Date.parse(to) : null;
638
+ return notices.filter((n) => {
639
+ if (!n.responseDeadline)
640
+ return false; // no deadline ⇒ not provably in-window
641
+ const ms = Date.parse(n.responseDeadline);
642
+ if (Number.isNaN(ms))
643
+ return false;
644
+ if (fromMs !== null && !Number.isNaN(fromMs) && ms < fromMs)
645
+ return false;
646
+ if (toMs !== null && !Number.isNaN(toMs) && ms > toMs)
647
+ return false;
648
+ return true;
649
+ });
650
+ }
385
651
  // ─── Helpers ────────────────────────────────────────────────────
386
652
  function formatSamDate(date) {
387
653
  const month = String(date.getUTCMonth() + 1).padStart(2, "0");