@cliwant/mcp-sam-gov 0.3.0 → 1.1.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 (243) hide show
  1. package/LICENSE +21 -21
  2. package/README.ja.md +49 -16
  3. package/README.ko.md +49 -16
  4. package/README.md +255 -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-economic.d.ts +93 -0
  18. package/dist/census-economic.d.ts.map +1 -0
  19. package/dist/census-economic.js +355 -0
  20. package/dist/census-economic.js.map +1 -0
  21. package/dist/census.d.ts +182 -0
  22. package/dist/census.d.ts.map +1 -0
  23. package/dist/census.js +576 -0
  24. package/dist/census.js.map +1 -0
  25. package/dist/ckan.d.ts +141 -0
  26. package/dist/ckan.d.ts.map +1 -0
  27. package/dist/ckan.js +393 -0
  28. package/dist/ckan.js.map +1 -0
  29. package/dist/clinicaltrials.d.ts +180 -0
  30. package/dist/clinicaltrials.d.ts.map +1 -0
  31. package/dist/clinicaltrials.js +730 -0
  32. package/dist/clinicaltrials.js.map +1 -0
  33. package/dist/cms.d.ts +140 -0
  34. package/dist/cms.d.ts.map +1 -0
  35. package/dist/cms.js +482 -0
  36. package/dist/cms.js.map +1 -0
  37. package/dist/coerce.d.ts +32 -0
  38. package/dist/coerce.d.ts.map +1 -0
  39. package/dist/coerce.js +50 -0
  40. package/dist/coerce.js.map +1 -0
  41. package/dist/datagov-catalog.d.ts +84 -0
  42. package/dist/datagov-catalog.d.ts.map +1 -0
  43. package/dist/datagov-catalog.js +233 -0
  44. package/dist/datagov-catalog.js.map +1 -0
  45. package/dist/datagov.d.ts +146 -0
  46. package/dist/datagov.d.ts.map +1 -0
  47. package/dist/datagov.js +689 -0
  48. package/dist/datagov.js.map +1 -0
  49. package/dist/datagovKey.d.ts +36 -0
  50. package/dist/datagovKey.d.ts.map +1 -0
  51. package/dist/datagovKey.js +60 -0
  52. package/dist/datagovKey.js.map +1 -0
  53. package/dist/datasource.d.ts +313 -0
  54. package/dist/datasource.d.ts.map +1 -0
  55. package/dist/datasource.js +551 -0
  56. package/dist/datasource.js.map +1 -0
  57. package/dist/disclosure.d.ts +55 -0
  58. package/dist/disclosure.d.ts.map +1 -0
  59. package/dist/disclosure.js +57 -0
  60. package/dist/disclosure.js.map +1 -0
  61. package/dist/ecfr.d.ts +4 -2
  62. package/dist/ecfr.d.ts.map +1 -1
  63. package/dist/ecfr.js +74 -1
  64. package/dist/ecfr.js.map +1 -1
  65. package/dist/echo.d.ts +143 -0
  66. package/dist/echo.d.ts.map +1 -0
  67. package/dist/echo.js +424 -0
  68. package/dist/echo.js.map +1 -0
  69. package/dist/edgar.d.ts +377 -0
  70. package/dist/edgar.d.ts.map +1 -0
  71. package/dist/edgar.js +2418 -0
  72. package/dist/edgar.js.map +1 -0
  73. package/dist/errors.d.ts +26 -0
  74. package/dist/errors.d.ts.map +1 -1
  75. package/dist/errors.js +69 -1
  76. package/dist/errors.js.map +1 -1
  77. package/dist/fac.d.ts +180 -0
  78. package/dist/fac.d.ts.map +1 -0
  79. package/dist/fac.js +416 -0
  80. package/dist/fac.js.map +1 -0
  81. package/dist/far.d.ts +170 -0
  82. package/dist/far.d.ts.map +1 -0
  83. package/dist/far.js +804 -0
  84. package/dist/far.js.map +1 -0
  85. package/dist/fdic.d.ts +599 -0
  86. package/dist/fdic.d.ts.map +1 -0
  87. package/dist/fdic.js +1624 -0
  88. package/dist/fdic.js.map +1 -0
  89. package/dist/federal-register.d.ts +139 -2
  90. package/dist/federal-register.d.ts.map +1 -1
  91. package/dist/federal-register.js +419 -3
  92. package/dist/federal-register.js.map +1 -1
  93. package/dist/fema.d.ts +181 -0
  94. package/dist/fema.d.ts.map +1 -0
  95. package/dist/fema.js +436 -0
  96. package/dist/fema.js.map +1 -0
  97. package/dist/fpds.d.ts +108 -0
  98. package/dist/fpds.d.ts.map +1 -0
  99. package/dist/fpds.js +519 -0
  100. package/dist/fpds.js.map +1 -0
  101. package/dist/fred.d.ts +108 -0
  102. package/dist/fred.d.ts.map +1 -0
  103. package/dist/fred.js +373 -0
  104. package/dist/fred.js.map +1 -0
  105. package/dist/gao.d.ts +64 -0
  106. package/dist/gao.d.ts.map +1 -0
  107. package/dist/gao.js +640 -0
  108. package/dist/gao.js.map +1 -0
  109. package/dist/govinfo.d.ts +111 -0
  110. package/dist/govinfo.d.ts.map +1 -0
  111. package/dist/govinfo.js +422 -0
  112. package/dist/govinfo.js.map +1 -0
  113. package/dist/grants.d.ts +27 -4
  114. package/dist/grants.d.ts.map +1 -1
  115. package/dist/grants.js +111 -6
  116. package/dist/grants.js.map +1 -1
  117. package/dist/gsa-csv.d.ts +249 -0
  118. package/dist/gsa-csv.d.ts.map +1 -0
  119. package/dist/gsa-csv.js +784 -0
  120. package/dist/gsa-csv.js.map +1 -0
  121. package/dist/integrity.d.ts +212 -0
  122. package/dist/integrity.d.ts.map +1 -0
  123. package/dist/integrity.js +707 -0
  124. package/dist/integrity.js.map +1 -0
  125. package/dist/keys.d.ts +83 -0
  126. package/dist/keys.d.ts.map +1 -0
  127. package/dist/keys.js +173 -0
  128. package/dist/keys.js.map +1 -0
  129. package/dist/meta.d.ts +165 -0
  130. package/dist/meta.d.ts.map +1 -0
  131. package/dist/meta.js +162 -0
  132. package/dist/meta.js.map +1 -0
  133. package/dist/nih.d.ts +117 -0
  134. package/dist/nih.d.ts.map +1 -0
  135. package/dist/nih.js +291 -0
  136. package/dist/nih.js.map +1 -0
  137. package/dist/nppes.d.ts +157 -0
  138. package/dist/nppes.d.ts.map +1 -0
  139. package/dist/nppes.js +648 -0
  140. package/dist/nppes.js.map +1 -0
  141. package/dist/nsf.d.ts +176 -0
  142. package/dist/nsf.d.ts.map +1 -0
  143. package/dist/nsf.js +554 -0
  144. package/dist/nsf.js.map +1 -0
  145. package/dist/nvd.d.ts +176 -0
  146. package/dist/nvd.d.ts.map +1 -0
  147. package/dist/nvd.js +912 -0
  148. package/dist/nvd.js.map +1 -0
  149. package/dist/ofac.d.ts +205 -0
  150. package/dist/ofac.d.ts.map +1 -0
  151. package/dist/ofac.js +919 -0
  152. package/dist/ofac.js.map +1 -0
  153. package/dist/pricing.d.ts +110 -0
  154. package/dist/pricing.d.ts.map +1 -0
  155. package/dist/pricing.js +843 -0
  156. package/dist/pricing.js.map +1 -0
  157. package/dist/sam-gov/client.d.ts +60 -2
  158. package/dist/sam-gov/client.d.ts.map +1 -1
  159. package/dist/sam-gov/client.js +320 -54
  160. package/dist/sam-gov/client.js.map +1 -1
  161. package/dist/sam-gov/index.d.ts +1 -1
  162. package/dist/sam-gov/index.d.ts.map +1 -1
  163. package/dist/sam-gov/index.js +1 -1
  164. package/dist/sam-gov/index.js.map +1 -1
  165. package/dist/sam-gov/types.d.ts +24 -0
  166. package/dist/sam-gov/types.d.ts.map +1 -1
  167. package/dist/sba.d.ts +72 -0
  168. package/dist/sba.d.ts.map +1 -0
  169. package/dist/sba.js +281 -0
  170. package/dist/sba.js.map +1 -0
  171. package/dist/server.d.ts +14 -2
  172. package/dist/server.d.ts.map +1 -1
  173. package/dist/server.js +4032 -297
  174. package/dist/server.js.map +1 -1
  175. package/dist/snapshot.d.ts +115 -0
  176. package/dist/snapshot.d.ts.map +1 -0
  177. package/dist/snapshot.js +175 -0
  178. package/dist/snapshot.js.map +1 -0
  179. package/dist/socrata.d.ts +157 -0
  180. package/dist/socrata.d.ts.map +1 -0
  181. package/dist/socrata.js +448 -0
  182. package/dist/socrata.js.map +1 -0
  183. package/dist/treasury.d.ts +143 -0
  184. package/dist/treasury.d.ts.map +1 -0
  185. package/dist/treasury.js +436 -0
  186. package/dist/treasury.js.map +1 -0
  187. package/dist/usaspending.d.ts +260 -65
  188. package/dist/usaspending.d.ts.map +1 -1
  189. package/dist/usaspending.js +1629 -201
  190. package/dist/usaspending.js.map +1 -1
  191. package/dist/usitc.d.ts +142 -0
  192. package/dist/usitc.d.ts.map +1 -0
  193. package/dist/usitc.js +339 -0
  194. package/dist/usitc.js.map +1 -0
  195. package/package.json +24 -2
  196. package/src/attachments.ts +652 -0
  197. package/src/bls.ts +1943 -0
  198. package/src/cache.ts +5 -0
  199. package/src/census-economic.ts +425 -0
  200. package/src/census.ts +735 -0
  201. package/src/ckan.ts +495 -0
  202. package/src/clinicaltrials.ts +923 -0
  203. package/src/cms.ts +634 -0
  204. package/src/coerce.ts +47 -0
  205. package/src/datagov-catalog.ts +296 -0
  206. package/src/datagov.ts +907 -0
  207. package/src/datagovKey.ts +68 -0
  208. package/src/datasource.ts +721 -0
  209. package/src/disclosure.ts +61 -0
  210. package/src/ecfr.ts +98 -1
  211. package/src/echo.ts +496 -0
  212. package/src/edgar.ts +3014 -0
  213. package/src/errors.ts +84 -1
  214. package/src/fac.ts +529 -0
  215. package/src/far.ts +1007 -0
  216. package/src/fdic.ts +2052 -0
  217. package/src/federal-register.ts +512 -3
  218. package/src/fema.ts +541 -0
  219. package/src/fpds.ts +620 -0
  220. package/src/fred.ts +464 -0
  221. package/src/gao.ts +744 -0
  222. package/src/govinfo.ts +497 -0
  223. package/src/grants.ts +139 -7
  224. package/src/gsa-csv.ts +992 -0
  225. package/src/integrity.ts +928 -0
  226. package/src/keys.ts +216 -0
  227. package/src/meta.ts +292 -0
  228. package/src/nih.ts +375 -0
  229. package/src/nppes.ts +834 -0
  230. package/src/nsf.ts +706 -0
  231. package/src/nvd.ts +1124 -0
  232. package/src/ofac.ts +1166 -0
  233. package/src/pricing.ts +1075 -0
  234. package/src/sam-gov/client.ts +345 -63
  235. package/src/sam-gov/index.ts +5 -1
  236. package/src/sam-gov/types.ts +22 -0
  237. package/src/sba.ts +357 -0
  238. package/src/server.ts +4717 -328
  239. package/src/snapshot.ts +223 -0
  240. package/src/socrata.ts +532 -0
  241. package/src/treasury.ts +575 -0
  242. package/src/usaspending.ts +1946 -214
  243. package/src/usitc.ts +420 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity.js","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"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"}
package/dist/keys.d.ts ADDED
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @cliwant/mcp-sam-gov/keys — API-key discovery + `.env` auto-loading.
3
+ *
4
+ * Why this exists
5
+ * ----------------
6
+ * The server rides 31 federal sources. MOST are fully keyless. But the set of
7
+ * *optional* keys (raise a rate limit, unlock one filter) plus the two *required*
8
+ * keys (Census business-patterns, FRED) has grown to the point where a user — or
9
+ * the AI driving the server — cannot tell, without reading source code:
10
+ * - which env var each source reads,
11
+ * - whether a key is REQUIRED or merely OPTIONAL,
12
+ * - where to get one (free), and
13
+ * - whether it is currently configured.
14
+ *
15
+ * `apiKeyStatus()` answers all four, truthfully, WITHOUT ever revealing a key's
16
+ * value (only a `currentlySet` boolean). `loadDotEnv()` lets a user configure
17
+ * keys ONCE in a `.env` file instead of the host's env block.
18
+ *
19
+ * Grounding: every `envVar` below is the exact string the code reads via
20
+ * `process.env.<NAME>` — DATA_GOV_API_KEY (datagovKey.ts), SAM_GOV_API_KEY
21
+ * (server.ts), BLS_API_KEY (bls.ts), NVD_API_KEY (nvd.ts), SOCRATA_APP_TOKEN
22
+ * (socrata.ts), CENSUS_API_KEY (census-economic.ts), FRED_API_KEY (fred.ts).
23
+ * No invented keys, sources, or signup URLs.
24
+ */
25
+ /** One registry entry describing a single API key the server can use. */
26
+ export type KeyRegistryEntry = {
27
+ /** The exact `process.env.<NAME>` the code reads. */
28
+ envVar: string;
29
+ /** Human-readable source(s) this key affects. */
30
+ sources: string[];
31
+ /** true ⇒ the source has NO keyless tier (the tool throws without it). */
32
+ required: boolean;
33
+ /** Free signup URL (the user creates the account — this is their step). */
34
+ signupUrl: string;
35
+ /** What setting the key unlocks (higher limit / a filter / a whole tool). */
36
+ unlocks: string;
37
+ /** Extra honesty note (keyless fallback, precedence, scope). */
38
+ note: string;
39
+ };
40
+ /**
41
+ * The 7 keys the server reads — code-grounded, no inventions.
42
+ *
43
+ * REQUIRED (2): CENSUS_API_KEY, FRED_API_KEY — those sources have no keyless
44
+ * tier, so the tool throws without them. OPTIONAL (5): everything else works
45
+ * keyless; a key only raises a rate limit or unlocks a single filter.
46
+ */
47
+ export declare const KEY_REGISTRY: readonly KeyRegistryEntry[];
48
+ /** Per-key status: the registry entry + a `currentlySet` boolean. NEVER the value. */
49
+ export type KeyStatus = KeyRegistryEntry & {
50
+ currentlySet: boolean;
51
+ };
52
+ /** The `apiKeyStatus()` result shape. */
53
+ export type ApiKeyStatusResult = {
54
+ keys: KeyStatus[];
55
+ /** envVars of REQUIRED keys not currently set (empty ⇒ all required keys present). */
56
+ requiredMissing: string[];
57
+ /** envVars of OPTIONAL keys not currently set. */
58
+ optionalMissing: string[];
59
+ /** Every key here is free to obtain. */
60
+ allKeysFree: boolean;
61
+ };
62
+ /**
63
+ * Report which API keys the server can use and whether each is configured.
64
+ *
65
+ * SECURITY: the returned object carries ONLY a `currentlySet` boolean per key —
66
+ * the key's VALUE is NEVER read into the output. (`isSet` inspects the value to
67
+ * compute the boolean, but the value itself never leaves this function.)
68
+ */
69
+ export declare function apiKeyStatus(): ApiKeyStatusResult;
70
+ /**
71
+ * MINIMAL, dependency-free `.env` loader.
72
+ *
73
+ * Reads `${cwd||process.cwd()}/.env` if present and sets `process.env[KEY]` for
74
+ * each `KEY=VALUE` line — but ONLY if that key is not already set, so a real
75
+ * environment variable always wins over `.env` (standard precedence). Supports
76
+ * `export KEY=VALUE`, `#` comments, blank lines, and surrounding single/double
77
+ * quotes on the value. NEVER throws: a missing file returns 0 (⇒ byte-identical
78
+ * startup), and a malformed line is skipped rather than fatal.
79
+ *
80
+ * @returns the number of vars newly set into process.env.
81
+ */
82
+ export declare function loadDotEnv(cwd?: string): number;
83
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,yEAAyE;AACzE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0EAA0E;IAC1E,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,gBAAgB,EAiE1C,CAAC;AAQX,sFAAsF;AACtF,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG;IAAE,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC;AAErE,yCAAyC;AACzC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,sFAAsF;IACtF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kDAAkD;IAClD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,wCAAwC;IACxC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,kBAAkB,CAYjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CA4C/C"}
package/dist/keys.js ADDED
@@ -0,0 +1,173 @@
1
+ /**
2
+ * @cliwant/mcp-sam-gov/keys — API-key discovery + `.env` auto-loading.
3
+ *
4
+ * Why this exists
5
+ * ----------------
6
+ * The server rides 31 federal sources. MOST are fully keyless. But the set of
7
+ * *optional* keys (raise a rate limit, unlock one filter) plus the two *required*
8
+ * keys (Census business-patterns, FRED) has grown to the point where a user — or
9
+ * the AI driving the server — cannot tell, without reading source code:
10
+ * - which env var each source reads,
11
+ * - whether a key is REQUIRED or merely OPTIONAL,
12
+ * - where to get one (free), and
13
+ * - whether it is currently configured.
14
+ *
15
+ * `apiKeyStatus()` answers all four, truthfully, WITHOUT ever revealing a key's
16
+ * value (only a `currentlySet` boolean). `loadDotEnv()` lets a user configure
17
+ * keys ONCE in a `.env` file instead of the host's env block.
18
+ *
19
+ * Grounding: every `envVar` below is the exact string the code reads via
20
+ * `process.env.<NAME>` — DATA_GOV_API_KEY (datagovKey.ts), SAM_GOV_API_KEY
21
+ * (server.ts), BLS_API_KEY (bls.ts), NVD_API_KEY (nvd.ts), SOCRATA_APP_TOKEN
22
+ * (socrata.ts), CENSUS_API_KEY (census-economic.ts), FRED_API_KEY (fred.ts).
23
+ * No invented keys, sources, or signup URLs.
24
+ */
25
+ import { readFileSync } from "node:fs";
26
+ import { join } from "node:path";
27
+ /**
28
+ * The 7 keys the server reads — code-grounded, no inventions.
29
+ *
30
+ * REQUIRED (2): CENSUS_API_KEY, FRED_API_KEY — those sources have no keyless
31
+ * tier, so the tool throws without them. OPTIONAL (5): everything else works
32
+ * keyless; a key only raises a rate limit or unlocks a single filter.
33
+ */
34
+ export const KEY_REGISTRY = [
35
+ {
36
+ envVar: "DATA_GOV_API_KEY",
37
+ sources: [
38
+ "api.data.gov keyed sources: Regulations.gov, Congress.gov, GovInfo, Federal Audit Clearinghouse (FAC), data.gov catalog",
39
+ ],
40
+ required: false,
41
+ signupUrl: "https://api.data.gov/signup/",
42
+ unlocks: "higher rate limits on the api.data.gov keyed sources (lifts the shared DEMO_KEY ~30/hr cap to ~1,000/hr)",
43
+ note: "Keyless by default via the public DEMO_KEY; a key only raises the shared hourly quota. (NPPES, CMS, and Federal Register are keyless on their own hosts and do NOT use this key.)",
44
+ },
45
+ {
46
+ envVar: "SAM_GOV_API_KEY",
47
+ sources: ["SAM.gov opportunities"],
48
+ required: false,
49
+ signupUrl: "https://open.gsa.gov/api/get-opportunities-public-api/",
50
+ unlocks: "the authenticated v2 opportunity search + the organization-name filter",
51
+ note: "Keyless HAL endpoint works without it; a key enables the keyed v2 path and org-name filtering. Register at sam.gov / api.sam.gov.",
52
+ },
53
+ {
54
+ envVar: "BLS_API_KEY",
55
+ sources: ["Bureau of Labor Statistics (BLS)"],
56
+ required: false,
57
+ signupUrl: "https://data.bls.gov/registrationEngine/",
58
+ unlocks: "the BLS v2 tier (~500 queries/day, 50 series/query, ~20-year span) vs keyless v1 (~25 queries/day)",
59
+ note: "Keyless v1 works out of the box; a key upgrades to the higher v2 limits.",
60
+ },
61
+ {
62
+ envVar: "NVD_API_KEY",
63
+ sources: ["NIST NVD (cve_lookup)"],
64
+ required: false,
65
+ signupUrl: "https://nvd.nist.gov/developers/request-an-api-key",
66
+ unlocks: "a higher NVD rate limit",
67
+ note: "Keyless by default; a key lifts the request rate limit.",
68
+ },
69
+ {
70
+ envVar: "SOCRATA_APP_TOKEN",
71
+ sources: ["Socrata (state/city open-data portals)"],
72
+ required: false,
73
+ signupUrl: "https://evergreen.data.socrata.com/signup",
74
+ unlocks: "higher Socrata throttling limits",
75
+ note: "Keyless by default; a token raises the per-host throttle. Any Socrata portal's developer settings issues one.",
76
+ },
77
+ {
78
+ envVar: "CENSUS_API_KEY",
79
+ sources: ["US Census (census_business_patterns)"],
80
+ required: true,
81
+ signupUrl: "https://api.census.gov/data/key_signup.html",
82
+ unlocks: "the census_business_patterns tool (there is no keyless tier — it throws without a key)",
83
+ note: "REQUIRED: the Census economic API has no keyless access.",
84
+ },
85
+ {
86
+ envVar: "FRED_API_KEY",
87
+ sources: ["FRED (fred_search_series, fred_series_observations)"],
88
+ required: true,
89
+ signupUrl: "https://fred.stlouisfed.org/docs/api/api_key.html",
90
+ unlocks: "the 2 FRED tools (there is no keyless tier — they throw without a key)",
91
+ note: "REQUIRED: the FRED API has no keyless access.",
92
+ },
93
+ ];
94
+ /** true iff the env var is set to a non-empty (after-trim) string. */
95
+ function isSet(envVar) {
96
+ const v = process.env[envVar];
97
+ return typeof v === "string" && v.trim().length > 0;
98
+ }
99
+ /**
100
+ * Report which API keys the server can use and whether each is configured.
101
+ *
102
+ * SECURITY: the returned object carries ONLY a `currentlySet` boolean per key —
103
+ * the key's VALUE is NEVER read into the output. (`isSet` inspects the value to
104
+ * compute the boolean, but the value itself never leaves this function.)
105
+ */
106
+ export function apiKeyStatus() {
107
+ const keys = KEY_REGISTRY.map((k) => ({
108
+ ...k,
109
+ currentlySet: isSet(k.envVar),
110
+ }));
111
+ const requiredMissing = keys
112
+ .filter((k) => k.required && !k.currentlySet)
113
+ .map((k) => k.envVar);
114
+ const optionalMissing = keys
115
+ .filter((k) => !k.required && !k.currentlySet)
116
+ .map((k) => k.envVar);
117
+ return { keys, requiredMissing, optionalMissing, allKeysFree: true };
118
+ }
119
+ /**
120
+ * MINIMAL, dependency-free `.env` loader.
121
+ *
122
+ * Reads `${cwd||process.cwd()}/.env` if present and sets `process.env[KEY]` for
123
+ * each `KEY=VALUE` line — but ONLY if that key is not already set, so a real
124
+ * environment variable always wins over `.env` (standard precedence). Supports
125
+ * `export KEY=VALUE`, `#` comments, blank lines, and surrounding single/double
126
+ * quotes on the value. NEVER throws: a missing file returns 0 (⇒ byte-identical
127
+ * startup), and a malformed line is skipped rather than fatal.
128
+ *
129
+ * @returns the number of vars newly set into process.env.
130
+ */
131
+ export function loadDotEnv(cwd) {
132
+ const path = join(cwd ?? process.cwd(), ".env");
133
+ let text;
134
+ try {
135
+ text = readFileSync(path, "utf8");
136
+ }
137
+ catch {
138
+ // Missing / unreadable .env ⇒ zero change. This is the common case and
139
+ // MUST be a no-op so startup is byte-identical when no .env exists.
140
+ return 0;
141
+ }
142
+ let loaded = 0;
143
+ for (const rawLine of text.split(/\r?\n/)) {
144
+ const line = rawLine.trim();
145
+ if (line.length === 0 || line.startsWith("#"))
146
+ continue;
147
+ // Optional `export ` prefix.
148
+ const body = line.startsWith("export ")
149
+ ? line.slice("export ".length).trim()
150
+ : line;
151
+ const eq = body.indexOf("=");
152
+ if (eq <= 0)
153
+ continue; // no `=`, or empty key ⇒ skip (malformed).
154
+ const key = body.slice(0, eq).trim();
155
+ if (!key)
156
+ continue;
157
+ let value = body.slice(eq + 1).trim();
158
+ // Strip a single matching pair of surrounding quotes.
159
+ if (value.length >= 2 &&
160
+ ((value.startsWith('"') && value.endsWith('"')) ||
161
+ (value.startsWith("'") && value.endsWith("'")))) {
162
+ value = value.slice(1, -1);
163
+ }
164
+ // Precedence: if the key is already set in the real environment, it wins —
165
+ // we set `process.env[key]` ONLY when it is not already present.
166
+ if (process.env[key] !== undefined)
167
+ continue;
168
+ process.env[key] = value;
169
+ loaded++;
170
+ }
171
+ return loaded;
172
+ }
173
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
package/dist/meta.d.ts ADDED
@@ -0,0 +1,165 @@
1
+ /**
2
+ * @cliwant/mcp-sam-gov/meta — the `_meta` completeness/provenance convention.
3
+ *
4
+ * Why this exists
5
+ * ----------------
6
+ * These tools' outputs are consumed by an AI, not a human who can eyeball
7
+ * a table. For an AI consumer, silently-misleading data is strictly worse
8
+ * than missing data: the AI cannot tell a filtered-but-blank field from a
9
+ * genuinely-empty one, a hard cap from a complete list, or a swallowed
10
+ * error from a real zero — and will state the wrong answer confidently.
11
+ *
12
+ * Every tool's success payload therefore gains a sibling `_meta` object.
13
+ * `data` is UNCHANGED (backward compat): the envelope becomes
14
+ * `{ ok, data, _meta }` where existing consumers reading `ok`/`data.*`
15
+ * are 100% unaffected.
16
+ *
17
+ * See docs/research/02-truthful-outputs-spec.md §2 for the normative spec.
18
+ */
19
+ /** Two-phase (enrich) tools: rows lost to failed per-record enrichment. */
20
+ export type MetaDegraded = {
21
+ attempted: number;
22
+ succeeded: number;
23
+ failed: number;
24
+ };
25
+ /** Offset-based pagination descriptor for list/search/aggregate tools. */
26
+ export type MetaPagination = {
27
+ /**
28
+ * The row offset of this page. `number` for offset-paginated tools (unchanged —
29
+ * every existing tool sets an integer). ADR-0010: widened to `number | null` for
30
+ * OPAQUE-CURSOR tools (GovInfo), where no meaningful numeric offset exists — those
31
+ * tools set `offset:null` (the honest "not a numeric offset"; continuation is via
32
+ * `_meta.nextCursor`, not a numeric `nextOffset`). Additive: no existing tool changes.
33
+ */
34
+ offset: number | null;
35
+ limit: number;
36
+ nextOffset: number | null;
37
+ hasMore: boolean;
38
+ };
39
+ /**
40
+ * The normative `_meta` shape (spec §2.1). Rides alongside `data` in the
41
+ * success envelope so the AI can branch on completeness/provenance
42
+ * deterministically instead of guessing from null fields.
43
+ */
44
+ export type ResponseMeta = {
45
+ /** Human+machine label of the upstream + layer that served THIS response. */
46
+ source: string;
47
+ /** SAM tools: true when no SAM_GOV_API_KEY. Non-SAM tools: always true. */
48
+ keylessMode: boolean;
49
+ /** true iff this response contains the ENTIRE result set for the query. */
50
+ complete: boolean;
51
+ /** true iff a hard cap / top-N limited the rows. */
52
+ truncated: boolean;
53
+ /** Number of primary records in `data`. */
54
+ returned: number;
55
+ /** Upstream's total match count; null when the endpoint doesn't report it. */
56
+ totalAvailable: number | null;
57
+ /**
58
+ * Present (and true) when `totalAvailable` is a KNOWN LOWER BOUND rather than
59
+ * an exact count — i.e. the upstream reported the total as "≥ N" (e.g. SEC
60
+ * EDGAR full-text search returns `hits.total.relation: "gte"` with the value
61
+ * pinned at 10000). The true total is UNKNOWN and ≥ `totalAvailable`. Absent
62
+ * on endpoints that report an exact total (do NOT read absence as `false`
63
+ * meaning "exact" for tools that never set it — it is simply not applicable).
64
+ */
65
+ totalIsLowerBound?: boolean;
66
+ /**
67
+ * Present (and true) when `totalAvailable` (or, for CKAN, the value disclosed
68
+ * in `notes`) is an upstream STATISTICAL ESTIMATE rather than an exact count —
69
+ * i.e. the source reported the total as an approximation that may be ABOVE OR
70
+ * BELOW the true count (CKAN `datastore_search` returns `total_was_estimated:
71
+ * true` for a PostgreSQL `reltuples`-style estimate, live-verified to overshoot
72
+ * — so it is NOT a lower bound, unlike `totalIsLowerBound`). CKAN sets this on
73
+ * the estimated path alongside `totalAvailable:null` (the estimate never drives
74
+ * pagination — ADR-0006 B1) + a disclosing note carrying the estimate value.
75
+ * Absent on endpoints that report an exact total (do NOT read absence as
76
+ * `false` meaning "exact" for tools that never set it — it is not applicable).
77
+ */
78
+ totalIsEstimated?: boolean;
79
+ /**
80
+ * Present when this response comes from an OPAQUE-CURSOR-paginated source
81
+ * (ADR-0010 — GovInfo's `offsetMark`): the opaque continuation token to pass back
82
+ * to fetch the NEXT page (GovInfo: as the `pageMark` argument), or `null` on the
83
+ * last page (no further cursor). It is a source-minted token, NOT derived from any
84
+ * secret and NEVER the raw upstream `nextPage` URL (which embeds pageSize + the
85
+ * api_key). Cursor tools set `nextOffset:null`/`offset:null` (a numeric offset is
86
+ * meaningless for a cursor) and use THIS as the sole continuation surface. Absent
87
+ * on offset-paginated tools (do NOT read absence as "no more" for those). Added as
88
+ * a conditional passthrough exactly like totalIsLowerBound/totalIsEstimated —
89
+ * only surfaced when the tool provides it, so existing tools' `_meta` stays
90
+ * byte-identical and the tools/list snapshot is unaffected (it is a runtime `_meta`
91
+ * field, not part of any tool's input schema).
92
+ */
93
+ nextCursor?: string | null;
94
+ /** Request filters the upstream verifiably honored. */
95
+ filtersApplied: string[];
96
+ /** Request filters sent but NOT honored (results are unfiltered on these). */
97
+ filtersDropped: string[];
98
+ /** Fields null/absent BY LIMITATION (keyless/endpoint), not "no data". */
99
+ fieldsUnavailable: string[];
100
+ /** Two-phase tools only: rows for which per-record detail was fetched. */
101
+ enrichedCount?: number;
102
+ /** Two-phase tools: enrichment accounting (see MetaDegraded). */
103
+ degraded?: MetaDegraded;
104
+ /** Present on list/search/aggregate tools. */
105
+ pagination?: MetaPagination;
106
+ /**
107
+ * P5 PROVENANCE (ADR-0045 B2/M1). The access path that served THIS response:
108
+ * `"live"` (the current, and in Phase 1 the ONLY, path) or `"snapshot"` (a
109
+ * self-hosted cache served when the live upstream was unreachable). Set by the
110
+ * resilience port's provenance-returning primitive, then threaded by the
111
+ * adapter ONLY when NON-live — so a live response OMITS this field entirely and
112
+ * stays byte-identical to pre-P5 output. Surfaced via the guarded
113
+ * `if (partial.dataPath !== undefined)` passthrough below (NO `??` default).
114
+ * Absent ⇒ live; do NOT read absence as any other value. Freshness enum, not a
115
+ * topology label (M2): an independent host serving live data is still `"live"`.
116
+ */
117
+ dataPath?: "live" | "snapshot";
118
+ /**
119
+ * P5 FRESHNESS (ADR-0045 m3). ISO-8601 UTC timestamp of when a NON-live
120
+ * (`snapshot`) body was retrieved from the origin — the as-of instant for
121
+ * deterministic cross-tool freshness comparison. Present ONLY alongside a
122
+ * non-live `dataPath`; absent on a live response (byte-identical). When a
123
+ * snapshot carries a `totalAvailable`, it is qualified as an as-of figure via
124
+ * the existing `totalIsEstimated` flag (m1 forbids a dedicated `totalAsOf`
125
+ * field — the only NEW P5 fields are `dataPath` and `asOf`).
126
+ */
127
+ asOf?: string;
128
+ /** Short, AI-actionable caveats (natural language). */
129
+ notes: string[];
130
+ };
131
+ /**
132
+ * Build a fully-populated, invariant-consistent ResponseMeta from a partial.
133
+ *
134
+ * Safe defaults (spec §2.1): a tool that supplies nothing gets a truthful,
135
+ * "single-record / known-complete" meta (`complete:true, truncated:false`).
136
+ *
137
+ * The server (or the caller) hands over whatever it knows; this helper fills
138
+ * the rest and then ENFORCES the §2.1 invariants so the flags the AI trusts
139
+ * are internally consistent:
140
+ * - `complete === true` ⟺ NOT truncated AND filtersDropped empty AND
141
+ * (no pagination OR hasMore===false) AND (no degraded OR failed===0).
142
+ * - If totalAvailable is known and returned < totalAvailable ⇒
143
+ * complete:false, truncated:true.
144
+ * - filtersDropped non-empty ⇒ at least one note is present.
145
+ */
146
+ export declare function buildMeta(partial?: Partial<ResponseMeta>): ResponseMeta;
147
+ /**
148
+ * Branded wrapper a tool handler returns to attach `_meta` to its payload.
149
+ *
150
+ * A handler may return either its raw domain object (server synthesizes a
151
+ * minimal truthful default) OR `withMeta(data, partialMeta)`. The brand lets
152
+ * the server distinguish "handler attached meta" from "domain object that
153
+ * happens to have `data`/`_meta` keys" with zero ambiguity.
154
+ */
155
+ export declare class MetaBundle<T = unknown> {
156
+ readonly data: T;
157
+ readonly meta: Partial<ResponseMeta>;
158
+ readonly __isMetaBundle: true;
159
+ constructor(data: T, meta: Partial<ResponseMeta>);
160
+ }
161
+ /** Attach a partial `_meta` to a handler's `data`. Server finalizes it. */
162
+ export declare function withMeta<T>(data: T, meta: Partial<ResponseMeta>): MetaBundle<T>;
163
+ /** Type guard: did the handler hand back a MetaBundle? */
164
+ export declare function isMetaBundle(v: unknown): v is MetaBundle;
165
+ //# sourceMappingURL=meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,uDAAuD;IACvD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,0EAA0E;IAC1E,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC/B;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,YAAY,CA6G3E;AAED;;;;;;;GAOG;AACH,qBAAa,UAAU,CAAC,CAAC,GAAG,OAAO;IAG/B,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC;IAHtC,QAAQ,CAAC,cAAc,EAAG,IAAI,CAAU;gBAE7B,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC;CAEvC;AAED,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAC1B,UAAU,CAAC,CAAC,CAAC,CAEf;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAMxD"}
package/dist/meta.js ADDED
@@ -0,0 +1,162 @@
1
+ /**
2
+ * @cliwant/mcp-sam-gov/meta — the `_meta` completeness/provenance convention.
3
+ *
4
+ * Why this exists
5
+ * ----------------
6
+ * These tools' outputs are consumed by an AI, not a human who can eyeball
7
+ * a table. For an AI consumer, silently-misleading data is strictly worse
8
+ * than missing data: the AI cannot tell a filtered-but-blank field from a
9
+ * genuinely-empty one, a hard cap from a complete list, or a swallowed
10
+ * error from a real zero — and will state the wrong answer confidently.
11
+ *
12
+ * Every tool's success payload therefore gains a sibling `_meta` object.
13
+ * `data` is UNCHANGED (backward compat): the envelope becomes
14
+ * `{ ok, data, _meta }` where existing consumers reading `ok`/`data.*`
15
+ * are 100% unaffected.
16
+ *
17
+ * See docs/research/02-truthful-outputs-spec.md §2 for the normative spec.
18
+ */
19
+ /**
20
+ * Build a fully-populated, invariant-consistent ResponseMeta from a partial.
21
+ *
22
+ * Safe defaults (spec §2.1): a tool that supplies nothing gets a truthful,
23
+ * "single-record / known-complete" meta (`complete:true, truncated:false`).
24
+ *
25
+ * The server (or the caller) hands over whatever it knows; this helper fills
26
+ * the rest and then ENFORCES the §2.1 invariants so the flags the AI trusts
27
+ * are internally consistent:
28
+ * - `complete === true` ⟺ NOT truncated AND filtersDropped empty AND
29
+ * (no pagination OR hasMore===false) AND (no degraded OR failed===0).
30
+ * - If totalAvailable is known and returned < totalAvailable ⇒
31
+ * complete:false, truncated:true.
32
+ * - filtersDropped non-empty ⇒ at least one note is present.
33
+ */
34
+ export function buildMeta(partial = {}) {
35
+ const source = partial.source ?? "unknown";
36
+ const keylessMode = partial.keylessMode ?? true;
37
+ const returned = partial.returned ?? 0;
38
+ const totalAvailable = partial.totalAvailable === undefined ? null : partial.totalAvailable;
39
+ const filtersApplied = partial.filtersApplied ?? [];
40
+ const filtersDropped = partial.filtersDropped ?? [];
41
+ const fieldsUnavailable = partial.fieldsUnavailable ?? [];
42
+ const notes = partial.notes ? [...partial.notes] : [];
43
+ const pagination = partial.pagination;
44
+ const degraded = partial.degraded;
45
+ // --- Derive truncated -------------------------------------------------
46
+ // A known total that exceeds what we returned proves truncation.
47
+ const totalProvesTruncation = totalAvailable !== null && returned < totalAvailable;
48
+ const paginationHasMore = pagination ? pagination.hasMore : false;
49
+ let truncated = partial.truncated ?? (totalProvesTruncation || paginationHasMore);
50
+ if (totalProvesTruncation || paginationHasMore)
51
+ truncated = true;
52
+ // --- P5 provenance (ADR-0045 B2/M1) -----------------------------------
53
+ // A NON-live response (a snapshot served because the live upstream was
54
+ // unreachable) is honesty-qualified below. For a live/absent dataPath this
55
+ // whole strand is INERT — `nonLiveProvenance` is false, so `complete`, the
56
+ // notes[], and totalIsEstimated are all derived EXACTLY as before P5 (Phase 1:
57
+ // no adapter threads a dataPath ⇒ byte-identical output on every one of the
58
+ // 110 tools).
59
+ const nonLiveProvenance = partial.dataPath !== undefined && partial.dataPath !== "live";
60
+ // --- Derive complete (single source of truth = the §2.1 invariant) ----
61
+ const degradedLoss = degraded ? degraded.failed > 0 : false;
62
+ const derivedComplete = !truncated &&
63
+ filtersDropped.length === 0 &&
64
+ !paginationHasMore &&
65
+ !degradedLoss &&
66
+ !totalProvesTruncation &&
67
+ // M1a: `complete` is defined against the LIVE result set (:53), so a snapshot
68
+ // can NEVER claim complete:true — gate the derivation behind a live/absent
69
+ // dataPath. (Inert for live: `!false` === true, no change.)
70
+ !nonLiveProvenance;
71
+ // Honor an explicit complete:false, but never let a caller claim
72
+ // complete:true when the invariant says otherwise.
73
+ const complete = partial.complete === false ? false : derivedComplete;
74
+ // --- Invariant: filtersDropped non-empty ⇒ a note explaining it -------
75
+ if (filtersDropped.length > 0 && notes.length === 0) {
76
+ notes.push(`The following requested filters were NOT applied by the upstream and the results are unfiltered on them: ${filtersDropped.join(", ")}. Treat these results as unfiltered on those facets.`);
77
+ }
78
+ // --- P5 (ADR-0045 M1c/m1): staleness note on a non-live response ------
79
+ // Push into the EXISTING notes[] (m1 killed the separate `stalenessNote`
80
+ // field). Inert for live/absent dataPath. Names the as-of instant when known.
81
+ if (nonLiveProvenance) {
82
+ const asOfPhrase = partial.asOf ? ` (as of ${partial.asOf})` : "";
83
+ notes.push(`Live upstream was unreachable — this response is served from a ${partial.dataPath} snapshot${asOfPhrase}. Freshness is NOT guaranteed; treat completeness and totals as of the snapshot time, not live.`);
84
+ }
85
+ const meta = {
86
+ source,
87
+ keylessMode,
88
+ complete,
89
+ truncated,
90
+ returned,
91
+ totalAvailable,
92
+ filtersApplied,
93
+ filtersDropped,
94
+ fieldsUnavailable,
95
+ notes,
96
+ };
97
+ if (partial.enrichedCount !== undefined)
98
+ meta.enrichedCount = partial.enrichedCount;
99
+ if (degraded)
100
+ meta.degraded = degraded;
101
+ if (pagination)
102
+ meta.pagination = pagination;
103
+ // Conditional passthrough (like enrichedCount/pagination): only surfaced when
104
+ // the tool provides it, so existing tools' `_meta` output stays byte-identical.
105
+ if (partial.totalIsLowerBound !== undefined)
106
+ meta.totalIsLowerBound = partial.totalIsLowerBound;
107
+ // Conditional passthrough (identical shape to totalIsLowerBound above): only
108
+ // surfaced when the tool provides it (CKAN's estimated-total path), so every
109
+ // existing tool's `_meta` output stays byte-identical. NO new derivation logic.
110
+ if (partial.totalIsEstimated !== undefined)
111
+ meta.totalIsEstimated = partial.totalIsEstimated;
112
+ // Conditional passthrough (IDENTICAL shape to totalIsLowerBound/totalIsEstimated
113
+ // above): only surfaced when the tool provides it (GovInfo's opaque-cursor path),
114
+ // so every existing tool's `_meta` output stays byte-identical. NO new derivation
115
+ // logic — the value (the offsetMark token, or null on the last page) is set by the
116
+ // cursor tool and passed through verbatim.
117
+ if (partial.nextCursor !== undefined)
118
+ meta.nextCursor = partial.nextCursor;
119
+ // P5 provenance passthrough (ADR-0045 B2) — IDENTICAL guarded idiom to
120
+ // totalIsLowerBound/nextCursor above: surfaced ONLY when the adapter provides
121
+ // it, so every existing (live, dataPath-absent) tool `_meta` stays
122
+ // byte-identical. NO `??` default. In Phase 1 no adapter threads these ⇒ inert.
123
+ if (partial.dataPath !== undefined)
124
+ meta.dataPath = partial.dataPath;
125
+ if (partial.asOf !== undefined)
126
+ meta.asOf = partial.asOf;
127
+ // M1b: a snapshot's totalAvailable is an as-of figure, NOT a live exact total —
128
+ // qualify it via the EXISTING totalIsEstimated flag (m1 forbids a new
129
+ // totalAsOf field) so an AI never reads it as a live count. Only when a total
130
+ // is actually present. Inert for live (nonLiveProvenance false).
131
+ if (nonLiveProvenance && totalAvailable !== null)
132
+ meta.totalIsEstimated = true;
133
+ return meta;
134
+ }
135
+ /**
136
+ * Branded wrapper a tool handler returns to attach `_meta` to its payload.
137
+ *
138
+ * A handler may return either its raw domain object (server synthesizes a
139
+ * minimal truthful default) OR `withMeta(data, partialMeta)`. The brand lets
140
+ * the server distinguish "handler attached meta" from "domain object that
141
+ * happens to have `data`/`_meta` keys" with zero ambiguity.
142
+ */
143
+ export class MetaBundle {
144
+ data;
145
+ meta;
146
+ __isMetaBundle = true;
147
+ constructor(data, meta) {
148
+ this.data = data;
149
+ this.meta = meta;
150
+ }
151
+ }
152
+ /** Attach a partial `_meta` to a handler's `data`. Server finalizes it. */
153
+ export function withMeta(data, meta) {
154
+ return new MetaBundle(data, meta);
155
+ }
156
+ /** Type guard: did the handler hand back a MetaBundle? */
157
+ export function isMetaBundle(v) {
158
+ return (typeof v === "object" &&
159
+ v !== null &&
160
+ v.__isMetaBundle === true);
161
+ }
162
+ //# sourceMappingURL=meta.js.map