@usa-open-data-connectors/usa-sources 0.1.3 → 0.1.7
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.
- package/LICENSE +21 -0
- package/README.md +575 -214
- package/dist/apiKey.d.ts +12 -0
- package/dist/apiKey.d.ts.map +1 -0
- package/dist/apiKey.js +18 -0
- package/dist/apiKey.js.map +1 -0
- package/dist/blsSeries.d.ts.map +1 -1
- package/dist/blsSeries.js +2 -4
- package/dist/blsSeries.js.map +1 -1
- package/dist/btsTransportationStats.d.ts.map +1 -1
- package/dist/btsTransportationStats.js +3 -5
- package/dist/btsTransportationStats.js.map +1 -1
- package/dist/callookCallsigns.d.ts +119 -0
- package/dist/callookCallsigns.d.ts.map +1 -0
- package/dist/callookCallsigns.js +264 -0
- package/dist/callookCallsigns.js.map +1 -0
- package/dist/cdcCountyObesity.d.ts.map +1 -1
- package/dist/cdcCountyObesity.js +3 -5
- package/dist/cdcCountyObesity.js.map +1 -1
- package/dist/cdcSocrataCatalogue.d.ts.map +1 -1
- package/dist/cdcSocrataCatalogue.js +3 -5
- package/dist/cdcSocrataCatalogue.js.map +1 -1
- package/dist/cfpbConsumerComplaints.d.ts +2 -0
- package/dist/cfpbConsumerComplaints.d.ts.map +1 -1
- package/dist/cfpbConsumerComplaints.js +12 -12
- package/dist/cfpbConsumerComplaints.js.map +1 -1
- package/dist/clinicalTrialsStudies.d.ts.map +1 -1
- package/dist/clinicalTrialsStudies.js +3 -5
- package/dist/clinicalTrialsStudies.js.map +1 -1
- package/dist/collegeScorecardInstitutions.d.ts +133 -0
- package/dist/collegeScorecardInstitutions.d.ts.map +1 -0
- package/dist/collegeScorecardInstitutions.js +339 -0
- package/dist/collegeScorecardInstitutions.js.map +1 -0
- package/dist/cpscProductRecalls.d.ts.map +1 -1
- package/dist/cpscProductRecalls.js +2 -4
- package/dist/cpscProductRecalls.js.map +1 -1
- package/dist/epaEnvirofactsFacilities.d.ts.map +1 -1
- package/dist/epaEnvirofactsFacilities.js +2 -4
- package/dist/epaEnvirofactsFacilities.js.map +1 -1
- package/dist/errors.d.ts +12 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +8 -4
- package/dist/errors.js.map +1 -1
- package/dist/estimatetaxIncomeTax.d.ts +140 -0
- package/dist/estimatetaxIncomeTax.d.ts.map +1 -0
- package/dist/estimatetaxIncomeTax.js +225 -0
- package/dist/estimatetaxIncomeTax.js.map +1 -0
- package/dist/fdicBankDirectory.d.ts.map +1 -1
- package/dist/fdicBankDirectory.js +2 -4
- package/dist/fdicBankDirectory.js.map +1 -1
- package/dist/femaDisasterDeclarations.d.ts.map +1 -1
- package/dist/femaDisasterDeclarations.js +2 -4
- package/dist/femaDisasterDeclarations.js.map +1 -1
- package/dist/healthdataSocrataCatalogue.d.ts.map +1 -1
- package/dist/healthdataSocrataCatalogue.js +3 -5
- package/dist/healthdataSocrataCatalogue.js.map +1 -1
- package/dist/http.d.ts +40 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +93 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +33 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/ncbiPubmedSearch.d.ts +4 -0
- package/dist/ncbiPubmedSearch.d.ts.map +1 -1
- package/dist/ncbiPubmedSearch.js +10 -4
- package/dist/ncbiPubmedSearch.js.map +1 -1
- package/dist/nceiAnnualTemperature.d.ts.map +1 -1
- package/dist/nceiAnnualTemperature.js +3 -5
- package/dist/nceiAnnualTemperature.js.map +1 -1
- package/dist/nextBusTransitVehicles.d.ts +102 -0
- package/dist/nextBusTransitVehicles.d.ts.map +1 -0
- package/dist/nextBusTransitVehicles.js +171 -0
- package/dist/nextBusTransitVehicles.js.map +1 -0
- package/dist/noaaSeaLevel.d.ts.map +1 -1
- package/dist/noaaSeaLevel.js +2 -4
- package/dist/noaaSeaLevel.js.map +1 -1
- package/dist/nwsPointForecast.d.ts +1 -1
- package/dist/nwsPointForecast.d.ts.map +1 -1
- package/dist/nwsPointForecast.js +7 -6
- package/dist/nwsPointForecast.js.map +1 -1
- package/dist/nycOpenDataCatalogue.d.ts +97 -0
- package/dist/nycOpenDataCatalogue.d.ts.map +1 -0
- package/dist/nycOpenDataCatalogue.js +151 -0
- package/dist/nycOpenDataCatalogue.js.map +1 -0
- package/dist/openFdaFoodRecalls.d.ts.map +1 -1
- package/dist/openFdaFoodRecalls.js +2 -4
- package/dist/openFdaFoodRecalls.js.map +1 -1
- package/dist/publicDataHubHospital.d.ts +116 -0
- package/dist/publicDataHubHospital.d.ts.map +1 -0
- package/dist/publicDataHubHospital.js +175 -0
- package/dist/publicDataHubHospital.js.map +1 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +16 -2
- package/dist/registry.js.map +1 -1
- package/dist/secEdgarFilings.d.ts +1 -1
- package/dist/secEdgarFilings.d.ts.map +1 -1
- package/dist/secEdgarFilings.js +7 -6
- package/dist/secEdgarFilings.js.map +1 -1
- package/dist/treasuryAvgInterestRate.d.ts.map +1 -1
- package/dist/treasuryAvgInterestRate.js +2 -4
- package/dist/treasuryAvgInterestRate.js.map +1 -1
- package/dist/treasuryDebtToPenny.d.ts.map +1 -1
- package/dist/treasuryDebtToPenny.js +2 -4
- package/dist/treasuryDebtToPenny.js.map +1 -1
- package/dist/usaspendingAgencies.d.ts.map +1 -1
- package/dist/usaspendingAgencies.js +3 -5
- package/dist/usaspendingAgencies.js.map +1 -1
- package/dist/usgsEarthquakes.d.ts.map +1 -1
- package/dist/usgsEarthquakes.js +2 -4
- package/dist/usgsEarthquakes.js.map +1 -1
- package/dist/usgsPeakStreamflow.d.ts.map +1 -1
- package/dist/usgsPeakStreamflow.js +3 -5
- package/dist/usgsPeakStreamflow.js.map +1 -1
- package/package.json +7 -4
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { UsSourceParseError } from './errors.js';
|
|
4
|
+
import { readFixtureText } from './fixtures.js';
|
|
5
|
+
import { httpGet } from './http.js';
|
|
6
|
+
/** Adapter id for the NextBus transit vehicle source. */
|
|
7
|
+
export const NEXTBUS_TRANSIT_VEHICLES_SOURCE_ID = 'nextbus-transit-vehicles';
|
|
8
|
+
/** Base URL for the keyless NextBus XML feed. */
|
|
9
|
+
export const NEXTBUS_XML_FEED_BASE = 'https://retro.umoiq.com/service/publicXMLFeed';
|
|
10
|
+
/** Agency tag for the Portland Streetcar on the NextBus feed. */
|
|
11
|
+
export const NEXTBUS_PORTLAND_STREETCAR_AGENCY_TAG = 'portland-sc';
|
|
12
|
+
/** Route tag for the Portland Streetcar NS line. */
|
|
13
|
+
export const NEXTBUS_PORTLAND_STREETCAR_ROUTE_TAG = '193';
|
|
14
|
+
/** The agency and route this adapter reads by default. */
|
|
15
|
+
export const NEXTBUS_PORTLAND_STREETCAR_QUERY = {
|
|
16
|
+
agencyTag: NEXTBUS_PORTLAND_STREETCAR_AGENCY_TAG,
|
|
17
|
+
routeTag: NEXTBUS_PORTLAND_STREETCAR_ROUTE_TAG,
|
|
18
|
+
};
|
|
19
|
+
/** Committed snapshot, so a build works when the NextBus feed is unreachable. */
|
|
20
|
+
const NEXTBUS_VEHICLE_FIXTURE_FILENAME = 'nextbus-portland-streetcar-vehicles-2026-10-22.xml';
|
|
21
|
+
// The feed carries every value as an XML attribute, so a number arrives as a
|
|
22
|
+
// string and a boolean arrives as "true" or "false".
|
|
23
|
+
const NEXTBUS_VEHICLE_SCHEMA = z.object({
|
|
24
|
+
id: z.string().min(1),
|
|
25
|
+
routeTag: z.string().min(1),
|
|
26
|
+
dirTag: z.string().optional(),
|
|
27
|
+
lat: z.coerce.number().min(-90).max(90),
|
|
28
|
+
lon: z.coerce.number().min(-180).max(180),
|
|
29
|
+
secsSinceReport: z.coerce.number().int().nonnegative(),
|
|
30
|
+
predictable: z
|
|
31
|
+
.union([z.boolean(), z.enum(['true', 'false'])])
|
|
32
|
+
.transform((value) => value === true || value === 'true'),
|
|
33
|
+
heading: z.coerce.number().optional(),
|
|
34
|
+
speedKmHr: z.coerce.number().nonnegative().optional(),
|
|
35
|
+
});
|
|
36
|
+
const NEXTBUS_BODY_SCHEMA = z.object({
|
|
37
|
+
body: z.object({
|
|
38
|
+
lastTime: z.object({
|
|
39
|
+
time: z.coerce.number().int().positive(),
|
|
40
|
+
}),
|
|
41
|
+
vehicle: z.union([NEXTBUS_VEHICLE_SCHEMA, z.array(NEXTBUS_VEHICLE_SCHEMA)]).optional(),
|
|
42
|
+
}),
|
|
43
|
+
});
|
|
44
|
+
const NEXTBUS_ERROR_SCHEMA = z.object({
|
|
45
|
+
body: z.object({
|
|
46
|
+
Error: z.object({
|
|
47
|
+
'#text': z.string().optional(),
|
|
48
|
+
}),
|
|
49
|
+
}),
|
|
50
|
+
});
|
|
51
|
+
/** Picks the message out of a NextBus error body, or null when the body is not one. */
|
|
52
|
+
function nextBusErrorMessage(payload) {
|
|
53
|
+
const parsed = NEXTBUS_ERROR_SCHEMA.safeParse(payload);
|
|
54
|
+
if (!parsed.success) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return parsed.data.body.Error['#text'] ?? 'The feed rejected the request';
|
|
58
|
+
}
|
|
59
|
+
/** Means one number across the values that carry one, rounded to one decimal. */
|
|
60
|
+
function meanOrZero(values) {
|
|
61
|
+
if (values.length === 0) {
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
const total = values.reduce((sum, value) => sum + value, 0);
|
|
65
|
+
return Number((total / values.length).toFixed(1));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Builds the request URL for vehicle locations on one agency route.
|
|
69
|
+
*
|
|
70
|
+
* The feed is keyless. `t=0` asks for every report the feed still holds for
|
|
71
|
+
* the route, which is the current set of vehicles.
|
|
72
|
+
*
|
|
73
|
+
* @param query - the agency and route to read
|
|
74
|
+
* @returns the full request URL
|
|
75
|
+
*/
|
|
76
|
+
export function buildNextBusVehicleUrl(query) {
|
|
77
|
+
const params = new URLSearchParams({
|
|
78
|
+
command: 'vehicleLocations',
|
|
79
|
+
a: query.agencyTag,
|
|
80
|
+
r: query.routeTag,
|
|
81
|
+
t: '0',
|
|
82
|
+
});
|
|
83
|
+
return `${NEXTBUS_XML_FEED_BASE}?${params.toString()}`;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parses one NextBus vehicle response into the positions and their summary.
|
|
87
|
+
*
|
|
88
|
+
* The parser keeps XML attributes as strings, and zod checks every value that
|
|
89
|
+
* reaches the snapshot. An error body, a missing timestamp, or a position
|
|
90
|
+
* outside the map stops the parse.
|
|
91
|
+
*
|
|
92
|
+
* @param payload - the XML body from the NextBus feed
|
|
93
|
+
* @param query - the agency and route the request asked for
|
|
94
|
+
* @returns one report per vehicle, plus counts and report ages
|
|
95
|
+
*/
|
|
96
|
+
export function parseNextBusVehiclePayload(payload, query = NEXTBUS_PORTLAND_STREETCAR_QUERY) {
|
|
97
|
+
let parsed;
|
|
98
|
+
try {
|
|
99
|
+
parsed = new XMLParser({
|
|
100
|
+
ignoreAttributes: false,
|
|
101
|
+
attributeNamePrefix: '',
|
|
102
|
+
trimValues: true,
|
|
103
|
+
}).parse(String(payload));
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
throw new UsSourceParseError(NEXTBUS_TRANSIT_VEHICLES_SOURCE_ID, 'The response was not valid XML', { cause: error });
|
|
107
|
+
}
|
|
108
|
+
const errorMessage = nextBusErrorMessage(parsed);
|
|
109
|
+
if (errorMessage !== null) {
|
|
110
|
+
throw new UsSourceParseError(NEXTBUS_TRANSIT_VEHICLES_SOURCE_ID, errorMessage);
|
|
111
|
+
}
|
|
112
|
+
const body = NEXTBUS_BODY_SCHEMA.safeParse(parsed);
|
|
113
|
+
if (!body.success) {
|
|
114
|
+
throw new UsSourceParseError(NEXTBUS_TRANSIT_VEHICLES_SOURCE_ID, body.error.message);
|
|
115
|
+
}
|
|
116
|
+
const rawVehicles = body.data.body.vehicle;
|
|
117
|
+
const vehicles = (rawVehicles === undefined ? [] : Array.isArray(rawVehicles) ? rawVehicles : [rawVehicles]).map((vehicle) => ({
|
|
118
|
+
vehicleId: vehicle.id,
|
|
119
|
+
routeTag: vehicle.routeTag,
|
|
120
|
+
directionTag: vehicle.dirTag ?? '',
|
|
121
|
+
latitude: vehicle.lat,
|
|
122
|
+
longitude: vehicle.lon,
|
|
123
|
+
headingDegrees: vehicle.heading ?? null,
|
|
124
|
+
speedKmPerHour: vehicle.speedKmHr ?? null,
|
|
125
|
+
secondsSinceReport: vehicle.secsSinceReport,
|
|
126
|
+
predictable: vehicle.predictable,
|
|
127
|
+
}));
|
|
128
|
+
const reportAges = vehicles.map((vehicle) => vehicle.secondsSinceReport);
|
|
129
|
+
const speeds = vehicles
|
|
130
|
+
.map((vehicle) => vehicle.speedKmPerHour)
|
|
131
|
+
.filter((speed) => speed !== null);
|
|
132
|
+
return {
|
|
133
|
+
agencyTag: query.agencyTag,
|
|
134
|
+
routeTag: query.routeTag,
|
|
135
|
+
observedAtEpochMs: body.data.body.lastTime.time,
|
|
136
|
+
vehicles,
|
|
137
|
+
vehicleCount: vehicles.length,
|
|
138
|
+
predictableVehicleCount: vehicles.filter((vehicle) => vehicle.predictable).length,
|
|
139
|
+
averageSpeedKmPerHour: meanOrZero(speeds),
|
|
140
|
+
newestReportSeconds: reportAges.length === 0 ? null : Math.min(...reportAges),
|
|
141
|
+
oldestReportSeconds: reportAges.length === 0 ? null : Math.max(...reportAges),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Reads the current vehicle positions on a NextBus route.
|
|
146
|
+
*
|
|
147
|
+
* One keyless request returns the streetcars the agency is reporting right now,
|
|
148
|
+
* with their position, heading, speed, and report age.
|
|
149
|
+
*
|
|
150
|
+
* @param options - the agency, route, and an optional fetch stub
|
|
151
|
+
* @returns one report per vehicle, plus counts and report ages
|
|
152
|
+
*/
|
|
153
|
+
export async function fetchNextBusVehicles(options) {
|
|
154
|
+
const query = {
|
|
155
|
+
agencyTag: options?.agencyTag ?? NEXTBUS_PORTLAND_STREETCAR_AGENCY_TAG,
|
|
156
|
+
routeTag: options?.routeTag ?? NEXTBUS_PORTLAND_STREETCAR_ROUTE_TAG,
|
|
157
|
+
};
|
|
158
|
+
const response = await httpGet(NEXTBUS_TRANSIT_VEHICLES_SOURCE_ID, buildNextBusVehicleUrl(query), options?.fetchImpl === undefined ? {} : { fetchImpl: options.fetchImpl });
|
|
159
|
+
return parseNextBusVehiclePayload(await response.text(), query);
|
|
160
|
+
}
|
|
161
|
+
/** Live positions on the Portland Streetcar NS line, keyless through the NextBus feed. */
|
|
162
|
+
export const nextBusTransitVehiclesAdapter = {
|
|
163
|
+
id: NEXTBUS_TRANSIT_VEHICLES_SOURCE_ID,
|
|
164
|
+
name: 'NextBus transit vehicles',
|
|
165
|
+
auth: 'none',
|
|
166
|
+
description: 'Live vehicle positions on the Portland Streetcar NS line, one of the agencies on the keyless NextBus XML feed, with latitude, longitude, heading, speed, and report age.',
|
|
167
|
+
fetchLive: async (options) => fetchNextBusVehicles(options?.fetchImpl === undefined ? {} : { fetchImpl: options.fetchImpl }),
|
|
168
|
+
parse: (payload) => parseNextBusVehiclePayload(payload),
|
|
169
|
+
loadFixture: () => parseNextBusVehiclePayload(readFixtureText(NEXTBUS_VEHICLE_FIXTURE_FILENAME)),
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=nextBusTransitVehicles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextBusTransitVehicles.js","sourceRoot":"","sources":["../src/nextBusTransitVehicles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noaaSeaLevel.d.ts","sourceRoot":"","sources":["../src/noaaSeaLevel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"noaaSeaLevel.d.ts","sourceRoot":"","sources":["../src/noaaSeaLevel.ts"],"names":[],"mappings":"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"}
|
package/dist/noaaSeaLevel.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
|
/** Base URL for the NOAA CO-OPS data retrieval API. */
|
|
5
6
|
export const NOAA_COOPS_API_BASE = 'https://api.tidesandcurrents.noaa.gov/api/prod/datagetter';
|
|
@@ -233,10 +234,7 @@ export async function fetchNoaaSeaLevel(options) {
|
|
|
233
234
|
startYear: options?.startYear ?? NOAA_SEA_LEVEL_FIRST_YEAR,
|
|
234
235
|
endYear: options?.endYear ?? new Date().getFullYear(),
|
|
235
236
|
});
|
|
236
|
-
const response = await
|
|
237
|
-
if (!response.ok) {
|
|
238
|
-
throw new UsSourceApiError('noaa', `HTTP ${response.status} reading the sea level record`);
|
|
239
|
-
}
|
|
237
|
+
const response = await httpGet('noaa', url, { fetchImpl });
|
|
240
238
|
return buildNoaaSeaLevelSeries(parseNoaaSeaLevelPayload(await response.json()));
|
|
241
239
|
}
|
|
242
240
|
/** NOAA CO-OPS monthly mean sea level, keyless. */
|
package/dist/noaaSeaLevel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noaaSeaLevel.js","sourceRoot":"","sources":["../src/noaaSeaLevel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAmEhD,uDAAuD;AACvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,2DAA2D,CAAC;AAE/F,qEAAqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,cAAc,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C,0CAA0C;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAE7C,yFAAyF;AACzF,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AAEjD,gDAAgD;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAAG,aAAa,CAAC;AAEvD,qDAAqD;AACrD,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,CAAC,MAAM,6BAA6B,GAAG,mBAAmB,CAAC;AAEjE,qDAAqD;AACrD,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,0EAA0E;AAC1E,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,gFAAgF;AAChF,MAAM,+BAA+B,GAAG,gCAAgC,CAAC;AAEzE,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC;SACD,QAAQ,EAAE;IACb,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE;IAC/C,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,oEAAoE;AACpE,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAwB;IAC3D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,OAAO,EAAE,sBAAsB;QAC/B,WAAW,EAAE,6BAA6B;QAC1C,UAAU,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,gBAAgB,EAAE;QACnD,QAAQ,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,cAAc,EAAE;QAC7C,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,oBAAoB;QAC3B,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IACH,OAAO,GAAG,mBAAmB,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,8BAA8B,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;IAC/C,IAAI,SAAS,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACzD,MAAM,IAAI,kBAAkB,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9C,MAAM,IAAI,kBAAkB,CAC1B,MAAM,EACN,uCAAuC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAC7D,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD,SAAS;QACX,CAAC;QACD,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,kBAAkB,CAAC,MAAM,EAAE,8BAA8B,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,kBAAkB,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;AACnE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mCAAmC,CAAC,KAAyB;IAC3E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,kBAAkB,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;QACtB,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC;QACrC,WAAW,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACnD,UAAU,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,MAAM,WAAW,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC7D,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAAC,MAAM,EAAE,2CAA2C,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC;IACzE,OAAO,KAAK,GAAG,qBAAqB,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA4B;IAClE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAuB,CAAC,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC;SAC1D,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACxB,IAAI;QACJ,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM;QACrF,UAAU,EAAE,MAAM,CAAC,MAAM;KAC1B,CAAC,CAAC,CAAC;IAEN,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,kBAAkB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;YACzD,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACxD,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK;QACL,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;QACd,OAAO;QACP,MAAM;QACN,uBAAuB,EAAE,mCAAmC,CAAC,KAAK,CAAC;QACnE,uBAAuB,EAAE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB;KAC5E,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAKvC;IACC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC;IACzD,MAAM,GAAG,GAAG,oBAAoB,CAAC;QAC/B,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,uBAAuB;QACxD,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,yBAAyB;QAC1D,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtD,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"noaaSeaLevel.js","sourceRoot":"","sources":["../src/noaaSeaLevel.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export declare const NWS_POINT_FORECAST_SOURCE_ID = "nws-point-forecast";
|
|
|
8
8
|
* operator, so the adapter sends a descriptive name and a contact address on
|
|
9
9
|
* every call. A real deployment should override the contact with its own.
|
|
10
10
|
*/
|
|
11
|
-
export declare const NWS_USER_AGENT = "usa-open-data-connectors
|
|
11
|
+
export declare const NWS_USER_AGENT = "usa-open-data-connectors (https://github.com/olitreadwell/usa-open-data-connectors)";
|
|
12
12
|
/**
|
|
13
13
|
* One forecast grid point, the service's lookup for a latitude and longitude.
|
|
14
14
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nwsPointForecast.d.ts","sourceRoot":"","sources":["../src/nwsPointForecast.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"nwsPointForecast.d.ts","sourceRoot":"","sources":["../src/nwsPointForecast.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,yEAAyE;AACzE,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AAEjE;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,wFAC4D,CAAC;AAExF;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sDAAsD;IACtD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,qDAAqD;AACrD,eAAO,MAAM,YAAY,4BAA4B,CAAC;AAEtD,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,YAAY,CAAC;AAEjD,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAmC9C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,GAAE,MAA6B,EACvC,SAAS,GAAE,MAA8B,GACxC,MAAM,CAER;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAsD/E;AAED;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,CAAC,EAAE;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACrC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAW5B;AAED,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,EAAE,aAAa,CAAC,gBAAgB,CAWnE,CAAC"}
|
package/dist/nwsPointForecast.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { UsSourceParseError } from './errors.js';
|
|
3
|
+
import { httpGet } from './http.js';
|
|
3
4
|
import { readFixtureJson } from './fixtures.js';
|
|
4
5
|
/** Adapter id for the National Weather Service point-forecast source. */
|
|
5
6
|
export const NWS_POINT_FORECAST_SOURCE_ID = 'nws-point-forecast';
|
|
@@ -10,7 +11,7 @@ export const NWS_POINT_FORECAST_SOURCE_ID = 'nws-point-forecast';
|
|
|
10
11
|
* operator, so the adapter sends a descriptive name and a contact address on
|
|
11
12
|
* every call. A real deployment should override the contact with its own.
|
|
12
13
|
*/
|
|
13
|
-
export const NWS_USER_AGENT = 'usa-open-data-connectors
|
|
14
|
+
export const NWS_USER_AGENT = 'usa-open-data-connectors (https://github.com/olitreadwell/usa-open-data-connectors)';
|
|
14
15
|
/** Base URL for the National Weather Service API. */
|
|
15
16
|
export const NWS_API_BASE = 'https://api.weather.gov';
|
|
16
17
|
/** Path of the point lookup that resolves a coordinate to a forecast grid. */
|
|
@@ -127,10 +128,10 @@ export function parseNwsPointForecastPayload(payload) {
|
|
|
127
128
|
export async function fetchNwsPointForecast(options) {
|
|
128
129
|
const fetchImpl = options?.fetchImpl ?? globalThis.fetch;
|
|
129
130
|
const url = buildNwsPointUrl(options?.latitude ?? NWS_DEFAULT_LATITUDE, options?.longitude ?? NWS_DEFAULT_LONGITUDE);
|
|
130
|
-
const response = await
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
131
|
+
const response = await httpGet(NWS_POINT_FORECAST_SOURCE_ID, url, {
|
|
132
|
+
fetchImpl,
|
|
133
|
+
headers: { 'User-Agent': NWS_USER_AGENT },
|
|
134
|
+
});
|
|
134
135
|
return parseNwsPointForecastPayload(await response.json());
|
|
135
136
|
}
|
|
136
137
|
/** National Weather Service forecast grid point for a coordinate, keyless. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nwsPointForecast.js","sourceRoot":"","sources":["../src/nwsPointForecast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"nwsPointForecast.js","sourceRoot":"","sources":["../src/nwsPointForecast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { UsDataAdapter } from './types.js';
|
|
2
|
+
/** Adapter id for the nyc-open-data-catalogue source. */
|
|
3
|
+
export declare const NYC_OPEN_DATA_CATALOGUE_SOURCE_ID = "nyc-open-data-catalogue";
|
|
4
|
+
/** One catalogue entry from the NYC Socrata discovery API. */
|
|
5
|
+
export interface NycOpenDataCatalogueEntry {
|
|
6
|
+
/** Four-by-four Socrata dataset id, e.g. "irx2-vgm4". */
|
|
7
|
+
id: string;
|
|
8
|
+
/** Human-readable title of the dataset, map, chart, story, or file. */
|
|
9
|
+
name: string;
|
|
10
|
+
/** What the entry is: "dataset", "map", "chart", "story", or "file". */
|
|
11
|
+
assetType: string;
|
|
12
|
+
/** City topic the entry belongs to, or null when the catalogue lists none. */
|
|
13
|
+
category: string | null;
|
|
14
|
+
/** How the entry is rendered, e.g. "tabular" or "map". */
|
|
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 city topic and how many catalogue entries carry it. */
|
|
26
|
+
export interface NycOpenDataCategoryCount {
|
|
27
|
+
category: string;
|
|
28
|
+
entryCount: number;
|
|
29
|
+
}
|
|
30
|
+
/** One page of the New York City catalogue, folded for a story. */
|
|
31
|
+
export interface NycOpenDataCatalogue {
|
|
32
|
+
/** One entry per catalogue item in the page. */
|
|
33
|
+
entries: NycOpenDataCatalogueEntry[];
|
|
34
|
+
entryCount: number;
|
|
35
|
+
/** Entries whose asset type is "dataset". */
|
|
36
|
+
datasetCount: number;
|
|
37
|
+
/** Entries whose asset type is "map". */
|
|
38
|
+
mapCount: number;
|
|
39
|
+
/** Entry with the latest creation time. Ties go to the earlier list entry. */
|
|
40
|
+
newestEntry: NycOpenDataCatalogueEntry;
|
|
41
|
+
/** Entry the page has been viewed the most. Ties go to the earlier entry. */
|
|
42
|
+
mostViewedEntry: NycOpenDataCatalogueEntry;
|
|
43
|
+
/** Entry the page has been downloaded the most. Ties go to the earlier entry. */
|
|
44
|
+
mostDownloadedEntry: NycOpenDataCatalogueEntry;
|
|
45
|
+
/** Views across every entry in the page. */
|
|
46
|
+
totalViewCount: number;
|
|
47
|
+
/** Downloads across every entry in the page. */
|
|
48
|
+
totalDownloadCount: number;
|
|
49
|
+
/**
|
|
50
|
+
* Categories in the page, most entries first, ties broken by name. An entry
|
|
51
|
+
* the catalogue lists without a category is counted under "Uncategorised".
|
|
52
|
+
*/
|
|
53
|
+
categories: NycOpenDataCategoryCount[];
|
|
54
|
+
}
|
|
55
|
+
/** Base URL for the New York City Socrata catalogue. */
|
|
56
|
+
export declare const NYC_OPEN_DATA_API_BASE = "https://data.cityofnewyork.us/api/views.json";
|
|
57
|
+
/** How many catalogue entries one request reads. */
|
|
58
|
+
export declare const NYC_OPEN_DATA_CATALOGUE_LIMIT = 50;
|
|
59
|
+
/**
|
|
60
|
+
* Builds the request URL for one page of the New York City catalogue.
|
|
61
|
+
*
|
|
62
|
+
* The endpoint is keyless. The service answers the whole catalogue by default,
|
|
63
|
+
* so the adapter asks for a short page.
|
|
64
|
+
*
|
|
65
|
+
* @param options - an optional entry cap
|
|
66
|
+
* @returns the full request URL
|
|
67
|
+
*/
|
|
68
|
+
export declare function buildNycOpenDataCatalogueUrl(options?: {
|
|
69
|
+
limit?: number;
|
|
70
|
+
}): string;
|
|
71
|
+
/**
|
|
72
|
+
* Parses one page of the catalogue into the entries and the city-topic counts.
|
|
73
|
+
*
|
|
74
|
+
* An entry without an id, a name, or a creation time is a changed shape and
|
|
75
|
+
* stops the parse. An empty page also stops the parse, because a catalogue
|
|
76
|
+
* with no entries is not a usable answer.
|
|
77
|
+
*
|
|
78
|
+
* @param payload - the JSON body from the NYC Socrata discovery API
|
|
79
|
+
* @returns the entries in the page, the counts, the totals, and the leaders
|
|
80
|
+
*/
|
|
81
|
+
export declare function parseNycOpenDataCataloguePayload(payload: unknown): NycOpenDataCatalogue;
|
|
82
|
+
/**
|
|
83
|
+
* Reads one page of the New York City catalogue.
|
|
84
|
+
*
|
|
85
|
+
* One keyless request covers the page and reports what the city portal holds,
|
|
86
|
+
* without reading any dataset's rows.
|
|
87
|
+
*
|
|
88
|
+
* @param options - an optional entry cap and fetch stub
|
|
89
|
+
* @returns the entries in the page, the counts, the totals, and the leaders
|
|
90
|
+
*/
|
|
91
|
+
export declare function fetchNycOpenDataCatalogue(options?: {
|
|
92
|
+
limit?: number;
|
|
93
|
+
fetchImpl?: typeof globalThis.fetch;
|
|
94
|
+
}): Promise<NycOpenDataCatalogue>;
|
|
95
|
+
/** New York City Open Data catalogue of datasets and maps, keyless. */
|
|
96
|
+
export declare const nycOpenDataCatalogueAdapter: UsDataAdapter<NycOpenDataCatalogue>;
|
|
97
|
+
//# sourceMappingURL=nycOpenDataCatalogue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nycOpenDataCatalogue.d.ts","sourceRoot":"","sources":["../src/nycOpenDataCatalogue.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,yDAAyD;AACzD,eAAO,MAAM,iCAAiC,4BAA4B,CAAC;AAE3E,8DAA8D;AAC9D,MAAM,WAAW,yBAAyB;IACxC,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,0DAA0D;IAC1D,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,8DAA8D;AAC9D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,WAAW,EAAE,yBAAyB,CAAC;IACvC,6EAA6E;IAC7E,eAAe,EAAE,yBAAyB,CAAC;IAC3C,iFAAiF;IACjF,mBAAmB,EAAE,yBAAyB,CAAC;IAC/C,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,UAAU,EAAE,wBAAwB,EAAE,CAAC;CACxC;AAED,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,iDAAiD,CAAC;AAErF,oDAAoD;AACpD,eAAO,MAAM,6BAA6B,KAAK,CAAC;AA6EhD;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAKjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,CA4CvF;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,CAAC,EAAE;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACrC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAOhC;AAED,uEAAuE;AACvE,eAAO,MAAM,2BAA2B,EAAE,aAAa,CAAC,oBAAoB,CAa3E,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
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 nyc-open-data-catalogue source. */
|
|
6
|
+
export const NYC_OPEN_DATA_CATALOGUE_SOURCE_ID = 'nyc-open-data-catalogue';
|
|
7
|
+
/** Base URL for the New York City Socrata catalogue. */
|
|
8
|
+
export const NYC_OPEN_DATA_API_BASE = 'https://data.cityofnewyork.us/api/views.json';
|
|
9
|
+
/** How many catalogue entries one request reads. */
|
|
10
|
+
export const NYC_OPEN_DATA_CATALOGUE_LIMIT = 50;
|
|
11
|
+
/** Committed snapshot, so a build works when the NYC host is unreachable. */
|
|
12
|
+
const NYC_OPEN_DATA_FIXTURE_FILENAME = 'nyc-open-data-catalogue-2026-10-19.json';
|
|
13
|
+
/** Category bucket the adapter uses for an entry the catalogue lists without one. */
|
|
14
|
+
const NYC_OPEN_DATA_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 NYC_OPEN_DATA_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 NYC_OPEN_DATA_PAYLOAD_SCHEMA = z.array(NYC_OPEN_DATA_ENTRY_SCHEMA);
|
|
29
|
+
/** Counts entries per category, most entries first, ties by name. */
|
|
30
|
+
function countNycOpenDataCategories(entries) {
|
|
31
|
+
const counts = new Map();
|
|
32
|
+
for (const entry of entries) {
|
|
33
|
+
const category = entry.category ?? NYC_OPEN_DATA_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 newestNycOpenDataEntry(entries) {
|
|
42
|
+
const first = entries[0];
|
|
43
|
+
if (first === undefined) {
|
|
44
|
+
throw new UsSourceParseError(NYC_OPEN_DATA_CATALOGUE_SOURCE_ID, 'No entries to summarise');
|
|
45
|
+
}
|
|
46
|
+
return entries.reduce((best, entry) => (entry.createdAtEpochSeconds > best.createdAtEpochSeconds ? entry : best), first);
|
|
47
|
+
}
|
|
48
|
+
/** Picks the entry with the highest view count, ties to the earlier entry. */
|
|
49
|
+
function mostViewedNycOpenDataEntry(entries) {
|
|
50
|
+
const first = entries[0];
|
|
51
|
+
if (first === undefined) {
|
|
52
|
+
throw new UsSourceParseError(NYC_OPEN_DATA_CATALOGUE_SOURCE_ID, 'No entries to summarise');
|
|
53
|
+
}
|
|
54
|
+
return entries.reduce((best, entry) => (entry.viewCount > best.viewCount ? entry : best), first);
|
|
55
|
+
}
|
|
56
|
+
/** Picks the entry with the highest download count, ties to the earlier entry. */
|
|
57
|
+
function mostDownloadedNycOpenDataEntry(entries) {
|
|
58
|
+
const first = entries[0];
|
|
59
|
+
if (first === undefined) {
|
|
60
|
+
throw new UsSourceParseError(NYC_OPEN_DATA_CATALOGUE_SOURCE_ID, 'No entries to summarise');
|
|
61
|
+
}
|
|
62
|
+
return entries.reduce((best, entry) => (entry.downloadCount > best.downloadCount ? entry : best), first);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Builds the request URL for one page of the New York City catalogue.
|
|
66
|
+
*
|
|
67
|
+
* The endpoint is keyless. The service answers the whole catalogue by default,
|
|
68
|
+
* so the adapter asks for a short page.
|
|
69
|
+
*
|
|
70
|
+
* @param options - an optional entry cap
|
|
71
|
+
* @returns the full request URL
|
|
72
|
+
*/
|
|
73
|
+
export function buildNycOpenDataCatalogueUrl(options) {
|
|
74
|
+
const params = new URLSearchParams({
|
|
75
|
+
limit: String(options?.limit ?? NYC_OPEN_DATA_CATALOGUE_LIMIT),
|
|
76
|
+
});
|
|
77
|
+
return `${NYC_OPEN_DATA_API_BASE}?${params.toString()}`;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Parses one page of the catalogue into the entries and the city-topic counts.
|
|
81
|
+
*
|
|
82
|
+
* An entry without an id, a name, or a creation time is a changed shape and
|
|
83
|
+
* stops the parse. An empty page also stops the parse, because a catalogue
|
|
84
|
+
* with no entries is not a usable answer.
|
|
85
|
+
*
|
|
86
|
+
* @param payload - the JSON body from the NYC Socrata discovery API
|
|
87
|
+
* @returns the entries in the page, the counts, the totals, and the leaders
|
|
88
|
+
*/
|
|
89
|
+
export function parseNycOpenDataCataloguePayload(payload) {
|
|
90
|
+
const parsed = NYC_OPEN_DATA_PAYLOAD_SCHEMA.safeParse(payload);
|
|
91
|
+
if (!parsed.success) {
|
|
92
|
+
throw new UsSourceParseError(NYC_OPEN_DATA_CATALOGUE_SOURCE_ID, parsed.error.message);
|
|
93
|
+
}
|
|
94
|
+
if (parsed.data.length === 0) {
|
|
95
|
+
throw new UsSourceParseError(NYC_OPEN_DATA_CATALOGUE_SOURCE_ID, 'The response carried no entries');
|
|
96
|
+
}
|
|
97
|
+
const entries = parsed.data.map((row) => {
|
|
98
|
+
if (row.id === undefined || row.name === undefined || row.createdAt === undefined) {
|
|
99
|
+
throw new UsSourceParseError(NYC_OPEN_DATA_CATALOGUE_SOURCE_ID, 'A catalogue entry arrived without its id, name, or creation time');
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
id: row.id,
|
|
103
|
+
name: row.name,
|
|
104
|
+
assetType: row.assetType ?? '',
|
|
105
|
+
category: row.category ?? null,
|
|
106
|
+
viewType: row.viewType ?? '',
|
|
107
|
+
createdAtEpochSeconds: row.createdAt,
|
|
108
|
+
viewLastModifiedEpochSeconds: row.viewLastModified ?? row.createdAt,
|
|
109
|
+
viewCount: row.viewCount ?? 0,
|
|
110
|
+
downloadCount: row.downloadCount ?? 0,
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
entries,
|
|
115
|
+
entryCount: entries.length,
|
|
116
|
+
datasetCount: entries.filter((entry) => entry.assetType === 'dataset').length,
|
|
117
|
+
mapCount: entries.filter((entry) => entry.assetType === 'map').length,
|
|
118
|
+
newestEntry: newestNycOpenDataEntry(entries),
|
|
119
|
+
mostViewedEntry: mostViewedNycOpenDataEntry(entries),
|
|
120
|
+
mostDownloadedEntry: mostDownloadedNycOpenDataEntry(entries),
|
|
121
|
+
totalViewCount: entries.reduce((total, entry) => total + entry.viewCount, 0),
|
|
122
|
+
totalDownloadCount: entries.reduce((total, entry) => total + entry.downloadCount, 0),
|
|
123
|
+
categories: countNycOpenDataCategories(entries),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Reads one page of the New York City catalogue.
|
|
128
|
+
*
|
|
129
|
+
* One keyless request covers the page and reports what the city portal holds,
|
|
130
|
+
* without reading any dataset's rows.
|
|
131
|
+
*
|
|
132
|
+
* @param options - an optional entry cap and fetch stub
|
|
133
|
+
* @returns the entries in the page, the counts, the totals, and the leaders
|
|
134
|
+
*/
|
|
135
|
+
export async function fetchNycOpenDataCatalogue(options) {
|
|
136
|
+
const fetchImpl = options?.fetchImpl ?? globalThis.fetch;
|
|
137
|
+
const url = buildNycOpenDataCatalogueUrl(options?.limit === undefined ? {} : { limit: options.limit });
|
|
138
|
+
const response = await httpGet(NYC_OPEN_DATA_CATALOGUE_SOURCE_ID, url, { fetchImpl });
|
|
139
|
+
return parseNycOpenDataCataloguePayload(await response.json());
|
|
140
|
+
}
|
|
141
|
+
/** New York City Open Data catalogue of datasets and maps, keyless. */
|
|
142
|
+
export const nycOpenDataCatalogueAdapter = {
|
|
143
|
+
id: NYC_OPEN_DATA_CATALOGUE_SOURCE_ID,
|
|
144
|
+
name: 'NYC Open Data catalogue',
|
|
145
|
+
auth: 'none',
|
|
146
|
+
description: 'The New York City open data catalogue on Socrata, one row per published dataset or map, with its city topic, view count, and download count.',
|
|
147
|
+
fetchLive: async (options) => fetchNycOpenDataCatalogue(options?.fetchImpl === undefined ? {} : { fetchImpl: options.fetchImpl }),
|
|
148
|
+
parse: (payload) => parseNycOpenDataCataloguePayload(payload),
|
|
149
|
+
loadFixture: () => parseNycOpenDataCataloguePayload(readFixtureJson(NYC_OPEN_DATA_FIXTURE_FILENAME)),
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=nycOpenDataCatalogue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nycOpenDataCatalogue.js","sourceRoot":"","sources":["../src/nycOpenDataCatalogue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openFdaFoodRecalls.d.ts","sourceRoot":"","sources":["../src/openFdaFoodRecalls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openFdaFoodRecalls.d.ts","sourceRoot":"","sources":["../src/openFdaFoodRecalls.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
/** Source name used in every error this adapter raises. */
|
|
5
6
|
const OPENFDA_SOURCE_NAME = 'openfda-food-recalls';
|
|
@@ -243,10 +244,7 @@ export function buildOpenFdaFoodRecallSummary(snapshot) {
|
|
|
243
244
|
}
|
|
244
245
|
/** Reads one URL as JSON, refusing a response the host did not deliver. */
|
|
245
246
|
async function fetchOpenFdaJson(url, fetchImpl) {
|
|
246
|
-
const response = await
|
|
247
|
-
if (!response.ok) {
|
|
248
|
-
throw new UsSourceApiError(OPENFDA_SOURCE_NAME, `HTTP ${response.status} reading ${url}`);
|
|
249
|
-
}
|
|
247
|
+
const response = await httpGet(OPENFDA_SOURCE_NAME, url, { fetchImpl });
|
|
250
248
|
return response.json();
|
|
251
249
|
}
|
|
252
250
|
/**
|