@cliwant/mcp-sam-gov 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/LICENSE +21 -21
  2. package/README.ja.md +48 -16
  3. package/README.ko.md +48 -16
  4. package/README.md +226 -64
  5. package/dist/attachments.d.ts +63 -0
  6. package/dist/attachments.d.ts.map +1 -0
  7. package/dist/attachments.js +576 -0
  8. package/dist/attachments.js.map +1 -0
  9. package/dist/bls.d.ts +267 -0
  10. package/dist/bls.d.ts.map +1 -0
  11. package/dist/bls.js +1549 -0
  12. package/dist/bls.js.map +1 -0
  13. package/dist/cache.d.ts +2 -0
  14. package/dist/cache.d.ts.map +1 -1
  15. package/dist/cache.js +4 -0
  16. package/dist/cache.js.map +1 -1
  17. package/dist/census.d.ts +182 -0
  18. package/dist/census.d.ts.map +1 -0
  19. package/dist/census.js +576 -0
  20. package/dist/census.js.map +1 -0
  21. package/dist/ckan.d.ts +141 -0
  22. package/dist/ckan.d.ts.map +1 -0
  23. package/dist/ckan.js +393 -0
  24. package/dist/ckan.js.map +1 -0
  25. package/dist/clinicaltrials.d.ts +180 -0
  26. package/dist/clinicaltrials.d.ts.map +1 -0
  27. package/dist/clinicaltrials.js +730 -0
  28. package/dist/clinicaltrials.js.map +1 -0
  29. package/dist/cms.d.ts +140 -0
  30. package/dist/cms.d.ts.map +1 -0
  31. package/dist/cms.js +482 -0
  32. package/dist/cms.js.map +1 -0
  33. package/dist/coerce.d.ts +32 -0
  34. package/dist/coerce.d.ts.map +1 -0
  35. package/dist/coerce.js +50 -0
  36. package/dist/coerce.js.map +1 -0
  37. package/dist/datagov-catalog.d.ts +84 -0
  38. package/dist/datagov-catalog.d.ts.map +1 -0
  39. package/dist/datagov-catalog.js +233 -0
  40. package/dist/datagov-catalog.js.map +1 -0
  41. package/dist/datagov.d.ts +146 -0
  42. package/dist/datagov.d.ts.map +1 -0
  43. package/dist/datagov.js +689 -0
  44. package/dist/datagov.js.map +1 -0
  45. package/dist/datagovKey.d.ts +36 -0
  46. package/dist/datagovKey.d.ts.map +1 -0
  47. package/dist/datagovKey.js +60 -0
  48. package/dist/datagovKey.js.map +1 -0
  49. package/dist/datasource.d.ts +313 -0
  50. package/dist/datasource.d.ts.map +1 -0
  51. package/dist/datasource.js +551 -0
  52. package/dist/datasource.js.map +1 -0
  53. package/dist/disclosure.d.ts +55 -0
  54. package/dist/disclosure.d.ts.map +1 -0
  55. package/dist/disclosure.js +57 -0
  56. package/dist/disclosure.js.map +1 -0
  57. package/dist/ecfr.d.ts +4 -2
  58. package/dist/ecfr.d.ts.map +1 -1
  59. package/dist/ecfr.js +74 -1
  60. package/dist/ecfr.js.map +1 -1
  61. package/dist/echo.d.ts +143 -0
  62. package/dist/echo.d.ts.map +1 -0
  63. package/dist/echo.js +424 -0
  64. package/dist/echo.js.map +1 -0
  65. package/dist/edgar.d.ts +377 -0
  66. package/dist/edgar.d.ts.map +1 -0
  67. package/dist/edgar.js +2418 -0
  68. package/dist/edgar.js.map +1 -0
  69. package/dist/errors.d.ts +26 -0
  70. package/dist/errors.d.ts.map +1 -1
  71. package/dist/errors.js +69 -1
  72. package/dist/errors.js.map +1 -1
  73. package/dist/fac.d.ts +180 -0
  74. package/dist/fac.d.ts.map +1 -0
  75. package/dist/fac.js +416 -0
  76. package/dist/fac.js.map +1 -0
  77. package/dist/far.d.ts +170 -0
  78. package/dist/far.d.ts.map +1 -0
  79. package/dist/far.js +804 -0
  80. package/dist/far.js.map +1 -0
  81. package/dist/fdic.d.ts +599 -0
  82. package/dist/fdic.d.ts.map +1 -0
  83. package/dist/fdic.js +1624 -0
  84. package/dist/fdic.js.map +1 -0
  85. package/dist/federal-register.d.ts +139 -2
  86. package/dist/federal-register.d.ts.map +1 -1
  87. package/dist/federal-register.js +419 -3
  88. package/dist/federal-register.js.map +1 -1
  89. package/dist/fema.d.ts +181 -0
  90. package/dist/fema.d.ts.map +1 -0
  91. package/dist/fema.js +436 -0
  92. package/dist/fema.js.map +1 -0
  93. package/dist/fpds.d.ts +108 -0
  94. package/dist/fpds.d.ts.map +1 -0
  95. package/dist/fpds.js +519 -0
  96. package/dist/fpds.js.map +1 -0
  97. package/dist/gao.d.ts +64 -0
  98. package/dist/gao.d.ts.map +1 -0
  99. package/dist/gao.js +640 -0
  100. package/dist/gao.js.map +1 -0
  101. package/dist/govinfo.d.ts +111 -0
  102. package/dist/govinfo.d.ts.map +1 -0
  103. package/dist/govinfo.js +422 -0
  104. package/dist/govinfo.js.map +1 -0
  105. package/dist/grants.d.ts +27 -4
  106. package/dist/grants.d.ts.map +1 -1
  107. package/dist/grants.js +111 -6
  108. package/dist/grants.js.map +1 -1
  109. package/dist/gsa-csv.d.ts +249 -0
  110. package/dist/gsa-csv.d.ts.map +1 -0
  111. package/dist/gsa-csv.js +784 -0
  112. package/dist/gsa-csv.js.map +1 -0
  113. package/dist/integrity.d.ts +212 -0
  114. package/dist/integrity.d.ts.map +1 -0
  115. package/dist/integrity.js +707 -0
  116. package/dist/integrity.js.map +1 -0
  117. package/dist/meta.d.ts +165 -0
  118. package/dist/meta.d.ts.map +1 -0
  119. package/dist/meta.js +162 -0
  120. package/dist/meta.js.map +1 -0
  121. package/dist/nih.d.ts +117 -0
  122. package/dist/nih.d.ts.map +1 -0
  123. package/dist/nih.js +291 -0
  124. package/dist/nih.js.map +1 -0
  125. package/dist/nppes.d.ts +157 -0
  126. package/dist/nppes.d.ts.map +1 -0
  127. package/dist/nppes.js +648 -0
  128. package/dist/nppes.js.map +1 -0
  129. package/dist/nsf.d.ts +176 -0
  130. package/dist/nsf.d.ts.map +1 -0
  131. package/dist/nsf.js +554 -0
  132. package/dist/nsf.js.map +1 -0
  133. package/dist/nvd.d.ts +176 -0
  134. package/dist/nvd.d.ts.map +1 -0
  135. package/dist/nvd.js +912 -0
  136. package/dist/nvd.js.map +1 -0
  137. package/dist/ofac.d.ts +205 -0
  138. package/dist/ofac.d.ts.map +1 -0
  139. package/dist/ofac.js +919 -0
  140. package/dist/ofac.js.map +1 -0
  141. package/dist/pricing.d.ts +110 -0
  142. package/dist/pricing.d.ts.map +1 -0
  143. package/dist/pricing.js +843 -0
  144. package/dist/pricing.js.map +1 -0
  145. package/dist/sam-gov/client.d.ts +60 -2
  146. package/dist/sam-gov/client.d.ts.map +1 -1
  147. package/dist/sam-gov/client.js +320 -54
  148. package/dist/sam-gov/client.js.map +1 -1
  149. package/dist/sam-gov/index.d.ts +1 -1
  150. package/dist/sam-gov/index.d.ts.map +1 -1
  151. package/dist/sam-gov/index.js +1 -1
  152. package/dist/sam-gov/index.js.map +1 -1
  153. package/dist/sam-gov/types.d.ts +24 -0
  154. package/dist/sam-gov/types.d.ts.map +1 -1
  155. package/dist/sba.d.ts +72 -0
  156. package/dist/sba.d.ts.map +1 -0
  157. package/dist/sba.js +281 -0
  158. package/dist/sba.js.map +1 -0
  159. package/dist/server.d.ts +14 -2
  160. package/dist/server.d.ts.map +1 -1
  161. package/dist/server.js +3889 -296
  162. package/dist/server.js.map +1 -1
  163. package/dist/snapshot.d.ts +98 -0
  164. package/dist/snapshot.d.ts.map +1 -0
  165. package/dist/snapshot.js +146 -0
  166. package/dist/snapshot.js.map +1 -0
  167. package/dist/socrata.d.ts +157 -0
  168. package/dist/socrata.d.ts.map +1 -0
  169. package/dist/socrata.js +448 -0
  170. package/dist/socrata.js.map +1 -0
  171. package/dist/treasury.d.ts +143 -0
  172. package/dist/treasury.d.ts.map +1 -0
  173. package/dist/treasury.js +436 -0
  174. package/dist/treasury.js.map +1 -0
  175. package/dist/usaspending.d.ts +260 -65
  176. package/dist/usaspending.d.ts.map +1 -1
  177. package/dist/usaspending.js +1629 -201
  178. package/dist/usaspending.js.map +1 -1
  179. package/dist/usitc.d.ts +142 -0
  180. package/dist/usitc.d.ts.map +1 -0
  181. package/dist/usitc.js +339 -0
  182. package/dist/usitc.js.map +1 -0
  183. package/package.json +24 -2
  184. package/src/attachments.ts +652 -0
  185. package/src/bls.ts +1943 -0
  186. package/src/cache.ts +5 -0
  187. package/src/census.ts +735 -0
  188. package/src/ckan.ts +495 -0
  189. package/src/clinicaltrials.ts +923 -0
  190. package/src/cms.ts +634 -0
  191. package/src/coerce.ts +47 -0
  192. package/src/datagov-catalog.ts +296 -0
  193. package/src/datagov.ts +907 -0
  194. package/src/datagovKey.ts +68 -0
  195. package/src/datasource.ts +721 -0
  196. package/src/disclosure.ts +61 -0
  197. package/src/ecfr.ts +98 -1
  198. package/src/echo.ts +496 -0
  199. package/src/edgar.ts +3014 -0
  200. package/src/errors.ts +84 -1
  201. package/src/fac.ts +529 -0
  202. package/src/far.ts +1007 -0
  203. package/src/fdic.ts +2052 -0
  204. package/src/federal-register.ts +512 -3
  205. package/src/fema.ts +541 -0
  206. package/src/fpds.ts +620 -0
  207. package/src/gao.ts +744 -0
  208. package/src/govinfo.ts +497 -0
  209. package/src/grants.ts +139 -7
  210. package/src/gsa-csv.ts +992 -0
  211. package/src/integrity.ts +928 -0
  212. package/src/meta.ts +292 -0
  213. package/src/nih.ts +375 -0
  214. package/src/nppes.ts +834 -0
  215. package/src/nsf.ts +706 -0
  216. package/src/nvd.ts +1124 -0
  217. package/src/ofac.ts +1166 -0
  218. package/src/pricing.ts +1075 -0
  219. package/src/sam-gov/client.ts +345 -63
  220. package/src/sam-gov/index.ts +5 -1
  221. package/src/sam-gov/types.ts +22 -0
  222. package/src/sba.ts +357 -0
  223. package/src/server.ts +4551 -328
  224. package/src/snapshot.ts +192 -0
  225. package/src/socrata.ts +532 -0
  226. package/src/treasury.ts +575 -0
  227. package/src/usaspending.ts +1946 -214
  228. package/src/usitc.ts +420 -0
package/dist/bls.d.ts ADDED
@@ -0,0 +1,267 @@
1
+ /**
2
+ * BLS Public Data API v1/v2 — US labor-economics & price-index time series
3
+ * (keyless v1 default; an OPTIONAL free BLS_API_KEY lifts to v2). ADR-0032.
4
+ *
5
+ * A NEW capability axis for the server — the PRICING / ESCALATION layer: CPI-U &
6
+ * ECI drive federal contract escalation / economic-price-adjustment (EPA) clauses;
7
+ * PPI benchmarks materials pricing; CES employment/wages give labor-rate context
8
+ * (next to GSA CALC + SAM wage determinations). Consumer of the R2 `getJson`/
9
+ * `throughGate` port; the SECOND POST-batch consumer (after NIH RePORTER).
10
+ *
11
+ * ON-DOMAIN HONESTY: these are PUBLIC AGGREGATE STATISTICS (no PII). The tool
12
+ * LABELS units per series (an ECI "…A" 3.4 is a 12-month PERCENT CHANGE, not an
13
+ * index level) and NEVER fabricates a value — the BLS "-" unavailable marker maps
14
+ * to null (NEVER 0) with the footnote reason surfaced, so a data gap (e.g. the
15
+ * 2025 lapse-in-appropriations) is DISCLOSED, never a silent null and never a 0.
16
+ *
17
+ * The module writes ZERO fetch/coercion/error/meta code — it REUSES `getJson`
18
+ * (method:"POST" + body + redirect:"error"), `driftError`, `throughGate`,
19
+ * `num`·`str` (coerce.ts, null-never-0), `withMeta`·`buildMeta`, and MIRRORS the
20
+ * fixed-host SSRF idiom from NIH/FDIC + the body-carried optional-key discipline
21
+ * of datagovKey.ts (but the key rides in the POST BODY, never a header/URL/log).
22
+ *
23
+ * ★ SSRF GUARD (policy① — the smallest surface): host+path are compile-time
24
+ * CONSTANTS; NO caller value touches them. seriesids ride in the MODULE-BUILT
25
+ * POST body (JSON.stringify'd typed payload — no raw passthrough), so a caller
26
+ * value has NO host-alteration surface. Each raw seriesId is charclass-validated
27
+ * `^[A-Z0-9]{1,20}$` (rejects `../`, encoded traversal, `@host`, `;`, a trailing
28
+ * `\n`). Curated keys resolve through the FROZEN catalog map (never user text). A
29
+ * post-construction hostname/protocol assertion + `redirect:"error"` lock it.
30
+ *
31
+ * ★ THE HONESTY FRONTIER (P3): each observation's `value` is a STRING → `num()`.
32
+ * `num("-")` / any non-numeric → **null NEVER 0**; a genuine `"0"` → 0. The row
33
+ * carries `valueUnavailable` (true iff the raw value was present but unparseable)
34
+ * + its `footnotes[]`, and the footnote text is LIFTED into `_meta.notes` so the
35
+ * absence is disclosed. `value` is ALWAYS the parsed number, never the raw string.
36
+ *
37
+ * ★ STATUS GATE (P2): `status !== "REQUEST_SUCCEEDED"` THROWS (never a fake-empty):
38
+ * `REQUEST_NOT_PROCESSED` (the v1 daily-limit case) → `rate_limited` (retryable)
39
+ * with the tier disclosure; `REQUEST_FAILED`/other → `upstream_unavailable` (or
40
+ * `invalid_input` when `message[]` reads like a bad request). A non-JSON 200, or
41
+ * a SUCCESS body missing `Results.series` (non-array), → `driftError`.
42
+ *
43
+ * ★ OPTIONAL BLS_API_KEY (v2) — body-carried, NEVER leaked: read from env
44
+ * (trimmed; empty ⇒ keyless v1). When present → the `…/v2/…` path + a
45
+ * `registrationkey` field in the POST BODY, and NOWHERE else (never the URL, a
46
+ * header, the label, the `source`, `_meta`, or a log). When keyless,
47
+ * `registrationkey` is ABSENT from the body. Only the MODE is ever disclosed.
48
+ */
49
+ import { num } from "./coerce.js";
50
+ import { type MetaBundle } from "./meta.js";
51
+ export { num };
52
+ export declare const BLS_SERIES_KEYS: readonly ["cpi_u_all", "cpi_u_core", "ppi_final_demand", "eci_total_comp", "eci_wages", "unemployment_rate", "labor_force_participation", "employment_total_nonfarm", "avg_hourly_earnings"];
53
+ export type BlsSeriesKey = (typeof BLS_SERIES_KEYS)[number];
54
+ export type BlsCatalogEntry = {
55
+ seriesId: string;
56
+ meaning: string;
57
+ units: string;
58
+ };
59
+ export declare const BLS_CATALOG: Record<BlsSeriesKey, BlsCatalogEntry>;
60
+ export declare const YEAR_MAX: number;
61
+ /** true when no BLS_API_KEY is configured (keyless v1). Drives mode + caps + path. */
62
+ export declare function usingKeylessV1(): boolean;
63
+ export type BlsFootnote = {
64
+ code: string | null;
65
+ text: string | null;
66
+ };
67
+ export type BlsObservation = {
68
+ year: string | null;
69
+ period: string | null;
70
+ periodName: string | null;
71
+ /** The PARSED number — null (NEVER 0) for "-"/non-numeric; a genuine "0" → 0. */
72
+ value: number | null;
73
+ /** true iff the raw value was present but unparseable (a disclosed gap). */
74
+ valueUnavailable: boolean;
75
+ footnotes: BlsFootnote[];
76
+ latest: boolean;
77
+ };
78
+ export type BlsSeriesResult = {
79
+ seriesId: string;
80
+ /** The curated enum key, or null for a raw seriesId. */
81
+ key: string | null;
82
+ /** The curated meaning, or null for a raw seriesId. */
83
+ meaning: string | null;
84
+ /** The units label (from the frozen catalog); null for a raw seriesId. */
85
+ units: string | null;
86
+ observations: BlsObservation[];
87
+ observationCount: number;
88
+ coveredRange: {
89
+ from: number | null;
90
+ to: number | null;
91
+ };
92
+ };
93
+ export type BlsTimeseriesArgs = {
94
+ series?: BlsSeriesKey[];
95
+ seriesId?: string[];
96
+ startYear?: number;
97
+ endYear?: number;
98
+ };
99
+ /**
100
+ * Fetch one or more BLS time-series over a year range → normalized observations
101
+ * (null-never-0 values + footnotes + per-series units label) + honest `_meta`.
102
+ * At least one of `series`/`seriesId` is required; both may be combined. The
103
+ * resolved+deduped series set is refused over the active tier's series cap
104
+ * (never a silent drop). The span is CLAMPED to the tier cap BEFORE the fetch
105
+ * and disclosed. seriesids ride in the module-built POST body (SSRF: no raw
106
+ * host/path passthrough); the OPTIONAL BLS_API_KEY rides ONLY in the body.
107
+ */
108
+ export declare function timeseries(args: BlsTimeseriesArgs): Promise<MetaBundle>;
109
+ export declare const BLS_OEWS_OCCUPATION_KEYS: readonly ["all_occupations", "software_developer", "computer_systems_analyst", "info_security_analyst", "management_analyst", "project_mgmt_specialist", "logistician", "accountant_auditor", "general_ops_manager", "civil_engineer", "electrical_engineer", "mechanical_engineer", "industrial_engineer", "lawyer", "technical_writer", "admin_assistant"];
110
+ export type BlsOewsOccupationKey = (typeof BLS_OEWS_OCCUPATION_KEYS)[number];
111
+ export type BlsOewsOccupationEntry = {
112
+ /** The 6-digit hyphenless SOC code (the occupation component of the series ID). */
113
+ soc: string;
114
+ /** The official SOC occupation title (the output label). */
115
+ label: string;
116
+ };
117
+ export declare const BLS_OEWS_OCCUPATIONS: Record<BlsOewsOccupationKey, BlsOewsOccupationEntry>;
118
+ export declare const BLS_STATE_FIPS: Record<string, string>;
119
+ /** The curated `area` state enum values (the USPS 2-letter codes). */
120
+ export declare const BLS_STATE_KEYS: [string, ...string[]];
121
+ export declare const BLS_OEWS_DATATYPE_KEYS: readonly ["annual_mean", "annual_median", "hourly_mean", "hourly_median", "employment"];
122
+ export type BlsOewsDatatypeKey = (typeof BLS_OEWS_DATATYPE_KEYS)[number];
123
+ export type BlsOewsDatatypeEntry = {
124
+ /** The 2-digit datatype component of the series ID. */
125
+ code: string;
126
+ /** The units label carried on every row's measure (H3 — never mislabel). */
127
+ units: string;
128
+ };
129
+ export declare const BLS_OEWS_DATATYPES: Record<BlsOewsDatatypeKey, BlsOewsDatatypeEntry>;
130
+ export declare function buildOewsSeriesId(parts: {
131
+ areatype: string;
132
+ areaCode: string;
133
+ occupation: string;
134
+ datatype: string;
135
+ }): string;
136
+ export type BlsOewsArgs = {
137
+ occupation?: string[];
138
+ soc?: string[];
139
+ area?: string[];
140
+ datatype?: string[];
141
+ };
142
+ export type BlsOewsRow = {
143
+ area: {
144
+ type: string;
145
+ code: string;
146
+ label: string;
147
+ };
148
+ occupation: {
149
+ soc: string;
150
+ key: string | null;
151
+ label: string | null;
152
+ };
153
+ measure: {
154
+ key: string;
155
+ code: string;
156
+ units: string;
157
+ };
158
+ /** The PARSED number — null (NEVER 0). Suppressed/absent (H2) ⇒ null too. */
159
+ value: number | null;
160
+ /** true iff a PRESENT value was unparseable ("-" gap); H2 absence ⇒ FALSE. */
161
+ valueUnavailable: boolean;
162
+ referenceYear: string | null;
163
+ referencePeriod: string | null;
164
+ footnotes: BlsFootnote[];
165
+ seriesId: string;
166
+ };
167
+ /**
168
+ * OEWS occupational wage benchmarking — build validated 25-char series IDs from
169
+ * structured (area × occupation × datatype) inputs, batch them into ONE POST
170
+ * (REUSING the bls_timeseries transport/parse/honesty layer), and return one
171
+ * normalized wage/employment row per resolved combo + honest _meta. NO year
172
+ * input (OEWS serves only the latest release; the tool requests a small recent
173
+ * window internally and discloses the reference year from the returned A01 row).
174
+ */
175
+ export declare function oewsWages(args: BlsOewsArgs): Promise<MetaBundle>;
176
+ /** The 42 PINNED column names, in exact order (ADR-0042 fact 2, live-verified). */
177
+ export declare const QCEW_COLUMNS: readonly ["area_fips", "own_code", "industry_code", "agglvl_code", "size_code", "year", "qtr", "disclosure_code", "qtrly_estabs", "month1_emplvl", "month2_emplvl", "month3_emplvl", "total_qtrly_wages", "taxable_qtrly_wages", "qtrly_contributions", "avg_wkly_wage", "lq_disclosure_code", "lq_qtrly_estabs", "lq_month1_emplvl", "lq_month2_emplvl", "lq_month3_emplvl", "lq_total_qtrly_wages", "lq_taxable_qtrly_wages", "lq_qtrly_contributions", "lq_avg_wkly_wage", "oty_disclosure_code", "oty_qtrly_estabs_chg", "oty_qtrly_estabs_pct_chg", "oty_month1_emplvl_chg", "oty_month1_emplvl_pct_chg", "oty_month2_emplvl_chg", "oty_month2_emplvl_pct_chg", "oty_month3_emplvl_chg", "oty_month3_emplvl_pct_chg", "oty_total_qtrly_wages_chg", "oty_total_qtrly_wages_pct_chg", "oty_taxable_qtrly_wages_chg", "oty_taxable_qtrly_wages_pct_chg", "oty_qtrly_contributions_chg", "oty_qtrly_contributions_pct_chg", "oty_avg_wkly_wage_chg", "oty_avg_wkly_wage_pct_chg"];
178
+ /**
179
+ * ★ Build + validate the QCEW slice URL. Each caller-influenced path segment is
180
+ * charclass-validated BEFORE interpolation; the host is a compile-time constant;
181
+ * a post-construction `new URL` host/protocol assert locks it (the per-segment
182
+ * charclass is the real guard — the hostname check alone does not stop a same-host
183
+ * `../`). The client-side filters (ownership/aggregationLevel/sizeCode/narrow)
184
+ * NEVER touch the URL — no SSRF surface. Pure fn (no fetch).
185
+ */
186
+ export declare function buildQcewUrl(mode: string, year: number | string, quarter: string, code: string): string;
187
+ export type QcewBaseBlock = {
188
+ disclosed: boolean;
189
+ disclosureCode: string | null;
190
+ qtrly_estabs: number | null;
191
+ month1_emplvl: number | null;
192
+ month2_emplvl: number | null;
193
+ month3_emplvl: number | null;
194
+ total_qtrly_wages: number | null;
195
+ taxable_qtrly_wages: number | null;
196
+ qtrly_contributions: number | null;
197
+ avg_wkly_wage: number | null;
198
+ };
199
+ export type QcewLqBlock = {
200
+ disclosed: boolean;
201
+ disclosureCode: string | null;
202
+ lq_qtrly_estabs: number | null;
203
+ lq_month1_emplvl: number | null;
204
+ lq_month2_emplvl: number | null;
205
+ lq_month3_emplvl: number | null;
206
+ lq_total_qtrly_wages: number | null;
207
+ lq_taxable_qtrly_wages: number | null;
208
+ lq_qtrly_contributions: number | null;
209
+ lq_avg_wkly_wage: number | null;
210
+ };
211
+ export type QcewOtyBlock = {
212
+ disclosed: boolean;
213
+ disclosureCode: string | null;
214
+ oty_qtrly_estabs_chg: number | null;
215
+ oty_qtrly_estabs_pct_chg: number | null;
216
+ oty_month1_emplvl_chg: number | null;
217
+ oty_month1_emplvl_pct_chg: number | null;
218
+ oty_month2_emplvl_chg: number | null;
219
+ oty_month2_emplvl_pct_chg: number | null;
220
+ oty_month3_emplvl_chg: number | null;
221
+ oty_month3_emplvl_pct_chg: number | null;
222
+ oty_total_qtrly_wages_chg: number | null;
223
+ oty_total_qtrly_wages_pct_chg: number | null;
224
+ oty_taxable_qtrly_wages_chg: number | null;
225
+ oty_taxable_qtrly_wages_pct_chg: number | null;
226
+ oty_qtrly_contributions_chg: number | null;
227
+ oty_qtrly_contributions_pct_chg: number | null;
228
+ oty_avg_wkly_wage_chg: number | null;
229
+ oty_avg_wkly_wage_pct_chg: number | null;
230
+ };
231
+ export type QcewRow = {
232
+ area_fips: string | null;
233
+ own_code: string | null;
234
+ industry_code: string | null;
235
+ agglvl_code: string | null;
236
+ size_code: string | null;
237
+ base: QcewBaseBlock;
238
+ locationQuotient: QcewLqBlock;
239
+ overTheYear: QcewOtyBlock;
240
+ };
241
+ /** Map ONE parsed 42-field record → a disclosure-aware output row. */
242
+ export declare function mapQcewRow(rec: string[]): QcewRow;
243
+ export type BlsQcewArgs = {
244
+ mode?: string;
245
+ area?: string;
246
+ industry?: string;
247
+ year?: number;
248
+ quarter?: string | number;
249
+ ownership?: string;
250
+ aggregationLevel?: string;
251
+ sizeCode?: string;
252
+ limit?: number;
253
+ offset?: number;
254
+ };
255
+ /**
256
+ * ★ `bls_qcew` — keyless QCEW county×NAICS market-size / wages / location-quotient,
257
+ * disclosure-aware. Fetches ONE slice CSV (fetch-once — QCEW does not paginate),
258
+ * parses ALL rows through the symmetric column-drift guard + the POST-parse header
259
+ * assertion, applies the CLIENT-SIDE filters (ownership/aggregationLevel/sizeCode +
260
+ * the narrow industry/area), windows with limit/offset, and maps each page row
261
+ * through the block/code/field-scoped disclosure mapper (suppressed → null NEVER 0;
262
+ * a genuine 0 survives). A per-tuple HTTP 404 → an honest empty (found:false), a
263
+ * 5xx/timeout → THROW, a 200 non-CSV / drifted header → schema_drift THROW. No
264
+ * BLS_API_KEY is read on this keyless path.
265
+ */
266
+ export declare function qcew(args: BlsQcewArgs): Promise<MetaBundle>;
267
+ //# sourceMappingURL=bls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bls.d.ts","sourceRoot":"","sources":["../src/bls.ts"],"names":[],"mappings":"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"}