@usa-open-data-connectors/usa-sources 0.1.2 → 0.1.4

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 (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +442 -214
  3. package/dist/apiKey.d.ts +12 -0
  4. package/dist/apiKey.d.ts.map +1 -0
  5. package/dist/apiKey.js +18 -0
  6. package/dist/apiKey.js.map +1 -0
  7. package/dist/blsSeries.d.ts.map +1 -1
  8. package/dist/blsSeries.js +2 -4
  9. package/dist/blsSeries.js.map +1 -1
  10. package/dist/btsTransportationStats.d.ts +87 -0
  11. package/dist/btsTransportationStats.d.ts.map +1 -0
  12. package/dist/btsTransportationStats.js +130 -0
  13. package/dist/btsTransportationStats.js.map +1 -0
  14. package/dist/cdcCountyObesity.d.ts.map +1 -1
  15. package/dist/cdcCountyObesity.js +3 -5
  16. package/dist/cdcCountyObesity.js.map +1 -1
  17. package/dist/cdcSocrataCatalogue.d.ts +87 -0
  18. package/dist/cdcSocrataCatalogue.d.ts.map +1 -0
  19. package/dist/cdcSocrataCatalogue.js +130 -0
  20. package/dist/cdcSocrataCatalogue.js.map +1 -0
  21. package/dist/cfpbConsumerComplaints.d.ts +2 -0
  22. package/dist/cfpbConsumerComplaints.d.ts.map +1 -1
  23. package/dist/cfpbConsumerComplaints.js +12 -12
  24. package/dist/cfpbConsumerComplaints.js.map +1 -1
  25. package/dist/clinicalTrialsStudies.d.ts +92 -0
  26. package/dist/clinicalTrialsStudies.d.ts.map +1 -0
  27. package/dist/clinicalTrialsStudies.js +147 -0
  28. package/dist/clinicalTrialsStudies.js.map +1 -0
  29. package/dist/cpscProductRecalls.d.ts.map +1 -1
  30. package/dist/cpscProductRecalls.js +2 -4
  31. package/dist/cpscProductRecalls.js.map +1 -1
  32. package/dist/epaEnvirofactsFacilities.d.ts +94 -0
  33. package/dist/epaEnvirofactsFacilities.d.ts.map +1 -0
  34. package/dist/epaEnvirofactsFacilities.js +140 -0
  35. package/dist/epaEnvirofactsFacilities.js.map +1 -0
  36. package/dist/errors.d.ts +12 -2
  37. package/dist/errors.d.ts.map +1 -1
  38. package/dist/errors.js +8 -4
  39. package/dist/errors.js.map +1 -1
  40. package/dist/estimatetaxIncomeTax.d.ts +140 -0
  41. package/dist/estimatetaxIncomeTax.d.ts.map +1 -0
  42. package/dist/estimatetaxIncomeTax.js +225 -0
  43. package/dist/estimatetaxIncomeTax.js.map +1 -0
  44. package/dist/fdicBankDirectory.d.ts +78 -0
  45. package/dist/fdicBankDirectory.d.ts.map +1 -0
  46. package/dist/fdicBankDirectory.js +122 -0
  47. package/dist/fdicBankDirectory.js.map +1 -0
  48. package/dist/femaDisasterDeclarations.d.ts.map +1 -1
  49. package/dist/femaDisasterDeclarations.js +2 -4
  50. package/dist/femaDisasterDeclarations.js.map +1 -1
  51. package/dist/healthdataSocrataCatalogue.d.ts +87 -0
  52. package/dist/healthdataSocrataCatalogue.d.ts.map +1 -0
  53. package/dist/healthdataSocrataCatalogue.js +130 -0
  54. package/dist/healthdataSocrataCatalogue.js.map +1 -0
  55. package/dist/http.d.ts +36 -0
  56. package/dist/http.d.ts.map +1 -0
  57. package/dist/http.js +85 -0
  58. package/dist/http.js.map +1 -0
  59. package/dist/index.d.ts +61 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +31 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/ncbiPubmedSearch.d.ts +71 -0
  64. package/dist/ncbiPubmedSearch.d.ts.map +1 -0
  65. package/dist/ncbiPubmedSearch.js +126 -0
  66. package/dist/ncbiPubmedSearch.js.map +1 -0
  67. package/dist/nceiAnnualTemperature.d.ts.map +1 -1
  68. package/dist/nceiAnnualTemperature.js +3 -5
  69. package/dist/nceiAnnualTemperature.js.map +1 -1
  70. package/dist/noaaSeaLevel.d.ts.map +1 -1
  71. package/dist/noaaSeaLevel.js +2 -4
  72. package/dist/noaaSeaLevel.js.map +1 -1
  73. package/dist/nwsPointForecast.d.ts +99 -0
  74. package/dist/nwsPointForecast.d.ts.map +1 -0
  75. package/dist/nwsPointForecast.js +147 -0
  76. package/dist/nwsPointForecast.js.map +1 -0
  77. package/dist/nycOpenDataCatalogue.d.ts +97 -0
  78. package/dist/nycOpenDataCatalogue.d.ts.map +1 -0
  79. package/dist/nycOpenDataCatalogue.js +151 -0
  80. package/dist/nycOpenDataCatalogue.js.map +1 -0
  81. package/dist/openFdaFoodRecalls.d.ts.map +1 -1
  82. package/dist/openFdaFoodRecalls.js +2 -4
  83. package/dist/openFdaFoodRecalls.js.map +1 -1
  84. package/dist/registry.d.ts.map +1 -1
  85. package/dist/registry.js +30 -2
  86. package/dist/registry.js.map +1 -1
  87. package/dist/secEdgarFilings.d.ts +103 -0
  88. package/dist/secEdgarFilings.d.ts.map +1 -0
  89. package/dist/secEdgarFilings.js +215 -0
  90. package/dist/secEdgarFilings.js.map +1 -0
  91. package/dist/treasuryAvgInterestRate.d.ts.map +1 -1
  92. package/dist/treasuryAvgInterestRate.js +2 -4
  93. package/dist/treasuryAvgInterestRate.js.map +1 -1
  94. package/dist/treasuryDebtToPenny.d.ts +90 -0
  95. package/dist/treasuryDebtToPenny.d.ts.map +1 -0
  96. package/dist/treasuryDebtToPenny.js +168 -0
  97. package/dist/treasuryDebtToPenny.js.map +1 -0
  98. package/dist/usaspendingAgencies.d.ts +78 -0
  99. package/dist/usaspendingAgencies.d.ts.map +1 -0
  100. package/dist/usaspendingAgencies.js +119 -0
  101. package/dist/usaspendingAgencies.js.map +1 -0
  102. package/dist/usgsEarthquakes.d.ts.map +1 -1
  103. package/dist/usgsEarthquakes.js +2 -4
  104. package/dist/usgsEarthquakes.js.map +1 -1
  105. package/dist/usgsPeakStreamflow.d.ts.map +1 -1
  106. package/dist/usgsPeakStreamflow.js +3 -5
  107. package/dist/usgsPeakStreamflow.js.map +1 -1
  108. package/package.json +13 -4
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Normalizes an optional API key read from configuration or a caller.
3
+ *
4
+ * No US source needs a key today, but the adapter interface accepts one, and a
5
+ * key that is set but empty must not reach a request as an empty parameter or
6
+ * header.
7
+ *
8
+ * @param key - The raw key, or undefined when unset.
9
+ * @returns The trimmed key, or undefined when it is blank.
10
+ */
11
+ export declare function normalizeSourceApiKey(key: string | undefined): string | undefined;
12
+ //# sourceMappingURL=apiKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiKey.d.ts","sourceRoot":"","sources":["../src/apiKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMjF"}
package/dist/apiKey.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Normalizes an optional API key read from configuration or a caller.
3
+ *
4
+ * No US source needs a key today, but the adapter interface accepts one, and a
5
+ * key that is set but empty must not reach a request as an empty parameter or
6
+ * header.
7
+ *
8
+ * @param key - The raw key, or undefined when unset.
9
+ * @returns The trimmed key, or undefined when it is blank.
10
+ */
11
+ export function normalizeSourceApiKey(key) {
12
+ const trimmed = key?.trim();
13
+ if (trimmed === undefined || trimmed === '') {
14
+ return undefined;
15
+ }
16
+ return trimmed;
17
+ }
18
+ //# sourceMappingURL=apiKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiKey.js","sourceRoot":"","sources":["../src/apiKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAuB;IAC3D,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"blsSeries.d.ts","sourceRoot":"","sources":["../src/blsSeries.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4CAA4C;AAC5C,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,gBAAgB,CAAC;AAEvD,uDAAuD;AACvD,eAAO,MAAM,4BAA4B,8CAA8C,CAAC;AAExF,4CAA4C;AAC5C,eAAO,MAAM,YAAY,qDAAqD,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAwB5C;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,EAAE,CAiCvE;AAkBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CA+B1F;AAiBD;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAAE,GACnF,OAAO,CAAC,SAAS,CAAC,CAepB;AAED,mDAAmD;AACnD,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,SAAS,CAmB3D,CAAC"}
1
+ {"version":3,"file":"blsSeries.d.ts","sourceRoot":"","sources":["../src/blsSeries.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4CAA4C;AAC5C,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,gBAAgB,CAAC;AAEvD,uDAAuD;AACvD,eAAO,MAAM,4BAA4B,8CAA8C,CAAC;AAExF,4CAA4C;AAC5C,eAAO,MAAM,YAAY,qDAAqD,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAwB5C;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,EAAE,CAiCvE;AAkBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CA+B1F;AAcD;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAAE,GACnF,OAAO,CAAC,SAAS,CAAC,CAepB;AAED,mDAAmD;AACnD,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,SAAS,CAmB3D,CAAC"}
package/dist/blsSeries.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { UsSourceApiError, UsSourceParseError } from './errors.js';
3
+ import { httpGet } from './http.js';
3
4
  import { readFixtureJson } from './fixtures.js';
4
5
  /**
5
6
  * The national unemployment rate, seasonally adjusted. Published monthly by
@@ -126,10 +127,7 @@ export function buildBlsSeries(observations, seriesId) {
126
127
  /** Reads one ten-year-or-shorter window from the BLS API. */
127
128
  async function fetchBlsWindow(seriesId, startYear, endYear, fetchImpl) {
128
129
  const url = `${BLS_API_BASE}/${seriesId}?startyear=${startYear}&endyear=${endYear}`;
129
- const response = await fetchImpl(url);
130
- if (!response.ok) {
131
- throw new UsSourceApiError('bls', `HTTP ${response.status} reading series ${seriesId}`);
132
- }
130
+ const response = await httpGet('bls', url, { fetchImpl });
133
131
  return parseBlsObservations(await response.json());
134
132
  }
135
133
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"blsSeries.js","sourceRoot":"","sources":["../src/blsSeries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blsSeries.js","sourceRoot":"","sources":["../src/blsSeries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { UsDataAdapter } from './types.js';
2
+ /** Adapter id for the bts-transportation-stats source. */
3
+ export declare const BTS_TRANSPORTATION_STATS_SOURCE_ID = "bts-transportation-stats";
4
+ /** One catalogue entry from the Socrata discovery API. */
5
+ export interface BtsCatalogueEntry {
6
+ /** Four-by-four Socrata dataset id, e.g. "ahfs-x44r". */
7
+ id: string;
8
+ /** Human-readable title of the dataset, chart, story, or file. */
9
+ name: string;
10
+ /** What the entry is: "dataset", "chart", "story", "file", or "href". */
11
+ assetType: string;
12
+ /** Publishing office the entry belongs to, or null when the catalogue lists none. */
13
+ category: string | null;
14
+ /** How the entry is rendered, e.g. "tabular", "href", or "story". */
15
+ viewType: string;
16
+ /** When the entry was created, in seconds since the Unix epoch. */
17
+ createdAtEpochSeconds: number;
18
+ /** When the entry was last modified, in seconds since the Unix epoch. */
19
+ viewLastModifiedEpochSeconds: number;
20
+ /** How many times the entry has been viewed. */
21
+ viewCount: number;
22
+ /** How many times the entry has been downloaded. */
23
+ downloadCount: number;
24
+ }
25
+ /** One category and how many catalogue entries carry it. */
26
+ export interface BtsCatalogueCategoryCount {
27
+ category: string;
28
+ entryCount: number;
29
+ }
30
+ /** One page of the catalogue, folded for a story. */
31
+ export interface BtsTransportationCatalogue {
32
+ /** One entry per catalogue item in the page. */
33
+ entries: BtsCatalogueEntry[];
34
+ entryCount: number;
35
+ /** Entries whose asset type is "dataset". */
36
+ datasetCount: number;
37
+ /** Entry with the latest creation time. Ties go to the earlier list entry. */
38
+ newestEntry: BtsCatalogueEntry;
39
+ /**
40
+ * Categories in the page, most entries first, ties broken by name. An entry
41
+ * the catalogue lists without a category is counted under "Uncategorised".
42
+ */
43
+ categories: BtsCatalogueCategoryCount[];
44
+ }
45
+ /** Base URL for the Bureau of Transportation Statistics Socrata catalogue. */
46
+ export declare const BTS_TRANSPORTATION_STATS_API_BASE = "https://data.bts.gov/api/views.json";
47
+ /** How many catalogue entries one request reads. */
48
+ export declare const BTS_TRANSPORTATION_STATS_LIMIT = 10;
49
+ /**
50
+ * Builds the request URL for one page of the catalogue.
51
+ *
52
+ * The endpoint is keyless. The service answers the whole catalogue by default,
53
+ * so the adapter asks for a short page.
54
+ *
55
+ * @param options - an optional entry cap
56
+ * @returns the full request URL
57
+ */
58
+ export declare function buildBtsTransportationStatsUrl(options?: {
59
+ limit?: number;
60
+ }): string;
61
+ /**
62
+ * Parses one page of the catalogue into the entries and the category counts.
63
+ *
64
+ * An entry without an id, a name, or a creation time is a changed shape and
65
+ * stops the parse. An empty page also stops the parse, because a catalogue
66
+ * with no entries is not a usable answer.
67
+ *
68
+ * @param payload - the JSON body from the Socrata discovery API
69
+ * @returns the entries in the page, the counts, and the newest entry
70
+ */
71
+ export declare function parseBtsTransportationStatsPayload(payload: unknown): BtsTransportationCatalogue;
72
+ /**
73
+ * Reads one page of the Bureau of Transportation Statistics catalogue.
74
+ *
75
+ * One keyless request covers the page and reports what the catalogue holds,
76
+ * without reading any dataset's rows.
77
+ *
78
+ * @param options - an optional entry cap and fetch stub
79
+ * @returns the entries in the page, the counts, and the newest entry
80
+ */
81
+ export declare function fetchBtsTransportationStats(options?: {
82
+ limit?: number;
83
+ fetchImpl?: typeof globalThis.fetch;
84
+ }): Promise<BtsTransportationCatalogue>;
85
+ /** Bureau of Transportation Statistics catalogue of datasets, charts, and stories, keyless. */
86
+ export declare const btsTransportationStatsAdapter: UsDataAdapter<BtsTransportationCatalogue>;
87
+ //# sourceMappingURL=btsTransportationStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"btsTransportationStats.d.ts","sourceRoot":"","sources":["../src/btsTransportationStats.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,0DAA0D;AAC1D,eAAO,MAAM,kCAAkC,6BAA6B,CAAC;AAE7E,0DAA0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yEAAyE;IACzE,4BAA4B,EAAE,MAAM,CAAC;IACrC,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,4DAA4D;AAC5D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,WAAW,0BAA0B;IACzC,gDAAgD;IAChD,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,WAAW,EAAE,iBAAiB,CAAC;IAC/B;;;OAGG;IACH,UAAU,EAAE,yBAAyB,EAAE,CAAC;CACzC;AAED,8EAA8E;AAC9E,eAAO,MAAM,iCAAiC,wCAAwC,CAAC;AAEvF,oDAAoD;AACpD,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAkDjD;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAKnF;AAED;;;;;;;;;GASG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,OAAO,GAAG,0BAA0B,CAuC/F;AAED;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,CAAC,EAAE;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACrC,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAOtC;AAED,+FAA+F;AAC/F,eAAO,MAAM,6BAA6B,EAAE,aAAa,CAAC,0BAA0B,CAanF,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { z } from 'zod';
2
+ import { UsSourceParseError } from './errors.js';
3
+ import { httpGet } from './http.js';
4
+ import { readFixtureJson } from './fixtures.js';
5
+ /** Adapter id for the bts-transportation-stats source. */
6
+ export const BTS_TRANSPORTATION_STATS_SOURCE_ID = 'bts-transportation-stats';
7
+ /** Base URL for the Bureau of Transportation Statistics Socrata catalogue. */
8
+ export const BTS_TRANSPORTATION_STATS_API_BASE = 'https://data.bts.gov/api/views.json';
9
+ /** How many catalogue entries one request reads. */
10
+ export const BTS_TRANSPORTATION_STATS_LIMIT = 10;
11
+ /** Committed snapshot, so a build works when the Bureau of Transportation Statistics host is unreachable. */
12
+ const BTS_TRANSPORTATION_STATS_FIXTURE_FILENAME = 'bts-transportation-stats-2026-10-05.json';
13
+ /** Category bucket the adapter uses for an entry the catalogue lists without one. */
14
+ const BTS_TRANSPORTATION_UNCATEGORISED = 'Uncategorised';
15
+ // The discovery API sends a bare JSON array. A value the catalogue does not
16
+ // carry arrives as null, and every count arrives as a number.
17
+ const BTS_TRANSPORTATION_STATS_ENTRY_SCHEMA = z.object({
18
+ id: z.string().optional(),
19
+ name: z.string().optional(),
20
+ assetType: z.string().optional(),
21
+ category: z.string().nullable().optional(),
22
+ viewType: z.string().optional(),
23
+ createdAt: z.number().optional(),
24
+ viewLastModified: z.number().optional(),
25
+ viewCount: z.number().optional(),
26
+ downloadCount: z.number().optional(),
27
+ });
28
+ const BTS_TRANSPORTATION_STATS_PAYLOAD_SCHEMA = z.array(BTS_TRANSPORTATION_STATS_ENTRY_SCHEMA);
29
+ /** Counts entries per category, most entries first, ties by name. */
30
+ function countBtsCatalogueCategories(entries) {
31
+ const counts = new Map();
32
+ for (const entry of entries) {
33
+ const category = entry.category ?? BTS_TRANSPORTATION_UNCATEGORISED;
34
+ counts.set(category, (counts.get(category) ?? 0) + 1);
35
+ }
36
+ return [...counts.entries()]
37
+ .sort(([leftCategory, leftCount], [rightCategory, rightCount]) => leftCount === rightCount ? leftCategory.localeCompare(rightCategory) : rightCount - leftCount)
38
+ .map(([category, entryCount]) => ({ category, entryCount }));
39
+ }
40
+ /** Picks the entry with the latest creation time, ties to the earlier entry. */
41
+ function newestBtsCatalogueEntry(entries) {
42
+ const first = entries[0];
43
+ if (first === undefined) {
44
+ throw new UsSourceParseError(BTS_TRANSPORTATION_STATS_SOURCE_ID, 'No entries to summarise');
45
+ }
46
+ return entries.reduce((best, entry) => (entry.createdAtEpochSeconds > best.createdAtEpochSeconds ? entry : best), first);
47
+ }
48
+ /**
49
+ * Builds the request URL for one page of the catalogue.
50
+ *
51
+ * The endpoint is keyless. The service answers the whole catalogue by default,
52
+ * so the adapter asks for a short page.
53
+ *
54
+ * @param options - an optional entry cap
55
+ * @returns the full request URL
56
+ */
57
+ export function buildBtsTransportationStatsUrl(options) {
58
+ const params = new URLSearchParams({
59
+ limit: String(options?.limit ?? BTS_TRANSPORTATION_STATS_LIMIT),
60
+ });
61
+ return `https://data.bts.gov/api/views.json?${params.toString()}`;
62
+ }
63
+ /**
64
+ * Parses one page of the catalogue into the entries and the category counts.
65
+ *
66
+ * An entry without an id, a name, or a creation time is a changed shape and
67
+ * stops the parse. An empty page also stops the parse, because a catalogue
68
+ * with no entries is not a usable answer.
69
+ *
70
+ * @param payload - the JSON body from the Socrata discovery API
71
+ * @returns the entries in the page, the counts, and the newest entry
72
+ */
73
+ export function parseBtsTransportationStatsPayload(payload) {
74
+ const parsed = BTS_TRANSPORTATION_STATS_PAYLOAD_SCHEMA.safeParse(payload);
75
+ if (!parsed.success) {
76
+ throw new UsSourceParseError(BTS_TRANSPORTATION_STATS_SOURCE_ID, parsed.error.message);
77
+ }
78
+ if (parsed.data.length === 0) {
79
+ throw new UsSourceParseError(BTS_TRANSPORTATION_STATS_SOURCE_ID, 'The response carried no entries');
80
+ }
81
+ const entries = parsed.data.map((row) => {
82
+ if (row.id === undefined || row.name === undefined || row.createdAt === undefined) {
83
+ throw new UsSourceParseError(BTS_TRANSPORTATION_STATS_SOURCE_ID, 'A catalogue entry arrived without its id, name, or creation time');
84
+ }
85
+ return {
86
+ id: row.id,
87
+ name: row.name,
88
+ assetType: row.assetType ?? '',
89
+ category: row.category ?? null,
90
+ viewType: row.viewType ?? '',
91
+ createdAtEpochSeconds: row.createdAt,
92
+ viewLastModifiedEpochSeconds: row.viewLastModified ?? row.createdAt,
93
+ viewCount: row.viewCount ?? 0,
94
+ downloadCount: row.downloadCount ?? 0,
95
+ };
96
+ });
97
+ return {
98
+ entries,
99
+ entryCount: entries.length,
100
+ datasetCount: entries.filter((entry) => entry.assetType === 'dataset').length,
101
+ newestEntry: newestBtsCatalogueEntry(entries),
102
+ categories: countBtsCatalogueCategories(entries),
103
+ };
104
+ }
105
+ /**
106
+ * Reads one page of the Bureau of Transportation Statistics catalogue.
107
+ *
108
+ * One keyless request covers the page and reports what the catalogue holds,
109
+ * without reading any dataset's rows.
110
+ *
111
+ * @param options - an optional entry cap and fetch stub
112
+ * @returns the entries in the page, the counts, and the newest entry
113
+ */
114
+ export async function fetchBtsTransportationStats(options) {
115
+ const fetchImpl = options?.fetchImpl ?? globalThis.fetch;
116
+ const url = buildBtsTransportationStatsUrl(options?.limit === undefined ? {} : { limit: options.limit });
117
+ const response = await httpGet(BTS_TRANSPORTATION_STATS_SOURCE_ID, url, { fetchImpl });
118
+ return parseBtsTransportationStatsPayload(await response.json());
119
+ }
120
+ /** Bureau of Transportation Statistics catalogue of datasets, charts, and stories, keyless. */
121
+ export const btsTransportationStatsAdapter = {
122
+ id: BTS_TRANSPORTATION_STATS_SOURCE_ID,
123
+ name: 'BTS transportation statistics',
124
+ auth: 'none',
125
+ description: 'The Bureau of Transportation Statistics Socrata catalogue, one row per published dataset, chart, or story, with its category, view count, and download count.',
126
+ fetchLive: async (options) => fetchBtsTransportationStats(options?.fetchImpl === undefined ? {} : { fetchImpl: options.fetchImpl }),
127
+ parse: (payload) => parseBtsTransportationStatsPayload(payload),
128
+ loadFixture: () => parseBtsTransportationStatsPayload(readFixtureJson(BTS_TRANSPORTATION_STATS_FIXTURE_FILENAME)),
129
+ };
130
+ //# sourceMappingURL=btsTransportationStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"btsTransportationStats.js","sourceRoot":"","sources":["../src/btsTransportationStats.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cdcCountyObesity.d.ts","sourceRoot":"","sources":["../src/cdcCountyObesity.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,6EAA6E;AAC7E,MAAM,WAAW,wBAAwB;IACvC,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,iEAAiE;AACjE,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IACrC,gEAAgE;IAChE,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC5C,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,EAAE,wBAAwB,CAAC;IAClC,QAAQ,EAAE,0BAA0B,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,iDAAiD,CAAC;AAEzF,kDAAkD;AAClD,eAAO,MAAM,6BAA6B,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,WAAW,CAAC;AAEvD,4DAA4D;AAC5D,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,OAAO,CAAC;AA0BhD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAOhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,wBAAwB,EAAE,GACnC,wBAAwB,EAAE,CAU5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,uBAAuB,CAoCtF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,uBAAuB,GAAG,mBAAmB,CAc9F;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,CAAC,EAAE;IACpD,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACrC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAOnC;AAED,oDAAoD;AACpD,eAAO,MAAM,uBAAuB,EAAE,aAAa,CAAC,mBAAmB,CAiBtE,CAAC"}
1
+ {"version":3,"file":"cdcCountyObesity.d.ts","sourceRoot":"","sources":["../src/cdcCountyObesity.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,6EAA6E;AAC7E,MAAM,WAAW,wBAAwB;IACvC,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,iEAAiE;AACjE,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IACrC,gEAAgE;IAChE,QAAQ,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC5C,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,QAAQ,EAAE,wBAAwB,EAAE,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,EAAE,wBAAwB,CAAC;IAClC,QAAQ,EAAE,0BAA0B,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,iDAAiD,CAAC;AAEzF,kDAAkD;AAClD,eAAO,MAAM,6BAA6B,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,WAAW,CAAC;AAEvD,4DAA4D;AAC5D,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,OAAO,CAAC;AA0BhD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAOhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,wBAAwB,EAAE,GACnC,wBAAwB,EAAE,CAU5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,uBAAuB,CAoCtF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,uBAAuB,GAAG,mBAAmB,CAc9F;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,CAAC,EAAE;IACpD,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACrC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAInC;AAED,oDAAoD;AACpD,eAAO,MAAM,uBAAuB,EAAE,aAAa,CAAC,mBAAmB,CAiBtE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
- import { UsSourceApiError, UsSourceParseError } from './errors.js';
2
+ import { UsSourceParseError } from './errors.js';
3
+ import { httpGet } from './http.js';
3
4
  import { readFixtureJson } from './fixtures.js';
4
5
  /**
5
6
  * Socrata resource for the CDC PLACES county release this adapter reads.
@@ -159,10 +160,7 @@ export function buildCdcCountyObesitySet(payload) {
159
160
  */
160
161
  export async function fetchCdcCountyObesity(options) {
161
162
  const fetchImpl = options?.fetchImpl ?? globalThis.fetch;
162
- const response = await fetchImpl(buildCdcCountyObesityUrl());
163
- if (!response.ok) {
164
- throw new UsSourceApiError('cdc', `HTTP ${response.status} reading the county estimates`);
165
- }
163
+ const response = await httpGet('cdc', buildCdcCountyObesityUrl(), { fetchImpl });
166
164
  return parseCdcCountyObesityPayload(await response.json());
167
165
  }
168
166
  /** CDC PLACES county obesity estimates, keyless. */
@@ -1 +1 @@
1
- {"version":3,"file":"cdcCountyObesity.js","sourceRoot":"","sources":["../src/cdcCountyObesity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cdcCountyObesity.js","sourceRoot":"","sources":["../src/cdcCountyObesity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { UsDataAdapter } from './types.js';
2
+ /** Adapter id for the cdc-socrata-catalogue source. */
3
+ export declare const CDC_SOCRATA_CATALOGUE_SOURCE_ID = "cdc-socrata-catalogue";
4
+ /** One catalogue entry from the Socrata discovery API. */
5
+ export interface CdcSocrataCatalogueEntry {
6
+ /** Four-by-four Socrata dataset id, e.g. "ahfs-x44r". */
7
+ id: string;
8
+ /** Human-readable title of the dataset, chart, story, or file. */
9
+ name: string;
10
+ /** What the entry is: "dataset", "chart", "story", "file", or "href". */
11
+ assetType: string;
12
+ /** Publishing office the entry belongs to, or null when the catalogue lists none. */
13
+ category: string | null;
14
+ /** How the entry is rendered, e.g. "tabular", "href", or "story". */
15
+ viewType: string;
16
+ /** When the entry was created, in seconds since the Unix epoch. */
17
+ createdAtEpochSeconds: number;
18
+ /** When the entry was last modified, in seconds since the Unix epoch. */
19
+ viewLastModifiedEpochSeconds: number;
20
+ /** How many times the entry has been viewed. */
21
+ viewCount: number;
22
+ /** How many times the entry has been downloaded. */
23
+ downloadCount: number;
24
+ }
25
+ /** One category and how many catalogue entries carry it. */
26
+ export interface CdcSocrataCategoryCount {
27
+ category: string;
28
+ entryCount: number;
29
+ }
30
+ /** One page of the catalogue, folded for a story. */
31
+ export interface CdcSocrataCatalogue {
32
+ /** One entry per catalogue item in the page. */
33
+ entries: CdcSocrataCatalogueEntry[];
34
+ entryCount: number;
35
+ /** Entries whose asset type is "dataset". */
36
+ datasetCount: number;
37
+ /** Entry with the latest creation time. Ties go to the earlier list entry. */
38
+ newestEntry: CdcSocrataCatalogueEntry;
39
+ /**
40
+ * Categories in the page, most entries first, ties broken by name. An entry
41
+ * the catalogue lists without a category is counted under "Uncategorised".
42
+ */
43
+ categories: CdcSocrataCategoryCount[];
44
+ }
45
+ /** Base URL for the CDC Socrata catalogue. */
46
+ export declare const CDC_SOCRATA_CATALOGUE_API_BASE = "https://data.cdc.gov/api/views.json";
47
+ /** How many catalogue entries one request reads. */
48
+ export declare const CDC_SOCRATA_CATALOGUE_LIMIT = 10;
49
+ /**
50
+ * Builds the request URL for one page of the catalogue.
51
+ *
52
+ * The endpoint is keyless. The service answers the whole catalogue by default,
53
+ * so the adapter asks for a short page.
54
+ *
55
+ * @param options - an optional entry cap
56
+ * @returns the full request URL
57
+ */
58
+ export declare function buildCdcSocrataCatalogueUrl(options?: {
59
+ limit?: number;
60
+ }): string;
61
+ /**
62
+ * Parses one page of the catalogue into the entries and the category counts.
63
+ *
64
+ * An entry without an id, a name, or a creation time is a changed shape and
65
+ * stops the parse. An empty page also stops the parse, because a catalogue
66
+ * with no entries is not a usable answer.
67
+ *
68
+ * @param payload - the JSON body from the Socrata discovery API
69
+ * @returns the entries in the page, the counts, and the newest entry
70
+ */
71
+ export declare function parseCdcSocrataCataloguePayload(payload: unknown): CdcSocrataCatalogue;
72
+ /**
73
+ * Reads one page of the CDC catalogue.
74
+ *
75
+ * One keyless request covers the page and reports what the catalogue holds,
76
+ * without reading any dataset's rows.
77
+ *
78
+ * @param options - an optional entry cap and fetch stub
79
+ * @returns the entries in the page, the counts, and the newest entry
80
+ */
81
+ export declare function fetchCdcSocrataCatalogue(options?: {
82
+ limit?: number;
83
+ fetchImpl?: typeof globalThis.fetch;
84
+ }): Promise<CdcSocrataCatalogue>;
85
+ /** CDC Socrata catalogue of datasets, charts, and stories, keyless. */
86
+ export declare const cdcSocrataCatalogueAdapter: UsDataAdapter<CdcSocrataCatalogue>;
87
+ //# sourceMappingURL=cdcSocrataCatalogue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdcSocrataCatalogue.d.ts","sourceRoot":"","sources":["../src/cdcSocrataCatalogue.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,uDAAuD;AACvD,eAAO,MAAM,+BAA+B,0BAA0B,CAAC;AAEvE,0DAA0D;AAC1D,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,qFAAqF;IACrF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yEAAyE;IACzE,4BAA4B,EAAE,MAAM,CAAC;IACrC,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,4DAA4D;AAC5D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,WAAW,EAAE,wBAAwB,CAAC;IACtC;;;OAGG;IACH,UAAU,EAAE,uBAAuB,EAAE,CAAC;CACvC;AAED,8CAA8C;AAC9C,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AAEpF,oDAAoD;AACpD,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAkD9C;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAKhF;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAuCrF;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,CAAC,EAAE;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACrC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAO/B;AAED,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,EAAE,aAAa,CAAC,mBAAmB,CAazE,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { z } from 'zod';
2
+ import { UsSourceParseError } from './errors.js';
3
+ import { httpGet } from './http.js';
4
+ import { readFixtureJson } from './fixtures.js';
5
+ /** Adapter id for the cdc-socrata-catalogue source. */
6
+ export const CDC_SOCRATA_CATALOGUE_SOURCE_ID = 'cdc-socrata-catalogue';
7
+ /** Base URL for the CDC Socrata catalogue. */
8
+ export const CDC_SOCRATA_CATALOGUE_API_BASE = 'https://data.cdc.gov/api/views.json';
9
+ /** How many catalogue entries one request reads. */
10
+ export const CDC_SOCRATA_CATALOGUE_LIMIT = 10;
11
+ /** Committed snapshot, so a build works when the CDC host is unreachable. */
12
+ const CDC_SOCRATA_CATALOGUE_FIXTURE_FILENAME = 'cdc-socrata-catalogue-2026-10-05.json';
13
+ /** Category bucket the adapter uses for an entry the catalogue lists without one. */
14
+ const CDC_SOCRATA_UNCATEGORISED = 'Uncategorised';
15
+ // The discovery API sends a bare JSON array. A value the catalogue does not
16
+ // carry arrives as null, and every count arrives as a number.
17
+ const CDC_SOCRATA_CATALOGUE_ENTRY_SCHEMA = z.object({
18
+ id: z.string().optional(),
19
+ name: z.string().optional(),
20
+ assetType: z.string().optional(),
21
+ category: z.string().nullable().optional(),
22
+ viewType: z.string().optional(),
23
+ createdAt: z.number().optional(),
24
+ viewLastModified: z.number().optional(),
25
+ viewCount: z.number().optional(),
26
+ downloadCount: z.number().optional(),
27
+ });
28
+ const CDC_SOCRATA_CATALOGUE_PAYLOAD_SCHEMA = z.array(CDC_SOCRATA_CATALOGUE_ENTRY_SCHEMA);
29
+ /** Counts entries per category, most entries first, ties by name. */
30
+ function countCdcSocrataCategories(entries) {
31
+ const counts = new Map();
32
+ for (const entry of entries) {
33
+ const category = entry.category ?? CDC_SOCRATA_UNCATEGORISED;
34
+ counts.set(category, (counts.get(category) ?? 0) + 1);
35
+ }
36
+ return [...counts.entries()]
37
+ .sort(([leftCategory, leftCount], [rightCategory, rightCount]) => leftCount === rightCount ? leftCategory.localeCompare(rightCategory) : rightCount - leftCount)
38
+ .map(([category, entryCount]) => ({ category, entryCount }));
39
+ }
40
+ /** Picks the entry with the latest creation time, ties to the earlier entry. */
41
+ function newestCdcSocrataEntry(entries) {
42
+ const first = entries[0];
43
+ if (first === undefined) {
44
+ throw new UsSourceParseError(CDC_SOCRATA_CATALOGUE_SOURCE_ID, 'No entries to summarise');
45
+ }
46
+ return entries.reduce((best, entry) => (entry.createdAtEpochSeconds > best.createdAtEpochSeconds ? entry : best), first);
47
+ }
48
+ /**
49
+ * Builds the request URL for one page of the catalogue.
50
+ *
51
+ * The endpoint is keyless. The service answers the whole catalogue by default,
52
+ * so the adapter asks for a short page.
53
+ *
54
+ * @param options - an optional entry cap
55
+ * @returns the full request URL
56
+ */
57
+ export function buildCdcSocrataCatalogueUrl(options) {
58
+ const params = new URLSearchParams({
59
+ limit: String(options?.limit ?? CDC_SOCRATA_CATALOGUE_LIMIT),
60
+ });
61
+ return `https://data.cdc.gov/api/views.json?${params.toString()}`;
62
+ }
63
+ /**
64
+ * Parses one page of the catalogue into the entries and the category counts.
65
+ *
66
+ * An entry without an id, a name, or a creation time is a changed shape and
67
+ * stops the parse. An empty page also stops the parse, because a catalogue
68
+ * with no entries is not a usable answer.
69
+ *
70
+ * @param payload - the JSON body from the Socrata discovery API
71
+ * @returns the entries in the page, the counts, and the newest entry
72
+ */
73
+ export function parseCdcSocrataCataloguePayload(payload) {
74
+ const parsed = CDC_SOCRATA_CATALOGUE_PAYLOAD_SCHEMA.safeParse(payload);
75
+ if (!parsed.success) {
76
+ throw new UsSourceParseError(CDC_SOCRATA_CATALOGUE_SOURCE_ID, parsed.error.message);
77
+ }
78
+ if (parsed.data.length === 0) {
79
+ throw new UsSourceParseError(CDC_SOCRATA_CATALOGUE_SOURCE_ID, 'The response carried no entries');
80
+ }
81
+ const entries = parsed.data.map((row) => {
82
+ if (row.id === undefined || row.name === undefined || row.createdAt === undefined) {
83
+ throw new UsSourceParseError(CDC_SOCRATA_CATALOGUE_SOURCE_ID, 'A catalogue entry arrived without its id, name, or creation time');
84
+ }
85
+ return {
86
+ id: row.id,
87
+ name: row.name,
88
+ assetType: row.assetType ?? '',
89
+ category: row.category ?? null,
90
+ viewType: row.viewType ?? '',
91
+ createdAtEpochSeconds: row.createdAt,
92
+ viewLastModifiedEpochSeconds: row.viewLastModified ?? row.createdAt,
93
+ viewCount: row.viewCount ?? 0,
94
+ downloadCount: row.downloadCount ?? 0,
95
+ };
96
+ });
97
+ return {
98
+ entries,
99
+ entryCount: entries.length,
100
+ datasetCount: entries.filter((entry) => entry.assetType === 'dataset').length,
101
+ newestEntry: newestCdcSocrataEntry(entries),
102
+ categories: countCdcSocrataCategories(entries),
103
+ };
104
+ }
105
+ /**
106
+ * Reads one page of the CDC catalogue.
107
+ *
108
+ * One keyless request covers the page and reports what the catalogue holds,
109
+ * without reading any dataset's rows.
110
+ *
111
+ * @param options - an optional entry cap and fetch stub
112
+ * @returns the entries in the page, the counts, and the newest entry
113
+ */
114
+ export async function fetchCdcSocrataCatalogue(options) {
115
+ const fetchImpl = options?.fetchImpl ?? globalThis.fetch;
116
+ const url = buildCdcSocrataCatalogueUrl(options?.limit === undefined ? {} : { limit: options.limit });
117
+ const response = await httpGet(CDC_SOCRATA_CATALOGUE_SOURCE_ID, url, { fetchImpl });
118
+ return parseCdcSocrataCataloguePayload(await response.json());
119
+ }
120
+ /** CDC Socrata catalogue of datasets, charts, and stories, keyless. */
121
+ export const cdcSocrataCatalogueAdapter = {
122
+ id: CDC_SOCRATA_CATALOGUE_SOURCE_ID,
123
+ name: 'CDC Socrata catalogue',
124
+ auth: 'none',
125
+ description: "The CDC's Socrata catalogue, one row per published dataset, chart, or story, with its category, view count, and download count.",
126
+ fetchLive: async (options) => fetchCdcSocrataCatalogue(options?.fetchImpl === undefined ? {} : { fetchImpl: options.fetchImpl }),
127
+ parse: (payload) => parseCdcSocrataCataloguePayload(payload),
128
+ loadFixture: () => parseCdcSocrataCataloguePayload(readFixtureJson(CDC_SOCRATA_CATALOGUE_FIXTURE_FILENAME)),
129
+ };
130
+ //# sourceMappingURL=cdcSocrataCatalogue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdcSocrataCatalogue.js","sourceRoot":"","sources":["../src/cdcSocrataCatalogue.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,8 @@ export interface CfpConsumerComplaintSeries {
37
37
  topCompanies: CfpComplaintCompanyCount[];
38
38
  }
39
39
  /** Base URL for the Consumer Complaint Database search API. */
40
+ /** The user agent the search API accepts. Its edge rejects undici's default. */
41
+ export declare const CFPB_USER_AGENT = "usa-open-data-connectors (https://github.com/olitreadwell/usa-open-data-connectors)";
40
42
  export declare const CFPB_COMPLAINT_SEARCH_API_BASE = "https://www.consumerfinance.gov/data-research/consumer-complaints/search/api/v1/";
41
43
  /**
42
44
  * First calendar year the adapter reads.