us-gov-open-data-mcp 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 (310) hide show
  1. package/README.md +211 -0
  2. package/dist/client.d.ts +54 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +388 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/instructions.d.ts +8 -0
  7. package/dist/instructions.d.ts.map +1 -0
  8. package/dist/instructions.js +549 -0
  9. package/dist/instructions.js.map +1 -0
  10. package/dist/modules/bea.d.ts +28 -0
  11. package/dist/modules/bea.d.ts.map +1 -0
  12. package/dist/modules/bea.js +158 -0
  13. package/dist/modules/bea.js.map +1 -0
  14. package/dist/modules/bls.d.ts +29 -0
  15. package/dist/modules/bls.d.ts.map +1 -0
  16. package/dist/modules/bls.js +244 -0
  17. package/dist/modules/bls.js.map +1 -0
  18. package/dist/modules/bts.d.ts +26 -0
  19. package/dist/modules/bts.d.ts.map +1 -0
  20. package/dist/modules/bts.js +112 -0
  21. package/dist/modules/bts.js.map +1 -0
  22. package/dist/modules/cdc.d.ts +26 -0
  23. package/dist/modules/cdc.d.ts.map +1 -0
  24. package/dist/modules/cdc.js +310 -0
  25. package/dist/modules/cdc.js.map +1 -0
  26. package/dist/modules/census.d.ts +23 -0
  27. package/dist/modules/census.d.ts.map +1 -0
  28. package/dist/modules/census.js +141 -0
  29. package/dist/modules/census.js.map +1 -0
  30. package/dist/modules/cfpb.d.ts +20 -0
  31. package/dist/modules/cfpb.d.ts.map +1 -0
  32. package/dist/modules/cfpb.js +135 -0
  33. package/dist/modules/cfpb.js.map +1 -0
  34. package/dist/modules/clinical-trials.d.ts +22 -0
  35. package/dist/modules/clinical-trials.d.ts.map +1 -0
  36. package/dist/modules/clinical-trials.js +171 -0
  37. package/dist/modules/clinical-trials.js.map +1 -0
  38. package/dist/modules/cms.d.ts +21 -0
  39. package/dist/modules/cms.d.ts.map +1 -0
  40. package/dist/modules/cms.js +135 -0
  41. package/dist/modules/cms.js.map +1 -0
  42. package/dist/modules/college-scorecard.d.ts +39 -0
  43. package/dist/modules/college-scorecard.d.ts.map +1 -0
  44. package/dist/modules/college-scorecard.js +192 -0
  45. package/dist/modules/college-scorecard.js.map +1 -0
  46. package/dist/modules/congress.d.ts +28 -0
  47. package/dist/modules/congress.d.ts.map +1 -0
  48. package/dist/modules/congress.js +883 -0
  49. package/dist/modules/congress.js.map +1 -0
  50. package/dist/modules/dol.d.ts +27 -0
  51. package/dist/modules/dol.d.ts.map +1 -0
  52. package/dist/modules/dol.js +209 -0
  53. package/dist/modules/dol.js.map +1 -0
  54. package/dist/modules/eia.d.ts +33 -0
  55. package/dist/modules/eia.d.ts.map +1 -0
  56. package/dist/modules/eia.js +227 -0
  57. package/dist/modules/eia.js.map +1 -0
  58. package/dist/modules/epa.d.ts +21 -0
  59. package/dist/modules/epa.d.ts.map +1 -0
  60. package/dist/modules/epa.js +91 -0
  61. package/dist/modules/epa.js.map +1 -0
  62. package/dist/modules/fbi.d.ts +28 -0
  63. package/dist/modules/fbi.d.ts.map +1 -0
  64. package/dist/modules/fbi.js +143 -0
  65. package/dist/modules/fbi.js.map +1 -0
  66. package/dist/modules/fda.d.ts +35 -0
  67. package/dist/modules/fda.d.ts.map +1 -0
  68. package/dist/modules/fda.js +262 -0
  69. package/dist/modules/fda.js.map +1 -0
  70. package/dist/modules/fdic.d.ts +21 -0
  71. package/dist/modules/fdic.d.ts.map +1 -0
  72. package/dist/modules/fdic.js +186 -0
  73. package/dist/modules/fdic.js.map +1 -0
  74. package/dist/modules/fec.d.ts +29 -0
  75. package/dist/modules/fec.d.ts.map +1 -0
  76. package/dist/modules/fec.js +282 -0
  77. package/dist/modules/fec.js.map +1 -0
  78. package/dist/modules/federal-register.d.ts +24 -0
  79. package/dist/modules/federal-register.d.ts.map +1 -0
  80. package/dist/modules/federal-register.js +184 -0
  81. package/dist/modules/federal-register.js.map +1 -0
  82. package/dist/modules/fema.d.ts +20 -0
  83. package/dist/modules/fema.d.ts.map +1 -0
  84. package/dist/modules/fema.js +156 -0
  85. package/dist/modules/fema.js.map +1 -0
  86. package/dist/modules/fred.d.ts +40 -0
  87. package/dist/modules/fred.d.ts.map +1 -0
  88. package/dist/modules/fred.js +143 -0
  89. package/dist/modules/fred.js.map +1 -0
  90. package/dist/modules/govinfo.d.ts +24 -0
  91. package/dist/modules/govinfo.d.ts.map +1 -0
  92. package/dist/modules/govinfo.js +147 -0
  93. package/dist/modules/govinfo.js.map +1 -0
  94. package/dist/modules/hud.d.ts +17 -0
  95. package/dist/modules/hud.d.ts.map +1 -0
  96. package/dist/modules/hud.js +170 -0
  97. package/dist/modules/hud.js.map +1 -0
  98. package/dist/modules/naep.d.ts +27 -0
  99. package/dist/modules/naep.d.ts.map +1 -0
  100. package/dist/modules/naep.js +210 -0
  101. package/dist/modules/naep.js.map +1 -0
  102. package/dist/modules/nhtsa.d.ts +13 -0
  103. package/dist/modules/nhtsa.d.ts.map +1 -0
  104. package/dist/modules/nhtsa.js +196 -0
  105. package/dist/modules/nhtsa.js.map +1 -0
  106. package/dist/modules/noaa.d.ts +41 -0
  107. package/dist/modules/noaa.d.ts.map +1 -0
  108. package/dist/modules/noaa.js +135 -0
  109. package/dist/modules/noaa.js.map +1 -0
  110. package/dist/modules/nrel.d.ts +25 -0
  111. package/dist/modules/nrel.d.ts.map +1 -0
  112. package/dist/modules/nrel.js +87 -0
  113. package/dist/modules/nrel.js.map +1 -0
  114. package/dist/modules/regulations.d.ts +24 -0
  115. package/dist/modules/regulations.d.ts.map +1 -0
  116. package/dist/modules/regulations.js +173 -0
  117. package/dist/modules/regulations.js.map +1 -0
  118. package/dist/modules/sec.d.ts +25 -0
  119. package/dist/modules/sec.d.ts.map +1 -0
  120. package/dist/modules/sec.js +192 -0
  121. package/dist/modules/sec.js.map +1 -0
  122. package/dist/modules/senate-lobbying.d.ts +21 -0
  123. package/dist/modules/senate-lobbying.d.ts.map +1 -0
  124. package/dist/modules/senate-lobbying.js +189 -0
  125. package/dist/modules/senate-lobbying.js.map +1 -0
  126. package/dist/modules/treasury.d.ts +23 -0
  127. package/dist/modules/treasury.d.ts.map +1 -0
  128. package/dist/modules/treasury.js +234 -0
  129. package/dist/modules/treasury.js.map +1 -0
  130. package/dist/modules/usaspending.d.ts +19 -0
  131. package/dist/modules/usaspending.d.ts.map +1 -0
  132. package/dist/modules/usaspending.js +204 -0
  133. package/dist/modules/usaspending.js.map +1 -0
  134. package/dist/modules/usda-fooddata.d.ts +24 -0
  135. package/dist/modules/usda-fooddata.d.ts.map +1 -0
  136. package/dist/modules/usda-fooddata.js +118 -0
  137. package/dist/modules/usda-fooddata.js.map +1 -0
  138. package/dist/modules/usda-nass.d.ts +46 -0
  139. package/dist/modules/usda-nass.d.ts.map +1 -0
  140. package/dist/modules/usda-nass.js +151 -0
  141. package/dist/modules/usda-nass.js.map +1 -0
  142. package/dist/modules/usgs.d.ts +21 -0
  143. package/dist/modules/usgs.d.ts.map +1 -0
  144. package/dist/modules/usgs.js +203 -0
  145. package/dist/modules/usgs.js.map +1 -0
  146. package/dist/modules/uspto.d.ts +13 -0
  147. package/dist/modules/uspto.d.ts.map +1 -0
  148. package/dist/modules/uspto.js +157 -0
  149. package/dist/modules/uspto.js.map +1 -0
  150. package/dist/modules/world-bank.d.ts +21 -0
  151. package/dist/modules/world-bank.d.ts.map +1 -0
  152. package/dist/modules/world-bank.js +130 -0
  153. package/dist/modules/world-bank.js.map +1 -0
  154. package/dist/prompts.d.ts +12 -0
  155. package/dist/prompts.d.ts.map +1 -0
  156. package/dist/prompts.js +858 -0
  157. package/dist/prompts.js.map +1 -0
  158. package/dist/sdk/bea.d.ts +111 -0
  159. package/dist/sdk/bea.d.ts.map +1 -0
  160. package/dist/sdk/bea.js +242 -0
  161. package/dist/sdk/bea.js.map +1 -0
  162. package/dist/sdk/bls.d.ts +65 -0
  163. package/dist/sdk/bls.d.ts.map +1 -0
  164. package/dist/sdk/bls.js +203 -0
  165. package/dist/sdk/bls.js.map +1 -0
  166. package/dist/sdk/bts.d.ts +108 -0
  167. package/dist/sdk/bts.d.ts.map +1 -0
  168. package/dist/sdk/bts.js +121 -0
  169. package/dist/sdk/bts.js.map +1 -0
  170. package/dist/sdk/cdc.d.ts +105 -0
  171. package/dist/sdk/cdc.d.ts.map +1 -0
  172. package/dist/sdk/cdc.js +222 -0
  173. package/dist/sdk/cdc.js.map +1 -0
  174. package/dist/sdk/census.d.ts +47 -0
  175. package/dist/sdk/census.d.ts.map +1 -0
  176. package/dist/sdk/census.js +99 -0
  177. package/dist/sdk/census.js.map +1 -0
  178. package/dist/sdk/cfpb.d.ts +148 -0
  179. package/dist/sdk/cfpb.d.ts.map +1 -0
  180. package/dist/sdk/cfpb.js +153 -0
  181. package/dist/sdk/cfpb.js.map +1 -0
  182. package/dist/sdk/clinical-trials.d.ts +214 -0
  183. package/dist/sdk/clinical-trials.d.ts.map +1 -0
  184. package/dist/sdk/clinical-trials.js +134 -0
  185. package/dist/sdk/clinical-trials.js.map +1 -0
  186. package/dist/sdk/cms.d.ts +81 -0
  187. package/dist/sdk/cms.d.ts.map +1 -0
  188. package/dist/sdk/cms.js +227 -0
  189. package/dist/sdk/cms.js.map +1 -0
  190. package/dist/sdk/college-scorecard.d.ts +63 -0
  191. package/dist/sdk/college-scorecard.d.ts.map +1 -0
  192. package/dist/sdk/college-scorecard.js +131 -0
  193. package/dist/sdk/college-scorecard.js.map +1 -0
  194. package/dist/sdk/congress.d.ts +575 -0
  195. package/dist/sdk/congress.d.ts.map +1 -0
  196. package/dist/sdk/congress.js +659 -0
  197. package/dist/sdk/congress.js.map +1 -0
  198. package/dist/sdk/dol.d.ts +299 -0
  199. package/dist/sdk/dol.d.ts.map +1 -0
  200. package/dist/sdk/dol.js +252 -0
  201. package/dist/sdk/dol.js.map +1 -0
  202. package/dist/sdk/eia.d.ts +91 -0
  203. package/dist/sdk/eia.d.ts.map +1 -0
  204. package/dist/sdk/eia.js +156 -0
  205. package/dist/sdk/eia.js.map +1 -0
  206. package/dist/sdk/epa.d.ts +128 -0
  207. package/dist/sdk/epa.d.ts.map +1 -0
  208. package/dist/sdk/epa.js +120 -0
  209. package/dist/sdk/epa.js.map +1 -0
  210. package/dist/sdk/fbi.d.ts +48 -0
  211. package/dist/sdk/fbi.d.ts.map +1 -0
  212. package/dist/sdk/fbi.js +69 -0
  213. package/dist/sdk/fbi.js.map +1 -0
  214. package/dist/sdk/fda.d.ts +356 -0
  215. package/dist/sdk/fda.d.ts.map +1 -0
  216. package/dist/sdk/fda.js +162 -0
  217. package/dist/sdk/fda.js.map +1 -0
  218. package/dist/sdk/fdic.d.ts +227 -0
  219. package/dist/sdk/fdic.d.ts.map +1 -0
  220. package/dist/sdk/fdic.js +172 -0
  221. package/dist/sdk/fdic.js.map +1 -0
  222. package/dist/sdk/fec.d.ts +142 -0
  223. package/dist/sdk/fec.d.ts.map +1 -0
  224. package/dist/sdk/fec.js +92 -0
  225. package/dist/sdk/fec.js.map +1 -0
  226. package/dist/sdk/federal-register.d.ts +88 -0
  227. package/dist/sdk/federal-register.d.ts.map +1 -0
  228. package/dist/sdk/federal-register.js +100 -0
  229. package/dist/sdk/federal-register.js.map +1 -0
  230. package/dist/sdk/fema.d.ts +137 -0
  231. package/dist/sdk/fema.d.ts.map +1 -0
  232. package/dist/sdk/fema.js +197 -0
  233. package/dist/sdk/fema.js.map +1 -0
  234. package/dist/sdk/fred.d.ts +72 -0
  235. package/dist/sdk/fred.d.ts.map +1 -0
  236. package/dist/sdk/fred.js +59 -0
  237. package/dist/sdk/fred.js.map +1 -0
  238. package/dist/sdk/govinfo.d.ts +64 -0
  239. package/dist/sdk/govinfo.d.ts.map +1 -0
  240. package/dist/sdk/govinfo.js +187 -0
  241. package/dist/sdk/govinfo.js.map +1 -0
  242. package/dist/sdk/hud.d.ts +87 -0
  243. package/dist/sdk/hud.d.ts.map +1 -0
  244. package/dist/sdk/hud.js +91 -0
  245. package/dist/sdk/hud.js.map +1 -0
  246. package/dist/sdk/index.d.ts +51 -0
  247. package/dist/sdk/index.d.ts.map +1 -0
  248. package/dist/sdk/index.js +51 -0
  249. package/dist/sdk/index.js.map +1 -0
  250. package/dist/sdk/naep.d.ts +93 -0
  251. package/dist/sdk/naep.d.ts.map +1 -0
  252. package/dist/sdk/naep.js +163 -0
  253. package/dist/sdk/naep.js.map +1 -0
  254. package/dist/sdk/nhtsa.d.ts +169 -0
  255. package/dist/sdk/nhtsa.d.ts.map +1 -0
  256. package/dist/sdk/nhtsa.js +102 -0
  257. package/dist/sdk/nhtsa.js.map +1 -0
  258. package/dist/sdk/noaa.d.ts +72 -0
  259. package/dist/sdk/noaa.d.ts.map +1 -0
  260. package/dist/sdk/noaa.js +64 -0
  261. package/dist/sdk/noaa.js.map +1 -0
  262. package/dist/sdk/nrel.d.ts +145 -0
  263. package/dist/sdk/nrel.d.ts.map +1 -0
  264. package/dist/sdk/nrel.js +93 -0
  265. package/dist/sdk/nrel.js.map +1 -0
  266. package/dist/sdk/regulations.d.ts +146 -0
  267. package/dist/sdk/regulations.d.ts.map +1 -0
  268. package/dist/sdk/regulations.js +103 -0
  269. package/dist/sdk/regulations.js.map +1 -0
  270. package/dist/sdk/sec.d.ts +114 -0
  271. package/dist/sdk/sec.d.ts.map +1 -0
  272. package/dist/sdk/sec.js +151 -0
  273. package/dist/sdk/sec.js.map +1 -0
  274. package/dist/sdk/senate-lobbying.d.ts +147 -0
  275. package/dist/sdk/senate-lobbying.d.ts.map +1 -0
  276. package/dist/sdk/senate-lobbying.js +125 -0
  277. package/dist/sdk/senate-lobbying.js.map +1 -0
  278. package/dist/sdk/treasury.d.ts +59 -0
  279. package/dist/sdk/treasury.d.ts.map +1 -0
  280. package/dist/sdk/treasury.js +1397 -0
  281. package/dist/sdk/treasury.js.map +1 -0
  282. package/dist/sdk/usaspending.d.ts +126 -0
  283. package/dist/sdk/usaspending.d.ts.map +1 -0
  284. package/dist/sdk/usaspending.js +270 -0
  285. package/dist/sdk/usaspending.js.map +1 -0
  286. package/dist/sdk/usda-fooddata.d.ts +112 -0
  287. package/dist/sdk/usda-fooddata.d.ts.map +1 -0
  288. package/dist/sdk/usda-fooddata.js +80 -0
  289. package/dist/sdk/usda-fooddata.js.map +1 -0
  290. package/dist/sdk/usda-nass.d.ts +75 -0
  291. package/dist/sdk/usda-nass.d.ts.map +1 -0
  292. package/dist/sdk/usda-nass.js +83 -0
  293. package/dist/sdk/usda-nass.js.map +1 -0
  294. package/dist/sdk/usgs.d.ts +221 -0
  295. package/dist/sdk/usgs.d.ts.map +1 -0
  296. package/dist/sdk/usgs.js +182 -0
  297. package/dist/sdk/usgs.js.map +1 -0
  298. package/dist/sdk/uspto.d.ts +109 -0
  299. package/dist/sdk/uspto.d.ts.map +1 -0
  300. package/dist/sdk/uspto.js +286 -0
  301. package/dist/sdk/uspto.js.map +1 -0
  302. package/dist/sdk/world-bank.d.ts +78 -0
  303. package/dist/sdk/world-bank.d.ts.map +1 -0
  304. package/dist/sdk/world-bank.js +72 -0
  305. package/dist/sdk/world-bank.js.map +1 -0
  306. package/dist/server.d.ts +22 -0
  307. package/dist/server.d.ts.map +1 -0
  308. package/dist/server.js +196 -0
  309. package/dist/server.js.map +1 -0
  310. package/package.json +113 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * EIA SDK — typed API client for the U.S. Energy Information Administration API v2.
3
+ *
4
+ * Standalone — no MCP server required. Usage:
5
+ *
6
+ * import { queryEia } from "us-gov-open-data/sdk/eia";
7
+ *
8
+ * Requires EIA_API_KEY env var — register at https://www.eia.gov/opendata/register.php
9
+ */
10
+ export interface EiaResponse {
11
+ response: {
12
+ total: number;
13
+ data: EiaObservation[];
14
+ description?: string;
15
+ dateFormat?: string;
16
+ frequency?: string;
17
+ };
18
+ request?: Record<string, unknown>;
19
+ }
20
+ export interface EiaObservation {
21
+ period: string;
22
+ value: number | string | null;
23
+ units?: string;
24
+ unit?: string;
25
+ "series-description"?: string;
26
+ seriesDescription?: string;
27
+ series?: string;
28
+ stateDescription?: string;
29
+ stateid?: string;
30
+ stateId?: string;
31
+ sectorName?: string;
32
+ sectorid?: string;
33
+ msn?: string;
34
+ process?: string;
35
+ [key: string]: unknown;
36
+ }
37
+ export interface EiaRoute {
38
+ path: string;
39
+ description: string;
40
+ frequency: string[];
41
+ facets?: string[];
42
+ }
43
+ export declare const sedsMsnCodes: Record<string, string>;
44
+ export declare const routes: EiaRoute[];
45
+ /**
46
+ * Query the EIA API v2.
47
+ * Uses bracket-style params: data[0], facets[series][], sort[0][column], etc.
48
+ * String arrays produce repeated keys automatically via createClient.
49
+ */
50
+ export declare function queryEia(route: string, params?: Record<string, string | number | string[] | undefined>): Promise<EiaResponse>;
51
+ /** Get petroleum data (spot prices, gasoline, diesel). */
52
+ export declare function getPetroleum(opts?: {
53
+ product?: string;
54
+ frequency?: string;
55
+ start?: string;
56
+ end?: string;
57
+ length?: number;
58
+ }): Promise<EiaResponse>;
59
+ /** Get electricity data (retail sales, prices, etc.). */
60
+ export declare function getElectricity(opts?: {
61
+ state?: string;
62
+ sector?: string;
63
+ dataType?: string;
64
+ frequency?: string;
65
+ start?: string;
66
+ length?: number;
67
+ }): Promise<EiaResponse>;
68
+ /** Get natural gas prices. */
69
+ export declare function getNaturalGas(opts?: {
70
+ process?: string;
71
+ frequency?: string;
72
+ start?: string;
73
+ length?: number;
74
+ }): Promise<EiaResponse>;
75
+ /** Get state energy profile data (SEDS). */
76
+ export declare function getStateEnergy(opts?: {
77
+ state?: string;
78
+ msn?: string;
79
+ start?: string;
80
+ length?: number;
81
+ }): Promise<EiaResponse>;
82
+ /** Get total energy overview. */
83
+ export declare function getTotalEnergy(opts?: {
84
+ msn?: string;
85
+ frequency?: string;
86
+ start?: string;
87
+ length?: number;
88
+ }): Promise<EiaResponse>;
89
+ /** Clear cached responses. */
90
+ export declare function clearCache(): void;
91
+ //# sourceMappingURL=eia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eia.d.ts","sourceRoot":"","sources":["../../src/sdk/eia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * EIA SDK — typed API client for the U.S. Energy Information Administration API v2.
3
+ *
4
+ * Standalone — no MCP server required. Usage:
5
+ *
6
+ * import { queryEia } from "us-gov-open-data/sdk/eia";
7
+ *
8
+ * Requires EIA_API_KEY env var — register at https://www.eia.gov/opendata/register.php
9
+ */
10
+ import { createClient } from "../client.js";
11
+ // ─── Client ──────────────────────────────────────────────────────────
12
+ const api = createClient({
13
+ baseUrl: "https://api.eia.gov/v2",
14
+ name: "eia",
15
+ auth: {
16
+ type: "query",
17
+ key: "api_key",
18
+ envVar: "EIA_API_KEY",
19
+ },
20
+ rateLimit: { perSecond: 5, burst: 10 },
21
+ cacheTtlMs: 60 * 60 * 1000, // 1 hour — EIA data updates infrequently
22
+ checkError: (data) => data?.error ?? null,
23
+ });
24
+ // ─── Reference data ──────────────────────────────────────────────────
25
+ export const sedsMsnCodes = {
26
+ TETCB: "Total energy consumption (trillion BTU)",
27
+ TETCD: "Total energy consumption per capita",
28
+ TEPRB: "Total energy production (trillion BTU)",
29
+ ESTCB: "Electricity total consumption",
30
+ CLTCB: "Coal consumption",
31
+ NNTCB: "Natural gas consumption",
32
+ PATCB: "Petroleum consumption (all products)",
33
+ RETCB: "Renewable energy consumption",
34
+ NUETB: "Nuclear energy consumption",
35
+ ELISB: "Electricity interstate flow",
36
+ TETXB: "Total energy expenditures",
37
+ };
38
+ export const routes = [
39
+ { path: "/petroleum/pri/spt/data", description: "Petroleum spot prices (WTI, Brent)", frequency: ["daily", "weekly", "monthly", "annual"], facets: ["series"] },
40
+ { path: "/petroleum/pri/gnd/data", description: "Retail gasoline and diesel prices", frequency: ["weekly", "monthly", "annual"], facets: ["series", "product", "duoarea"] },
41
+ { path: "/petroleum/crd/crpdn/data", description: "Crude oil production", frequency: ["monthly", "annual"], facets: ["duoarea", "product"] },
42
+ { path: "/petroleum/sum/snd/data", description: "Petroleum supply and disposition", frequency: ["weekly", "monthly", "annual"] },
43
+ { path: "/petroleum/stoc/wstk/data", description: "Weekly petroleum stocks", frequency: ["weekly"], facets: ["product", "duoarea"] },
44
+ { path: "/petroleum/move/imp/data", description: "Petroleum imports", frequency: ["monthly", "annual"], facets: ["product", "originCountry"] },
45
+ { path: "/electricity/retail-sales/data", description: "Electricity retail sales, revenue, prices, customers", frequency: ["monthly", "annual"], facets: ["stateid", "sectorid"] },
46
+ { path: "/electricity/electric-power-operational-data/data", description: "Power plant operational data", frequency: ["monthly", "annual"], facets: ["stateid", "sectorid", "fueltypeid"] },
47
+ { path: "/electricity/state-electricity-profiles/emissions-by-state-by-fuel/data", description: "CO2 emissions by state and fuel", frequency: ["annual"], facets: ["stateid"] },
48
+ { path: "/natural-gas/pri/sum/data", description: "Natural gas prices summary", frequency: ["monthly", "annual"], facets: ["process", "duoarea"] },
49
+ { path: "/natural-gas/sum/snd/data", description: "Natural gas supply and disposition", frequency: ["monthly", "annual"] },
50
+ { path: "/natural-gas/prod/sum/data", description: "Natural gas production", frequency: ["monthly", "annual"] },
51
+ { path: "/coal/production/data", description: "Coal production", frequency: ["quarterly", "annual"] },
52
+ { path: "/coal/consumption-and-quality/data", description: "Coal consumption", frequency: ["quarterly", "annual"] },
53
+ { path: "/seds/data", description: "State energy profiles (SEDS)", frequency: ["annual"], facets: ["stateId", "msn"] },
54
+ { path: "/total-energy/data", description: "Monthly Energy Review — total US energy overview", frequency: ["monthly", "annual"], facets: ["msn"] },
55
+ { path: "/aeo/data", description: "Annual Energy Outlook projections", frequency: ["annual"] },
56
+ { path: "/international/data", description: "International energy data", frequency: ["monthly", "annual"] },
57
+ { path: "/nuclear/status-operable-units/data", description: "Nuclear power plant status", frequency: ["monthly"] },
58
+ ];
59
+ // ─── Public API ──────────────────────────────────────────────────────
60
+ /**
61
+ * Query the EIA API v2.
62
+ * Uses bracket-style params: data[0], facets[series][], sort[0][column], etc.
63
+ * String arrays produce repeated keys automatically via createClient.
64
+ */
65
+ export async function queryEia(route, params = {}) {
66
+ const normalizedRoute = route.startsWith("/") ? route : `/${route}`;
67
+ return api.get(`${normalizedRoute}`, params);
68
+ }
69
+ /** Get petroleum data (spot prices, gasoline, diesel). */
70
+ export async function getPetroleum(opts = {}) {
71
+ const productMap = {
72
+ crude: "/petroleum/pri/spt/data",
73
+ gasoline: "/petroleum/pri/gnd/data",
74
+ diesel: "/petroleum/pri/gnd/data",
75
+ all: "/petroleum/pri/spt/data",
76
+ };
77
+ const prod = (opts.product || "crude").toLowerCase();
78
+ const route = productMap[prod] || "/petroleum/pri/spt/data";
79
+ const params = {
80
+ frequency: opts.frequency || "monthly",
81
+ "data[0]": "value",
82
+ start: opts.start || `${new Date().getFullYear() - 2}-01`,
83
+ length: opts.length || 60,
84
+ "sort[0][column]": "period",
85
+ "sort[0][direction]": "desc",
86
+ };
87
+ if (opts.end)
88
+ params.end = opts.end;
89
+ if (prod === "crude")
90
+ params["facets[product][]"] = "EPCWTI";
91
+ return queryEia(route, params);
92
+ }
93
+ /** Get electricity data (retail sales, prices, etc.). */
94
+ export async function getElectricity(opts = {}) {
95
+ const params = {
96
+ frequency: opts.frequency || "monthly",
97
+ "data[0]": opts.dataType || "price",
98
+ start: opts.start || `${new Date().getFullYear() - 2}-01`,
99
+ length: opts.length || 60,
100
+ "sort[0][column]": "period",
101
+ "sort[0][direction]": "desc",
102
+ };
103
+ if (opts.state)
104
+ params["facets[stateid][]"] = opts.state.toUpperCase();
105
+ if (opts.sector)
106
+ params["facets[sectorid][]"] = opts.sector.toUpperCase();
107
+ return queryEia("/electricity/retail-sales/data", params);
108
+ }
109
+ /** Get natural gas prices. */
110
+ export async function getNaturalGas(opts = {}) {
111
+ const params = {
112
+ frequency: opts.frequency || "monthly",
113
+ "data[0]": "value",
114
+ start: opts.start || `${new Date().getFullYear() - 2}-01`,
115
+ length: opts.length || 60,
116
+ "sort[0][column]": "period",
117
+ "sort[0][direction]": "desc",
118
+ };
119
+ if (opts.process)
120
+ params["facets[process][]"] = opts.process.toUpperCase();
121
+ return queryEia("/natural-gas/pri/sum/data", params);
122
+ }
123
+ /** Get state energy profile data (SEDS). */
124
+ export async function getStateEnergy(opts = {}) {
125
+ const params = {
126
+ frequency: "annual",
127
+ "data[0]": "value",
128
+ start: opts.start || String(new Date().getFullYear() - 5),
129
+ length: opts.length || 60,
130
+ "sort[0][column]": "period",
131
+ "sort[0][direction]": "desc",
132
+ };
133
+ if (opts.state)
134
+ params["facets[stateId][]"] = opts.state.toUpperCase();
135
+ params["facets[msn][]"] = (opts.msn || "TETCB").toUpperCase();
136
+ return queryEia("/seds/data", params);
137
+ }
138
+ /** Get total energy overview. */
139
+ export async function getTotalEnergy(opts = {}) {
140
+ const params = {
141
+ frequency: opts.frequency || "monthly",
142
+ "data[0]": "value",
143
+ start: opts.start || `${new Date().getFullYear() - 2}-01`,
144
+ length: opts.length || 60,
145
+ "sort[0][column]": "period",
146
+ "sort[0][direction]": "desc",
147
+ };
148
+ if (opts.msn)
149
+ params["facets[msn][]"] = opts.msn.toUpperCase();
150
+ return queryEia("/total-energy/data", params);
151
+ }
152
+ /** Clear cached responses. */
153
+ export function clearCache() {
154
+ api.clearCache();
155
+ }
156
+ //# sourceMappingURL=eia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eia.js","sourceRoot":"","sources":["../../src/sdk/eia.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wEAAwE;AAExE,MAAM,GAAG,GAAG,YAAY,CAAC;IACvB,OAAO,EAAE,wBAAwB;IACjC,IAAI,EAAE,KAAK;IACX,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,aAAa;KACtB;IACD,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACtC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,yCAAyC;IACrE,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,IAAY,EAAE,KAAK,IAAI,IAAI;CACnD,CAAC,CAAC;AAwCH,wEAAwE;AAExE,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,KAAK,EAAE,yCAAyC;IAChD,KAAK,EAAE,qCAAqC;IAC5C,KAAK,EAAE,wCAAwC;IAC/C,KAAK,EAAE,+BAA+B;IACtC,KAAK,EAAE,kBAAkB;IACzB,KAAK,EAAE,yBAAyB;IAChC,KAAK,EAAE,sCAAsC;IAC7C,KAAK,EAAE,8BAA8B;IACrC,KAAK,EAAE,4BAA4B;IACnC,KAAK,EAAE,6BAA6B;IACpC,KAAK,EAAE,2BAA2B;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAe;IAChC,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,oCAAoC,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC/J,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,mCAAmC,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC3K,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,sBAAsB,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC5I,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,kCAAkC,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;IAChI,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,yBAAyB,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IACpI,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,EAAE;IAC9I,EAAE,IAAI,EAAE,gCAAgC,EAAE,WAAW,EAAE,sDAAsD,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;IAClL,EAAE,IAAI,EAAE,mDAAmD,EAAE,WAAW,EAAE,8BAA8B,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE;IAC3L,EAAE,IAAI,EAAE,yEAAyE,EAAE,WAAW,EAAE,iCAAiC,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;IAC/K,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,4BAA4B,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAClJ,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,oCAAoC,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;IAC1H,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,wBAAwB,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;IAC/G,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE;IACrG,EAAE,IAAI,EAAE,oCAAoC,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE;IACnH,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;IACtH,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,kDAAkD,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE;IAClJ,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,mCAAmC,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC9F,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,2BAA2B,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;IAC3G,EAAE,IAAI,EAAE,qCAAqC,EAAE,WAAW,EAAE,4BAA4B,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE;CACnH,CAAC;AAEF,wEAAwE;AAExE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAa,EACb,SAAiE,EAAE;IAEnE,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;IACpE,OAAO,GAAG,CAAC,GAAG,CAAc,GAAG,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAM/B,EAAE;IACJ,MAAM,UAAU,GAA2B;QACzC,KAAK,EAAE,yBAAyB;QAChC,QAAQ,EAAE,yBAAyB;QACnC,MAAM,EAAE,yBAAyB;QACjC,GAAG,EAAE,yBAAyB;KAC/B,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC;IAE5D,MAAM,MAAM,GAA2D;QACrE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;QACtC,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK;QACzD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,iBAAiB,EAAE,QAAQ;QAC3B,oBAAoB,EAAE,MAAM;KAC7B,CAAC;IAEF,IAAI,IAAI,CAAC,GAAG;QAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACpC,IAAI,IAAI,KAAK,OAAO;QAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC;IAE7D,OAAO,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAOjC,EAAE;IACJ,MAAM,MAAM,GAA2D;QACrE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;QACtC,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO;QACnC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK;QACzD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,iBAAiB,EAAE,QAAQ;QAC3B,oBAAoB,EAAE,MAAM;KAC7B,CAAC;IAEF,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACvE,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAE1E,OAAO,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,8BAA8B;AAC9B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAKhC,EAAE;IACJ,MAAM,MAAM,GAA2D;QACrE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;QACtC,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK;QACzD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,iBAAiB,EAAE,QAAQ;QAC3B,oBAAoB,EAAE,MAAM;KAC7B,CAAC;IAEF,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAE3E,OAAO,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAKjC,EAAE;IACJ,MAAM,MAAM,GAA2D;QACrE,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,iBAAiB,EAAE,QAAQ;QAC3B,oBAAoB,EAAE,MAAM;KAC7B,CAAC;IAEF,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACvE,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAE9D,OAAO,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,iCAAiC;AACjC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAKjC,EAAE;IACJ,MAAM,MAAM,GAA2D;QACrE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;QACtC,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK;QACzD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,iBAAiB,EAAE,QAAQ;QAC3B,oBAAoB,EAAE,MAAM;KAC7B,CAAC;IAEF,IAAI,IAAI,CAAC,GAAG;QAAE,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAE/D,OAAO,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,UAAU;IACxB,GAAG,CAAC,UAAU,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * EPA SDK — typed API client for EPA Envirofacts and ECHO (Enforcement & Compliance) APIs.
3
+ *
4
+ * Standalone — no MCP server required. Usage:
5
+ *
6
+ * import { getAirQuality, searchFacilities, getUVIndex } from "us-gov-open-data/sdk/epa";
7
+ *
8
+ * const aq = await getAirQuality({ state: "CA" });
9
+ * console.log(aq);
10
+ *
11
+ * const facilities = await searchFacilities({ state: "NY", mediaType: "air", majorOnly: true });
12
+ * console.log(facilities);
13
+ *
14
+ * const uv = await getUVIndex("10001");
15
+ * console.log(uv);
16
+ *
17
+ * No API key required.
18
+ * Docs:
19
+ * Envirofacts: https://www.epa.gov/enviro/web-services
20
+ * ECHO: https://echo.epa.gov/tools/web-services
21
+ */
22
+ export interface AirQualityMeasure {
23
+ STATE_ABBR?: string;
24
+ STATE_NAME?: string;
25
+ COUNTY_NAME?: string;
26
+ CBSA_NAME?: string;
27
+ MEASURE_NAME?: string;
28
+ MEASURE_ID?: number;
29
+ UNIT_OF_MEASURE?: string;
30
+ VALUE?: number;
31
+ YEAR?: number;
32
+ [key: string]: unknown;
33
+ }
34
+ export interface EchoFacility {
35
+ CWPName?: string;
36
+ RegistryID?: string;
37
+ FacName?: string;
38
+ FacStreet?: string;
39
+ FacCity?: string;
40
+ FacState?: string;
41
+ FacZip?: string;
42
+ FacLat?: number;
43
+ FacLong?: number;
44
+ FacSICCodes?: string;
45
+ FacNAICSCodes?: string;
46
+ CurrSvFlag?: string;
47
+ CurrVioFlag?: string;
48
+ Src?: string;
49
+ [key: string]: unknown;
50
+ }
51
+ export interface EchoSearchResult {
52
+ Results: {
53
+ Message: string;
54
+ TotalPenalties?: string;
55
+ FEAFlag?: string;
56
+ CVRows?: string;
57
+ Facilities?: EchoFacility[];
58
+ [key: string]: unknown;
59
+ };
60
+ }
61
+ export interface EchoFacilityDetail {
62
+ Results: {
63
+ Message: string;
64
+ Permits?: Record<string, unknown>[];
65
+ Violations?: Record<string, unknown>[];
66
+ Actions?: Record<string, unknown>[];
67
+ [key: string]: unknown;
68
+ };
69
+ }
70
+ export interface UVForecast {
71
+ ZIP?: string;
72
+ DATE_TIME?: string;
73
+ UV_INDEX?: number;
74
+ UV_ALERT?: number;
75
+ ORDER?: number;
76
+ [key: string]: unknown;
77
+ }
78
+ /** Common Envirofacts tables for air quality data. */
79
+ export declare const AIR_TABLES: Record<string, string>;
80
+ /** ECHO media types for facility searches. */
81
+ export declare const MEDIA_TYPES: Record<string, string>;
82
+ /** UV Index scale descriptions. */
83
+ export declare const UV_INDEX_SCALE: Record<string, string>;
84
+ /**
85
+ * Get air quality measures from EPA Envirofacts.
86
+ *
87
+ * Example:
88
+ * const data = await getAirQuality({ state: "CA" });
89
+ * const data = await getAirQuality({ state: "NY", rows: "0:49" });
90
+ */
91
+ export declare function getAirQuality(opts: {
92
+ state: string;
93
+ rows?: string;
94
+ table?: string;
95
+ }): Promise<AirQualityMeasure[]>;
96
+ /**
97
+ * Search EPA-regulated facilities via ECHO (Enforcement & Compliance History Online).
98
+ *
99
+ * Example:
100
+ * const air = await searchFacilities({ state: "TX", mediaType: "air", majorOnly: true });
101
+ * const water = await searchFacilities({ state: "CA", mediaType: "water", activeOnly: true });
102
+ */
103
+ export declare function searchFacilities(opts: {
104
+ state: string;
105
+ mediaType?: "air" | "water";
106
+ majorOnly?: boolean;
107
+ activeOnly?: boolean;
108
+ responseset?: number;
109
+ zip?: string;
110
+ penaltyRange?: string;
111
+ }): Promise<EchoSearchResult>;
112
+ /**
113
+ * Get detailed facility report from ECHO including permits, violations, and enforcement actions.
114
+ *
115
+ * Example:
116
+ * const detail = await getFacilityDetail("110000350016");
117
+ */
118
+ export declare function getFacilityDetail(registryId: string): Promise<EchoFacilityDetail>;
119
+ /**
120
+ * Get UV index forecast by ZIP code from EPA Envirofacts.
121
+ *
122
+ * Example:
123
+ * const forecast = await getUVIndex("90210");
124
+ */
125
+ export declare function getUVIndex(zip: string): Promise<UVForecast[]>;
126
+ /** Clear cached responses from both clients. */
127
+ export declare function clearCache(): void;
128
+ //# sourceMappingURL=epa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epa.d.ts","sourceRoot":"","sources":["../../src/sdk/epa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * EPA SDK — typed API client for EPA Envirofacts and ECHO (Enforcement & Compliance) APIs.
3
+ *
4
+ * Standalone — no MCP server required. Usage:
5
+ *
6
+ * import { getAirQuality, searchFacilities, getUVIndex } from "us-gov-open-data/sdk/epa";
7
+ *
8
+ * const aq = await getAirQuality({ state: "CA" });
9
+ * console.log(aq);
10
+ *
11
+ * const facilities = await searchFacilities({ state: "NY", mediaType: "air", majorOnly: true });
12
+ * console.log(facilities);
13
+ *
14
+ * const uv = await getUVIndex("10001");
15
+ * console.log(uv);
16
+ *
17
+ * No API key required.
18
+ * Docs:
19
+ * Envirofacts: https://www.epa.gov/enviro/web-services
20
+ * ECHO: https://echo.epa.gov/tools/web-services
21
+ */
22
+ import { createClient } from "../client.js";
23
+ // ─── Clients ─────────────────────────────────────────────────────────
24
+ const envirofacts = createClient({
25
+ baseUrl: "https://enviro.epa.gov/enviro/efservice",
26
+ name: "epa-envirofacts",
27
+ rateLimit: { perSecond: 3, burst: 8 },
28
+ cacheTtlMs: 60 * 60 * 1000, // 1 hour
29
+ });
30
+ const echo = createClient({
31
+ baseUrl: "https://echo.epa.gov/api",
32
+ name: "epa-echo",
33
+ rateLimit: { perSecond: 3, burst: 8 },
34
+ cacheTtlMs: 60 * 60 * 1000, // 1 hour
35
+ });
36
+ // ─── Reference Data ──────────────────────────────────────────────────
37
+ /** Common Envirofacts tables for air quality data. */
38
+ export const AIR_TABLES = {
39
+ AIR_QUALITY_MEASURES: "County-level air quality summary measures",
40
+ GETGISAIR: "GIS-enabled air facility data",
41
+ };
42
+ /** ECHO media types for facility searches. */
43
+ export const MEDIA_TYPES = {
44
+ air: "Clean Air Act (CAA) facilities",
45
+ water: "Clean Water Act (CWA) facilities",
46
+ };
47
+ /** UV Index scale descriptions. */
48
+ export const UV_INDEX_SCALE = {
49
+ "0-2": "Low — minimal danger for average person",
50
+ "3-5": "Moderate — take precautions (hat, sunscreen)",
51
+ "6-7": "High — protection required, reduce sun exposure",
52
+ "8-10": "Very High — extra protection, avoid midday sun",
53
+ "11+": "Extreme — unprotected skin can burn in minutes",
54
+ };
55
+ // ─── Public API ──────────────────────────────────────────────────────
56
+ /**
57
+ * Get air quality measures from EPA Envirofacts.
58
+ *
59
+ * Example:
60
+ * const data = await getAirQuality({ state: "CA" });
61
+ * const data = await getAirQuality({ state: "NY", rows: "0:49" });
62
+ */
63
+ export async function getAirQuality(opts) {
64
+ const table = opts.table ?? "AIR_QUALITY_MEASURES";
65
+ const rows = opts.rows ?? "0:99";
66
+ return envirofacts.get(`/${table}/STATE_ABBR/${opts.state.toUpperCase()}/ROWS/${rows}/JSON`);
67
+ }
68
+ /**
69
+ * Search EPA-regulated facilities via ECHO (Enforcement & Compliance History Online).
70
+ *
71
+ * Example:
72
+ * const air = await searchFacilities({ state: "TX", mediaType: "air", majorOnly: true });
73
+ * const water = await searchFacilities({ state: "CA", mediaType: "water", activeOnly: true });
74
+ */
75
+ export async function searchFacilities(opts) {
76
+ const endpoint = opts.mediaType === "water"
77
+ ? "/cwa-facility-search"
78
+ : "/air-facility-search";
79
+ const params = {
80
+ output: "JSON",
81
+ p_st: opts.state.toUpperCase(),
82
+ responseset: opts.responseset ?? 20,
83
+ };
84
+ if (opts.majorOnly)
85
+ params.p_pc = "MAJOR";
86
+ if (opts.activeOnly)
87
+ params.p_act = "Y";
88
+ if (opts.zip)
89
+ params.p_zip = opts.zip;
90
+ if (opts.penaltyRange)
91
+ params.p_penalty = opts.penaltyRange;
92
+ return echo.get(endpoint, params);
93
+ }
94
+ /**
95
+ * Get detailed facility report from ECHO including permits, violations, and enforcement actions.
96
+ *
97
+ * Example:
98
+ * const detail = await getFacilityDetail("110000350016");
99
+ */
100
+ export async function getFacilityDetail(registryId) {
101
+ return echo.get("/detailed-facility-report", {
102
+ p_id: registryId,
103
+ output: "JSON",
104
+ });
105
+ }
106
+ /**
107
+ * Get UV index forecast by ZIP code from EPA Envirofacts.
108
+ *
109
+ * Example:
110
+ * const forecast = await getUVIndex("90210");
111
+ */
112
+ export async function getUVIndex(zip) {
113
+ return envirofacts.get(`/getEnvirofactsUVDAILY/ZIP/${zip}/JSON`);
114
+ }
115
+ /** Clear cached responses from both clients. */
116
+ export function clearCache() {
117
+ envirofacts.clearCache();
118
+ echo.clearCache();
119
+ }
120
+ //# sourceMappingURL=epa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epa.js","sourceRoot":"","sources":["../../src/sdk/epa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * FBI Crime Data Explorer SDK — typed API client.
3
+ *
4
+ * Standalone — no MCP server required. Usage:
5
+ *
6
+ * import { getCrimeByState, getNationalCrime } from "us-gov-open-data/sdk/fbi";
7
+ *
8
+ * Requires DATA_GOV_API_KEY env var. Get one at https://api.data.gov/signup/
9
+ * Docs: https://crime-data-explorer.fr.cloud.gov/pages/docApi
10
+ */
11
+ export interface CrimeEstimate {
12
+ year?: number;
13
+ data_year?: number;
14
+ population?: number;
15
+ violent_crime?: number;
16
+ property_crime?: number;
17
+ homicide?: number;
18
+ robbery?: number;
19
+ aggravated_assault?: number;
20
+ burglary?: number;
21
+ larceny?: number;
22
+ motor_vehicle_theft?: number;
23
+ rape?: number;
24
+ arson?: number;
25
+ [key: string]: unknown;
26
+ }
27
+ export interface ArrestRecord {
28
+ year?: number;
29
+ data_year?: number;
30
+ total_arrests?: number;
31
+ value?: number;
32
+ arrest_count?: number;
33
+ [key: string]: unknown;
34
+ }
35
+ /** Get crime estimates for a U.S. state. */
36
+ export declare function getCrimeByState(state: string, startYear?: number, endYear?: number): Promise<CrimeEstimate[]>;
37
+ /** Get national crime estimates. */
38
+ export declare function getNationalCrime(startYear?: number, endYear?: number): Promise<CrimeEstimate[]>;
39
+ /** Get arrest statistics. Optionally filter by state and/or offense. */
40
+ export declare function getArrestData(opts?: {
41
+ state?: string;
42
+ offense?: string;
43
+ startYear?: number;
44
+ endYear?: number;
45
+ }): Promise<ArrestRecord[]>;
46
+ /** Clear cached responses. */
47
+ export declare function clearCache(): void;
48
+ //# sourceMappingURL=fbi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fbi.d.ts","sourceRoot":"","sources":["../../src/sdk/fbi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAgBD,4CAA4C;AAC5C,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,EAAE,CAAC,CAM1B;AAED,oCAAoC;AACpC,wBAAsB,gBAAgB,CACpC,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,EAAE,CAAC,CAK1B;AAED,wEAAwE;AACxE,wBAAsB,aAAa,CAAC,IAAI,GAAE;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAe/B;AAED,8BAA8B;AAC9B,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * FBI Crime Data Explorer SDK — typed API client.
3
+ *
4
+ * Standalone — no MCP server required. Usage:
5
+ *
6
+ * import { getCrimeByState, getNationalCrime } from "us-gov-open-data/sdk/fbi";
7
+ *
8
+ * Requires DATA_GOV_API_KEY env var. Get one at https://api.data.gov/signup/
9
+ * Docs: https://crime-data-explorer.fr.cloud.gov/pages/docApi
10
+ */
11
+ import { createClient } from "../client.js";
12
+ // ─── Client ──────────────────────────────────────────────────────────
13
+ const api = createClient({
14
+ baseUrl: "https://api.usa.gov/crime/fbi/sapi",
15
+ name: "fbi",
16
+ auth: { type: "query", key: "API_KEY", envVar: "DATA_GOV_API_KEY" },
17
+ cacheTtlMs: 60 * 60 * 1000, // 1 hour — crime data updates infrequently
18
+ });
19
+ // ─── Internal: extract results from inconsistent response shapes ─────
20
+ function extractResults(res) {
21
+ if (Array.isArray(res))
22
+ return res;
23
+ if (typeof res === "object" && res !== null) {
24
+ const obj = res;
25
+ if (Array.isArray(obj.results))
26
+ return obj.results;
27
+ if (Array.isArray(obj.data))
28
+ return obj.data;
29
+ }
30
+ return [];
31
+ }
32
+ // ─── Public API ──────────────────────────────────────────────────────
33
+ /** Get crime estimates for a U.S. state. */
34
+ export async function getCrimeByState(state, startYear, endYear) {
35
+ const stateAbbr = state.toUpperCase();
36
+ const start = startYear ?? new Date().getFullYear() - 5;
37
+ const end = endYear ?? new Date().getFullYear();
38
+ const res = await api.get(`/api/estimates/states/${stateAbbr}/${start}/${end}`);
39
+ return extractResults(res);
40
+ }
41
+ /** Get national crime estimates. */
42
+ export async function getNationalCrime(startYear, endYear) {
43
+ const start = startYear ?? new Date().getFullYear() - 5;
44
+ const end = endYear ?? new Date().getFullYear();
45
+ const res = await api.get(`/api/estimates/national/${start}/${end}`);
46
+ return extractResults(res);
47
+ }
48
+ /** Get arrest statistics. Optionally filter by state and/or offense. */
49
+ export async function getArrestData(opts = {}) {
50
+ const start = opts.startYear ?? new Date().getFullYear() - 5;
51
+ const end = opts.endYear ?? new Date().getFullYear();
52
+ let path;
53
+ if (opts.state && opts.offense) {
54
+ path = `/api/arrest/states/offense/${opts.state.toUpperCase()}/${opts.offense}/${start}/${end}`;
55
+ }
56
+ else if (opts.state) {
57
+ path = `/api/arrest/states/${opts.state.toUpperCase()}/${start}/${end}`;
58
+ }
59
+ else {
60
+ path = `/api/arrest/national/${start}/${end}`;
61
+ }
62
+ const res = await api.get(path);
63
+ return extractResults(res);
64
+ }
65
+ /** Clear cached responses. */
66
+ export function clearCache() {
67
+ api.clearCache();
68
+ }
69
+ //# sourceMappingURL=fbi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fbi.js","sourceRoot":"","sources":["../../src/sdk/fbi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wEAAwE;AAExE,MAAM,GAAG,GAAG,YAAY,CAAC;IACvB,OAAO,EAAE,oCAAoC;IAC7C,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE;IACnE,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,2CAA2C;CACxE,CAAC,CAAC;AA8BH,wEAAwE;AAExE,SAAS,cAAc,CAAI,GAAY;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAU,CAAC;IAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,GAA8B,CAAC;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC,OAAc,CAAC;QAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC,IAAW,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,wEAAwE;AAExE,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAa,EACb,SAAkB,EAClB,OAAgB;IAEhB,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,yBAAyB,SAAS,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IAChF,OAAO,cAAc,CAAgB,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAkB,EAClB,OAAgB;IAEhB,MAAM,KAAK,GAAG,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,2BAA2B,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IACrE,OAAO,cAAc,CAAgB,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAKhC,EAAE;IACJ,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErD,IAAI,IAAY,CAAC;IACjB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,GAAG,8BAA8B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;IAClG,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,GAAG,sBAAsB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,wBAAwB,KAAK,IAAI,GAAG,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,cAAc,CAAe,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,UAAU;IACxB,GAAG,CAAC,UAAU,EAAE,CAAC;AACnB,CAAC"}