@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":"fpds.js","sourceRoot":"","sources":["../src/fpds.ts"],"names":[],"mappings":"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"}
package/dist/fred.d.ts ADDED
@@ -0,0 +1,108 @@
1
+ /**
2
+ * fred.ts — FRED (Federal Reserve Economic Data, St. Louis Fed) — the MACRO
3
+ * CONTEXT lane (ADR-0048, Wave-4 source #2). GDP · CPI · interest rates ·
4
+ * unemployment · PPI … — the economy-wide backdrop for B2G bid escalation and
5
+ * market-timing that no contract/spending source carries.
6
+ *
7
+ * ★ THIS IS THE SERVER'S SECOND KEY-REQUIRED SOURCE (Census CBP was the first).
8
+ * FRED has NO keyless tier: every request needs `&api_key=`, and a missing/bad
9
+ * key returns HTTP 400 `{error_code, error_message}`. So, honestly: with NO
10
+ * `FRED_API_KEY` these two tools THROW an `invalid_input` config error BEFORE any
11
+ * fetch (never a fake-empty, never a keyless-pretend). The other 112 tools stay
12
+ * keyless — this key is scoped to this one source. (Contrast the OPTIONAL keys of
13
+ * datagov/bls/nvd, which lift a tier but are not required.)
14
+ *
15
+ * This module MIRRORS the census-economic.ts optional-key precedent: a `fredApiKey()`
16
+ * env seam, a pre-fetch `invalid_input` THROW when unset, the fixed-host SSRF assert
17
+ * + `redirect:"error"`, and the missing-sentinel→null idiom (Census's negative
18
+ * suppression sentinel there; FRED's `value === "."` here — the BLS `"-"` lineage).
19
+ * It writes ZERO coercion/meta code of its own: it REUSES `getJson` (the shared
20
+ * fetch envelope) / `driftError` / `num`·`str` (coerce.ts, null-never-0/empty) /
21
+ * `withMeta`·`buildMeta` (offset pagination via count-exact totals).
22
+ *
23
+ * GET https://api.stlouisfed.org/fred/series/search
24
+ * ?search_text=<q>&limit=&offset=&api_key=<KEY>&file_type=json
25
+ * → { seriess:[{ id,title,frequency,frequency_short,units,seasonal_adjustment,
26
+ * observation_start,observation_end,last_updated,popularity,notes }],
27
+ * count, limit, offset }
28
+ *
29
+ * GET https://api.stlouisfed.org/fred/series/observations
30
+ * ?series_id=<id>&observation_start=&observation_end=&limit=&offset=
31
+ * &sort_order=&api_key=<KEY>&file_type=json
32
+ * → { observations:[{ date, value }], count, … } ★value === "." ⇒ missing (null)
33
+ *
34
+ * ★ HONESTY (ADR-0048 P1–P5):
35
+ * [KEY] no key ⇒ invalid_input THROW pre-fetch (0 fetch); the message names
36
+ * FRED_API_KEY + the free-signup URL. A 400 carrying `{error_message}` (a
37
+ * bad series_id / expired key) ⇒ reclassified to invalid_input CARRYING the
38
+ * FRED error_message — honestly reported, never a fake empty.
39
+ * [P1] both endpoints report `count` (the total) ⇒ totalAvailable = num(count)
40
+ * EXACT; offset pagination (hasMore = offset+returned < count, nextOffset).
41
+ * NEVER fabricated (RED if totalAvailable = returned).
42
+ * [P3] ★the missing crux: an observation `value === "."` ⇒ **null** (FRED's
43
+ * missing sentinel — the BLS `"-"` lineage), NEVER 0. A genuine "0" ⇒ 0.
44
+ * [P2] a 400 ⇒ invalid_input (carrying error_message); a genuine no-match
45
+ * (seriess:[] / observations:[]) ⇒ honest empty; a 5xx ⇒ upstream_unavailable
46
+ * THROW; a 200 non-JSON ⇒ schema_drift.
47
+ * [P4] a body whose `seriess` / `observations` is absent or non-array ⇒ driftError
48
+ * (never a fabricated empty).
49
+ * [SSRF] fixed host `api.stlouisfed.org`; `series_id` charclass `^[A-Za-z0-9._-]+$`;
50
+ * dates `^\d{4}-\d{2}-\d{2}$`; sort_order enum {asc,desc}. All VALUES ride
51
+ * URLSearchParams; the key rides `&api_key=` ONLY — never a label/_meta/note
52
+ * (the K-test).
53
+ */
54
+ import { num } from "./coerce.js";
55
+ import { type MetaBundle } from "./meta.js";
56
+ export { num };
57
+ export declare const FRED_HOST = "api.stlouisfed.org";
58
+ /** Read FRED_API_KEY from env; trim; return the value or undefined (unset/blank). */
59
+ export declare function fredApiKey(): string | undefined;
60
+ /**
61
+ * num(), but map FRED's missing-observation sentinel `"."` → null (missing). A
62
+ * genuine "0" stays 0 (num("0") === 0); a real numeric string parses. This is the
63
+ * BLS `"-"` lineage — a data-absence marker, never a fabricated 0.
64
+ */
65
+ export declare function fredValue(v: unknown): number | null;
66
+ export type FredSearchSeriesArgs = {
67
+ query?: string;
68
+ limit?: number;
69
+ offset?: number;
70
+ };
71
+ export type FredSeries = {
72
+ id: string | null;
73
+ title: string | null;
74
+ frequency: string | null;
75
+ frequencyShort: string | null;
76
+ units: string | null;
77
+ seasonalAdjustment: string | null;
78
+ observationStart: string | null;
79
+ observationEnd: string | null;
80
+ lastUpdated: string | null;
81
+ popularity: number | null;
82
+ };
83
+ /**
84
+ * Search FRED series (`/fred/series/search`) by `search_text` → curated series
85
+ * rows + honest `_meta`. REQUIRES FRED_API_KEY (throws invalid_input pre-fetch when
86
+ * unset). totalAvailable = FRED's exact `count`; offset pagination.
87
+ */
88
+ export declare function searchSeries(args: FredSearchSeriesArgs): Promise<MetaBundle>;
89
+ export type FredSeriesObservationsArgs = {
90
+ seriesId?: string;
91
+ startDate?: string;
92
+ endDate?: string;
93
+ limit?: number;
94
+ offset?: number;
95
+ sortOrder?: string;
96
+ };
97
+ export type FredObservation = {
98
+ date: string | null;
99
+ value: number | null;
100
+ };
101
+ /**
102
+ * Fetch a FRED series' time series (`/fred/series/observations`) → date/value rows
103
+ * + honest `_meta`. REQUIRES FRED_API_KEY (throws invalid_input pre-fetch when
104
+ * unset). ★A missing observation (`value === "."`) maps to null, never 0.
105
+ * totalAvailable = FRED's exact `count`; offset pagination.
106
+ */
107
+ export declare function seriesObservations(args: FredSeriesObservationsArgs): Promise<MetaBundle>;
108
+ //# sourceMappingURL=fred.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fred.d.ts","sourceRoot":"","sources":["../src/fred.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAIH,OAAO,EAAE,GAAG,EAAO,MAAM,aAAa,CAAC;AACvC,OAAO,EAAY,KAAK,UAAU,EAAqB,MAAM,WAAW,CAAC;AAKzE,OAAO,EAAE,GAAG,EAAE,CAAC;AAGf,eAAO,MAAM,SAAS,uBAAuB,CAAC;AA2B9C,qFAAqF;AACrF,wBAAgB,UAAU,IAAI,MAAM,GAAG,SAAS,CAI/C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGnD;AAgFD,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,UAAU,CAAC,CA4FrB;AAGD,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,UAAU,CAAC,CAsHrB"}
package/dist/fred.js ADDED
@@ -0,0 +1,373 @@
1
+ /**
2
+ * fred.ts — FRED (Federal Reserve Economic Data, St. Louis Fed) — the MACRO
3
+ * CONTEXT lane (ADR-0048, Wave-4 source #2). GDP · CPI · interest rates ·
4
+ * unemployment · PPI … — the economy-wide backdrop for B2G bid escalation and
5
+ * market-timing that no contract/spending source carries.
6
+ *
7
+ * ★ THIS IS THE SERVER'S SECOND KEY-REQUIRED SOURCE (Census CBP was the first).
8
+ * FRED has NO keyless tier: every request needs `&api_key=`, and a missing/bad
9
+ * key returns HTTP 400 `{error_code, error_message}`. So, honestly: with NO
10
+ * `FRED_API_KEY` these two tools THROW an `invalid_input` config error BEFORE any
11
+ * fetch (never a fake-empty, never a keyless-pretend). The other 112 tools stay
12
+ * keyless — this key is scoped to this one source. (Contrast the OPTIONAL keys of
13
+ * datagov/bls/nvd, which lift a tier but are not required.)
14
+ *
15
+ * This module MIRRORS the census-economic.ts optional-key precedent: a `fredApiKey()`
16
+ * env seam, a pre-fetch `invalid_input` THROW when unset, the fixed-host SSRF assert
17
+ * + `redirect:"error"`, and the missing-sentinel→null idiom (Census's negative
18
+ * suppression sentinel there; FRED's `value === "."` here — the BLS `"-"` lineage).
19
+ * It writes ZERO coercion/meta code of its own: it REUSES `getJson` (the shared
20
+ * fetch envelope) / `driftError` / `num`·`str` (coerce.ts, null-never-0/empty) /
21
+ * `withMeta`·`buildMeta` (offset pagination via count-exact totals).
22
+ *
23
+ * GET https://api.stlouisfed.org/fred/series/search
24
+ * ?search_text=<q>&limit=&offset=&api_key=<KEY>&file_type=json
25
+ * → { seriess:[{ id,title,frequency,frequency_short,units,seasonal_adjustment,
26
+ * observation_start,observation_end,last_updated,popularity,notes }],
27
+ * count, limit, offset }
28
+ *
29
+ * GET https://api.stlouisfed.org/fred/series/observations
30
+ * ?series_id=<id>&observation_start=&observation_end=&limit=&offset=
31
+ * &sort_order=&api_key=<KEY>&file_type=json
32
+ * → { observations:[{ date, value }], count, … } ★value === "." ⇒ missing (null)
33
+ *
34
+ * ★ HONESTY (ADR-0048 P1–P5):
35
+ * [KEY] no key ⇒ invalid_input THROW pre-fetch (0 fetch); the message names
36
+ * FRED_API_KEY + the free-signup URL. A 400 carrying `{error_message}` (a
37
+ * bad series_id / expired key) ⇒ reclassified to invalid_input CARRYING the
38
+ * FRED error_message — honestly reported, never a fake empty.
39
+ * [P1] both endpoints report `count` (the total) ⇒ totalAvailable = num(count)
40
+ * EXACT; offset pagination (hasMore = offset+returned < count, nextOffset).
41
+ * NEVER fabricated (RED if totalAvailable = returned).
42
+ * [P3] ★the missing crux: an observation `value === "."` ⇒ **null** (FRED's
43
+ * missing sentinel — the BLS `"-"` lineage), NEVER 0. A genuine "0" ⇒ 0.
44
+ * [P2] a 400 ⇒ invalid_input (carrying error_message); a genuine no-match
45
+ * (seriess:[] / observations:[]) ⇒ honest empty; a 5xx ⇒ upstream_unavailable
46
+ * THROW; a 200 non-JSON ⇒ schema_drift.
47
+ * [P4] a body whose `seriess` / `observations` is absent or non-array ⇒ driftError
48
+ * (never a fabricated empty).
49
+ * [SSRF] fixed host `api.stlouisfed.org`; `series_id` charclass `^[A-Za-z0-9._-]+$`;
50
+ * dates `^\d{4}-\d{2}-\d{2}$`; sort_order enum {asc,desc}. All VALUES ride
51
+ * URLSearchParams; the key rides `&api_key=` ONLY — never a label/_meta/note
52
+ * (the K-test).
53
+ */
54
+ import { ToolErrorCarrier } from "./errors.js";
55
+ import { getJson, driftError } from "./datasource.js";
56
+ import { num, str } from "./coerce.js";
57
+ import { withMeta } from "./meta.js";
58
+ // Re-export the shared honesty coercion (single audited copy in ./coerce.js —
59
+ // ADR-0005 v2 FIX-C) so a `num` regression fails together across sources. NO local
60
+ // num/str; the `"."`→null map is a WRAPPER around num, not a fork.
61
+ export { num };
62
+ // ─── SSRF core: the single fixed host + base path ─────────────────
63
+ export const FRED_HOST = "api.stlouisfed.org";
64
+ const FRED_SEARCH_PATH = "/fred/series/search";
65
+ const FRED_OBS_PATH = "/fred/series/observations";
66
+ // HOST+path labels — surface in ToolError.upstreamEndpoint; the key rides ONLY in
67
+ // the &api_key= query param, so no token can ever appear here.
68
+ const FRED_SEARCH_LABEL = "fred:/fred/series/search";
69
+ const FRED_OBS_LABEL = "fred:/fred/series/observations";
70
+ // ─── Validation charclasses (SSRF + "verify the input" honesty) ───
71
+ const SERIES_ID_RE = /^[A-Za-z0-9._-]+$/; // FRED series ids: GDP, CPIAUCSL, DGS10 …
72
+ const DATE_RE = /^\d{4}-\d{2}-\d{2}$/; // YYYY-MM-DD observation bounds
73
+ const SORT_ORDERS = new Set(["asc", "desc"]);
74
+ const DEFAULT_SEARCH_LIMIT = 25;
75
+ const MAX_SEARCH_LIMIT = 1000;
76
+ const DEFAULT_OBS_LIMIT = 100;
77
+ const MAX_OBS_LIMIT = 100000;
78
+ // ─── Honesty notes (ADR-0048 required set) ────────────────────────
79
+ const KEY_REQUIRED_NOTE = "This source REQUIRES a free FRED_API_KEY (FRED has no keyless tier). The key is sent ONLY as the &api_key= query parameter to api.stlouisfed.org and is NEVER logged, echoed, or placed in this response.";
80
+ const MISSING_VALUE_NOTE = "FRED encodes a MISSING observation as the literal '.' — such values are mapped to null (missing), NEVER 0. A genuine reported 0 is preserved as 0.";
81
+ const COUNT_TOTAL_NOTE = "totalAvailable is FRED's exact reported `count` for the query; page with limit/offset (hasMore/nextOffset are derived from it, never fabricated).";
82
+ // ─── The key seam (REQUIRED; value NEVER leaked past the &api_key= param) ──
83
+ /** Read FRED_API_KEY from env; trim; return the value or undefined (unset/blank). */
84
+ export function fredApiKey() {
85
+ const raw = process.env.FRED_API_KEY;
86
+ const trimmed = typeof raw === "string" ? raw.trim() : "";
87
+ return trimmed ? trimmed : undefined;
88
+ }
89
+ /**
90
+ * num(), but map FRED's missing-observation sentinel `"."` → null (missing). A
91
+ * genuine "0" stays 0 (num("0") === 0); a real numeric string parses. This is the
92
+ * BLS `"-"` lineage — a data-absence marker, never a fabricated 0.
93
+ */
94
+ export function fredValue(v) {
95
+ if (v === ".")
96
+ return null;
97
+ return num(v);
98
+ }
99
+ // ─── Shared SSRF-guarded fetch (REQUIRED key; &api_key= ONLY carrier) ──
100
+ /**
101
+ * GET one FRED JSON resource. The REQUIRED key is checked BEFORE any fetch (an
102
+ * unset FRED_API_KEY ⇒ invalid_input THROW, 0 network call). The query is built on
103
+ * the FIXED host from `params` + `&api_key=` + `&file_type=json` via URLSearchParams
104
+ * (no host/path steer); a post-construction hostname/protocol assertion +
105
+ * `redirect:"error"` lock it (fail closed on any off-host 3xx — it could carry the
106
+ * key away). `label` is host+path only.
107
+ *
108
+ * A 400 carrying `{error_message}` (a bad series_id / expired key) is reclassified
109
+ * to invalid_input CARRYING the FRED message. `getJson`/`fetchWithRetry` discards a
110
+ * non-ok body (it throws before reading it), so to surface FRED's honest reason we
111
+ * re-read the 400 body via a single bare GET on the error path ONLY (the happy /
112
+ * 5xx / 429 / timeout paths keep the shared envelope's retry taxonomy untouched).
113
+ */
114
+ async function getFred(path, label, params, key) {
115
+ params.set("api_key", key);
116
+ params.set("file_type", "json");
117
+ const url = `https://${FRED_HOST}${path}?${params.toString()}`;
118
+ const built = new URL(url);
119
+ if (built.hostname !== FRED_HOST || built.protocol !== "https:") {
120
+ throw new ToolErrorCarrier({
121
+ kind: "invalid_input",
122
+ retryable: false,
123
+ message: `Constructed FRED URL host ${JSON.stringify(built.hostname)} (${built.protocol}) is not ${FRED_HOST} over https — refusing to fetch (SSRF safety).`,
124
+ upstreamEndpoint: label,
125
+ });
126
+ }
127
+ try {
128
+ // The key rides in &api_key= ONLY (never the label/_meta); redirect:"error"
129
+ // (fail closed on any off-host 3xx). A 200 non-JSON body ⇒ getJson's r.json()
130
+ // throws SyntaxError ⇒ the caller reclassifies to schema_drift.
131
+ return await getJson(url, { label, redirect: "error" });
132
+ }
133
+ catch (e) {
134
+ if (e instanceof ToolErrorCarrier) {
135
+ // A 400 (missing/bad key, or a bad series_id) carries FRED's honest
136
+ // `{error_message}`, but fetchWithRetry discarded the body. Re-read it once so
137
+ // the caller learns the REAL reason (never a fake-empty). A body that no longer
138
+ // 400s / is unreadable falls back to the generic 400 carrier unchanged.
139
+ if (e.toolError.upstreamStatus === 400) {
140
+ const fredMsg = await readFredErrorMessage(url);
141
+ throw new ToolErrorCarrier({
142
+ kind: "invalid_input",
143
+ retryable: false,
144
+ message: fredMsg
145
+ ? `FRED rejected the request (HTTP 400): ${fredMsg}. Check FRED_API_KEY and the series_id / parameters.`
146
+ : "FRED rejected the request (HTTP 400) — check FRED_API_KEY and the series_id / parameters.",
147
+ upstreamStatus: 400,
148
+ upstreamEndpoint: label,
149
+ });
150
+ }
151
+ throw e; // 5xx → upstream_unavailable, 404 → not_found, 429 → rate_limited …
152
+ }
153
+ throw e; // SyntaxError (200 non-JSON) → the caller maps it to driftError
154
+ }
155
+ }
156
+ /** Single bare GET to read a FRED 400's `error_message` (error path ONLY). null on any failure. */
157
+ async function readFredErrorMessage(url) {
158
+ try {
159
+ const r = await fetch(url, {
160
+ signal: AbortSignal.timeout(15_000),
161
+ redirect: "error",
162
+ });
163
+ const body = (await r.json());
164
+ return typeof body?.error_message === "string" ? body.error_message : null;
165
+ }
166
+ catch {
167
+ return null;
168
+ }
169
+ }
170
+ /**
171
+ * Search FRED series (`/fred/series/search`) by `search_text` → curated series
172
+ * rows + honest `_meta`. REQUIRES FRED_API_KEY (throws invalid_input pre-fetch when
173
+ * unset). totalAvailable = FRED's exact `count`; offset pagination.
174
+ */
175
+ export async function searchSeries(args) {
176
+ // ── [KEY] REQUIRED key — throw an honest config error BEFORE any fetch. ──
177
+ const key = fredApiKey();
178
+ if (key === undefined) {
179
+ throw new ToolErrorCarrier({
180
+ kind: "invalid_input",
181
+ retryable: false,
182
+ message: "FRED requires a free API key. Get one at https://fred.stlouisfed.org/docs/api/api_key.html and set FRED_API_KEY.",
183
+ upstreamEndpoint: FRED_SEARCH_LABEL,
184
+ });
185
+ }
186
+ // ── Validate + default (belt-and-suspenders behind the server Zod; a DIRECT
187
+ // handler call bypasses Zod). ──
188
+ const query = args.query ?? "";
189
+ if (query.trim() === "") {
190
+ throw new ToolErrorCarrier({
191
+ kind: "invalid_input",
192
+ retryable: false,
193
+ message: "fred_search_series requires a non-empty `query` (the FRED search_text), e.g. 'unemployment rate' or 'CPI'.",
194
+ upstreamEndpoint: FRED_SEARCH_LABEL,
195
+ });
196
+ }
197
+ const limit = clampLimit(args.limit, DEFAULT_SEARCH_LIMIT, MAX_SEARCH_LIMIT);
198
+ const offset = clampOffset(args.offset);
199
+ const params = new URLSearchParams();
200
+ params.set("search_text", query);
201
+ params.set("limit", String(limit));
202
+ params.set("offset", String(offset));
203
+ let body;
204
+ try {
205
+ body = await getFred(FRED_SEARCH_PATH, FRED_SEARCH_LABEL, params, key);
206
+ }
207
+ catch (e) {
208
+ if (e instanceof SyntaxError) {
209
+ throw driftError(FRED_SEARCH_LABEL, "FRED /series/search returned a non-JSON body at HTTP 200 — schema drift (never read as an empty result).");
210
+ }
211
+ throw e;
212
+ }
213
+ // ── [P4] `seriess` MUST be an array (a missing/non-array is drift, never a
214
+ // fabricated empty). ──
215
+ const b = (body ?? {});
216
+ if (!Array.isArray(b.seriess)) {
217
+ throw driftError(FRED_SEARCH_LABEL, "FRED /series/search shape drift — `seriess` must be an array.");
218
+ }
219
+ const series = b.seriess.map((row) => {
220
+ const s = (row ?? {});
221
+ return {
222
+ id: str(s.id),
223
+ title: str(s.title),
224
+ frequency: str(s.frequency),
225
+ frequencyShort: str(s.frequency_short),
226
+ units: str(s.units),
227
+ seasonalAdjustment: str(s.seasonal_adjustment),
228
+ observationStart: str(s.observation_start),
229
+ observationEnd: str(s.observation_end),
230
+ lastUpdated: str(s.last_updated),
231
+ popularity: num(s.popularity),
232
+ };
233
+ });
234
+ const returned = series.length;
235
+ const totalAvailable = num(b.count); // [P1] EXACT — never returned
236
+ const hasMore = totalAvailable !== null && offset + returned < totalAvailable;
237
+ const nextOffset = hasMore ? offset + returned : null;
238
+ return withMeta({ series }, {
239
+ source: `${FRED_HOST} /fred/series/search (FRED; FRED_API_KEY)`,
240
+ keylessMode: false, // ★KEYED — the second key-required source
241
+ returned,
242
+ totalAvailable,
243
+ filtersApplied: [`query:${query}`],
244
+ filtersDropped: [],
245
+ fieldsUnavailable: [],
246
+ pagination: { offset, limit, hasMore, nextOffset },
247
+ notes: [KEY_REQUIRED_NOTE, COUNT_TOTAL_NOTE],
248
+ });
249
+ }
250
+ /**
251
+ * Fetch a FRED series' time series (`/fred/series/observations`) → date/value rows
252
+ * + honest `_meta`. REQUIRES FRED_API_KEY (throws invalid_input pre-fetch when
253
+ * unset). ★A missing observation (`value === "."`) maps to null, never 0.
254
+ * totalAvailable = FRED's exact `count`; offset pagination.
255
+ */
256
+ export async function seriesObservations(args) {
257
+ // ── [KEY] REQUIRED key — throw an honest config error BEFORE any fetch. ──
258
+ const key = fredApiKey();
259
+ if (key === undefined) {
260
+ throw new ToolErrorCarrier({
261
+ kind: "invalid_input",
262
+ retryable: false,
263
+ message: "FRED requires a free API key. Get one at https://fred.stlouisfed.org/docs/api/api_key.html and set FRED_API_KEY.",
264
+ upstreamEndpoint: FRED_OBS_LABEL,
265
+ });
266
+ }
267
+ // ── Validate (belt-and-suspenders behind the server Zod; a DIRECT handler call
268
+ // bypasses Zod — `series_id` rides the query, dates/sort_order too). ──
269
+ const seriesId = args.seriesId ?? "";
270
+ if (!SERIES_ID_RE.test(seriesId)) {
271
+ throw new ToolErrorCarrier({
272
+ kind: "invalid_input",
273
+ retryable: false,
274
+ message: `Invalid seriesId ${JSON.stringify(seriesId)} — expected a FRED series id (^[A-Za-z0-9._-]+$), e.g. "GDP", "CPIAUCSL", "UNRATE".`,
275
+ upstreamEndpoint: FRED_OBS_LABEL,
276
+ });
277
+ }
278
+ if (args.startDate !== undefined && !DATE_RE.test(args.startDate)) {
279
+ throw new ToolErrorCarrier({
280
+ kind: "invalid_input",
281
+ retryable: false,
282
+ message: `Invalid startDate ${JSON.stringify(args.startDate)} — expected YYYY-MM-DD (^\\d{4}-\\d{2}-\\d{2}$).`,
283
+ upstreamEndpoint: FRED_OBS_LABEL,
284
+ });
285
+ }
286
+ if (args.endDate !== undefined && !DATE_RE.test(args.endDate)) {
287
+ throw new ToolErrorCarrier({
288
+ kind: "invalid_input",
289
+ retryable: false,
290
+ message: `Invalid endDate ${JSON.stringify(args.endDate)} — expected YYYY-MM-DD (^\\d{4}-\\d{2}-\\d{2}$).`,
291
+ upstreamEndpoint: FRED_OBS_LABEL,
292
+ });
293
+ }
294
+ if (args.sortOrder !== undefined && !SORT_ORDERS.has(args.sortOrder)) {
295
+ throw new ToolErrorCarrier({
296
+ kind: "invalid_input",
297
+ retryable: false,
298
+ message: `Invalid sortOrder ${JSON.stringify(args.sortOrder)} — expected one of asc, desc.`,
299
+ upstreamEndpoint: FRED_OBS_LABEL,
300
+ });
301
+ }
302
+ const limit = clampLimit(args.limit, DEFAULT_OBS_LIMIT, MAX_OBS_LIMIT);
303
+ const offset = clampOffset(args.offset);
304
+ const params = new URLSearchParams();
305
+ params.set("series_id", seriesId);
306
+ params.set("limit", String(limit));
307
+ params.set("offset", String(offset));
308
+ const filtersApplied = [`series_id:${seriesId}`];
309
+ if (args.startDate !== undefined) {
310
+ params.set("observation_start", args.startDate);
311
+ filtersApplied.push(`observation_start:${args.startDate}`);
312
+ }
313
+ if (args.endDate !== undefined) {
314
+ params.set("observation_end", args.endDate);
315
+ filtersApplied.push(`observation_end:${args.endDate}`);
316
+ }
317
+ if (args.sortOrder !== undefined) {
318
+ params.set("sort_order", args.sortOrder);
319
+ filtersApplied.push(`sort_order:${args.sortOrder}`);
320
+ }
321
+ let body;
322
+ try {
323
+ body = await getFred(FRED_OBS_PATH, FRED_OBS_LABEL, params, key);
324
+ }
325
+ catch (e) {
326
+ if (e instanceof SyntaxError) {
327
+ throw driftError(FRED_OBS_LABEL, "FRED /series/observations returned a non-JSON body at HTTP 200 — schema drift (never read as an empty result).");
328
+ }
329
+ throw e;
330
+ }
331
+ // ── [P4] `observations` MUST be an array. ──
332
+ const b = (body ?? {});
333
+ if (!Array.isArray(b.observations)) {
334
+ throw driftError(FRED_OBS_LABEL, "FRED /series/observations shape drift — `observations` must be an array.");
335
+ }
336
+ const observations = b.observations.map((row) => {
337
+ const o = (row ?? {});
338
+ return { date: str(o.date), value: fredValue(o.value) }; // ★"." ⇒ null
339
+ });
340
+ const returned = observations.length;
341
+ const totalAvailable = num(b.count); // [P1] EXACT — never returned
342
+ const hasMore = totalAvailable !== null && offset + returned < totalAvailable;
343
+ const nextOffset = hasMore ? offset + returned : null;
344
+ return withMeta({ observations }, {
345
+ source: `${FRED_HOST} /fred/series/observations (FRED; FRED_API_KEY)`,
346
+ keylessMode: false, // ★KEYED
347
+ returned,
348
+ totalAvailable,
349
+ filtersApplied,
350
+ filtersDropped: [],
351
+ fieldsUnavailable: [],
352
+ pagination: { offset, limit, hasMore, nextOffset },
353
+ notes: [KEY_REQUIRED_NOTE, MISSING_VALUE_NOTE, COUNT_TOTAL_NOTE],
354
+ });
355
+ }
356
+ // ─── Small shared clamps (defensive, behind the server Zod bounds) ──
357
+ function clampLimit(v, def, max) {
358
+ if (typeof v !== "number" || !Number.isFinite(v))
359
+ return def;
360
+ const n = Math.floor(v);
361
+ if (n < 1)
362
+ return 1;
363
+ if (n > max)
364
+ return max;
365
+ return n;
366
+ }
367
+ function clampOffset(v) {
368
+ if (typeof v !== "number" || !Number.isFinite(v))
369
+ return 0;
370
+ const n = Math.floor(v);
371
+ return n < 0 ? 0 : n;
372
+ }
373
+ //# sourceMappingURL=fred.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fred.js","sourceRoot":"","sources":["../src/fred.ts"],"names":[],"mappings":"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"}
package/dist/gao.d.ts ADDED
@@ -0,0 +1,64 @@
1
+ /**
2
+ * GAO bid-protest lookup (keyless) — recent Comptroller General bid-protest
3
+ * decisions from the public GAO "Legal Products" RSS feed, optionally enriched
4
+ * from each decision's public product page.
5
+ *
6
+ * HONEST SCOPE (the defining constraint of this tool)
7
+ * ---------------------------------------------------
8
+ * Keyless access covers ONLY the RECENT decisions carried by the public
9
+ * Legal-Products RSS feed (a rolling ~25-item window). GAO's faceted historical
10
+ * bid-protest search (by protester / agency / outcome / date across all years,
11
+ * at https://www.gao.gov/legal/bid-protests/search) is WAF-protected against
12
+ * automated clients and is available cleanly only via a PAID third-party API.
13
+ * So this tool NEVER presents "recent" as "all": its `_meta` is ALWAYS
14
+ * `complete:false` + `truncated:true`, `totalAvailable` is `null` (the feed is
15
+ * not a count of all protests), and a top-level `accessNote` + a `_meta` note
16
+ * spell out the boundary. This is an intentional PARTIAL close of a capability
17
+ * that a competitor (Tango) sells as a paid feature.
18
+ *
19
+ * LIVE-VERIFIED 2026-07-03
20
+ * ------------------------
21
+ * - `GET https://www.gao.gov/rss/reportslegal.xml` with a browser UA → HTTP
22
+ * 200, application/rss+xml, ~14.6 KB, 26 <item>s. The feed carries GAO
23
+ * Legal Products — bid-protest DECISIONS *and* other legal products
24
+ * (Congressional Review Act regulatory reviews, legal opinions), so it MUST
25
+ * be filtered down to bid protests.
26
+ * - Each <item> has <title>, <link> (…/products/b-XXXXXX), <description>,
27
+ * <pubDate>, <guid>. A reconsideration reads "FCN Inc.--Reconsideration" →
28
+ * /products/b-424249.2; a costs decision "Accura Engineering--Costs".
29
+ * - Bid-protest items are reliably identified by their DESCRIPTION language
30
+ * ("protest(s)", "protester", "request(s) reconsideration of our decision")
31
+ * — regulatory reviews instead read "GAO reviewed the …'s new rule entitled".
32
+ * Protest B-numbers are the B-4xxxxx series; CRA reviews are B-33xxxx.
33
+ * - `GET https://www.gao.gov/products/b-XXXXXX` (browser UA) is cleanly
34
+ * parseable for protester (+ city/state), contracting agency, decision date,
35
+ * outcome ("We deny/sustain/dismiss the protest"), a solicitation number
36
+ * when present, and a decision-PDF link (/assets/.../NNNNNN.pdf).
37
+ */
38
+ type Outcome = "sustained" | "denied" | "dismissed" | "withdrawn";
39
+ type Decision = {
40
+ bNumber: string;
41
+ protester: string | null;
42
+ agency: string | null;
43
+ decisionDate: string | null;
44
+ solicitationNumber: string | null;
45
+ outcome: Outcome | null;
46
+ title: string;
47
+ decisionUrl: string;
48
+ pdfUrl: string | null;
49
+ summary: string | null;
50
+ };
51
+ export declare function gaoProtestLookup(args: {
52
+ agency?: string;
53
+ protester?: string;
54
+ solicitationNumber?: string;
55
+ outcome?: "sustained" | "denied" | "dismissed" | "withdrawn" | "any";
56
+ bNumber?: string;
57
+ limit?: number;
58
+ enrich?: boolean;
59
+ }): Promise<import("./meta.js").MetaBundle<{
60
+ accessNote: string;
61
+ decisions: Decision[];
62
+ }>>;
63
+ export {};
64
+ //# sourceMappingURL=gao.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gao.d.ts","sourceRoot":"","sources":["../src/gao.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAiLH,KAAK,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;AAsSlE,KAAK,QAAQ,GAAG;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAuCF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,KAAK,CAAC;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;;;IAyIA"}