@uk-open-data-connectors/uk-sources 0.1.1 → 0.1.3

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 (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -213
  3. package/dist/ancientWoodland.d.ts.map +1 -1
  4. package/dist/ancientWoodland.js +3 -5
  5. package/dist/ancientWoodland.js.map +1 -1
  6. package/dist/apiKey.d.ts +11 -0
  7. package/dist/apiKey.d.ts.map +1 -0
  8. package/dist/apiKey.js +17 -0
  9. package/dist/apiKey.js.map +1 -0
  10. package/dist/bankRate.d.ts.map +1 -1
  11. package/dist/bankRate.js +3 -5
  12. package/dist/bankRate.js.map +1 -1
  13. package/dist/carbonIntensity.d.ts +4 -1
  14. package/dist/carbonIntensity.d.ts.map +1 -1
  15. package/dist/carbonIntensity.js +6 -2
  16. package/dist/carbonIntensity.js.map +1 -1
  17. package/dist/errors.d.ts +12 -2
  18. package/dist/errors.d.ts.map +1 -1
  19. package/dist/errors.js +8 -4
  20. package/dist/errors.js.map +1 -1
  21. package/dist/exploreEducationStatistics.d.ts.map +1 -1
  22. package/dist/exploreEducationStatistics.js +3 -5
  23. package/dist/exploreEducationStatistics.js.map +1 -1
  24. package/dist/findATender.d.ts.map +1 -1
  25. package/dist/findATender.js +3 -5
  26. package/dist/findATender.js.map +1 -1
  27. package/dist/fingertipsIndicators.d.ts.map +1 -1
  28. package/dist/fingertipsIndicators.js +3 -5
  29. package/dist/fingertipsIndicators.js.map +1 -1
  30. package/dist/floodMonitoring.d.ts.map +1 -1
  31. package/dist/floodMonitoring.js +4 -9
  32. package/dist/floodMonitoring.js.map +1 -1
  33. package/dist/foodHygiene.d.ts.map +1 -1
  34. package/dist/foodHygiene.js +4 -5
  35. package/dist/foodHygiene.js.map +1 -1
  36. package/dist/http.d.ts +34 -0
  37. package/dist/http.d.ts.map +1 -0
  38. package/dist/http.js +83 -0
  39. package/dist/http.js.map +1 -0
  40. package/dist/index.d.ts +16 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +8 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/londonDatastore.d.ts.map +1 -1
  45. package/dist/londonDatastore.js +5 -5
  46. package/dist/londonDatastore.js.map +1 -1
  47. package/dist/nesoGenerationMix.d.ts +128 -0
  48. package/dist/nesoGenerationMix.d.ts.map +1 -0
  49. package/dist/nesoGenerationMix.js +241 -0
  50. package/dist/nesoGenerationMix.js.map +1 -0
  51. package/dist/nhsbsaCkan.d.ts.map +1 -1
  52. package/dist/nhsbsaCkan.js +3 -5
  53. package/dist/nhsbsaCkan.js.map +1 -1
  54. package/dist/nomis.d.ts.map +1 -1
  55. package/dist/nomis.js +3 -5
  56. package/dist/nomis.js.map +1 -1
  57. package/dist/onsDatasets.d.ts.map +1 -1
  58. package/dist/onsDatasets.js +3 -5
  59. package/dist/onsDatasets.js.map +1 -1
  60. package/dist/parliamentSeats.d.ts.map +1 -1
  61. package/dist/parliamentSeats.js +6 -5
  62. package/dist/parliamentSeats.js.map +1 -1
  63. package/dist/planningDatasets.d.ts.map +1 -1
  64. package/dist/planningDatasets.js +3 -5
  65. package/dist/planningDatasets.js.map +1 -1
  66. package/dist/policeCrimes.d.ts.map +1 -1
  67. package/dist/policeCrimes.js +5 -8
  68. package/dist/policeCrimes.js.map +1 -1
  69. package/dist/postcodeLookup.d.ts.map +1 -1
  70. package/dist/postcodeLookup.js +5 -5
  71. package/dist/postcodeLookup.js.map +1 -1
  72. package/dist/publicHealthScotland.d.ts.map +1 -1
  73. package/dist/publicHealthScotland.js +3 -5
  74. package/dist/publicHealthScotland.js.map +1 -1
  75. package/dist/registry.d.ts.map +1 -1
  76. package/dist/registry.js +2 -0
  77. package/dist/registry.js.map +1 -1
  78. package/dist/tflBikePoints.d.ts.map +1 -1
  79. package/dist/tflBikePoints.js +6 -6
  80. package/dist/tflBikePoints.js.map +1 -1
  81. package/dist/tflLineStatus.d.ts.map +1 -1
  82. package/dist/tflLineStatus.js +3 -5
  83. package/dist/tflLineStatus.js.map +1 -1
  84. package/dist/tnaDiscovery.d.ts.map +1 -1
  85. package/dist/tnaDiscovery.js +4 -5
  86. package/dist/tnaDiscovery.js.map +1 -1
  87. package/dist/ukhsaDashboard.d.ts.map +1 -1
  88. package/dist/ukhsaDashboard.js +3 -5
  89. package/dist/ukhsaDashboard.js.map +1 -1
  90. package/package.json +5 -4
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Oli Treadwell
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,227 +1,124 @@
1
1
  # @uk-open-data-connectors/uk-sources
2
2
 
3
- Uniform TypeScript adapters for UK public data sources. Every adapter has the
4
- same shape: a live fetch, a strict parse, and a committed fixture fallback so
5
- builds work offline.
3
+ Uniform TypeScript adapters for 22 UK public data sources, for JavaScript and TypeScript developers.
6
4
 
7
- ## Adapters
8
-
9
- | id | Source | Auth | What it does |
10
- | -------------------------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
11
- | `flood-stations` | Environment Agency flood-monitoring | none | Monitoring stations with river and catchment |
12
- | `flood-readings` | Environment Agency flood-monitoring | none | Recent water levels for one station, newest first |
13
- | `ons-datasets` | ONS beta API dataset catalogue | none | Every dataset the ONS lists, with its state and stamp |
14
- | `food-hygiene-authorities` | Food Standards Agency food hygiene | none | Every local authority register, with its establishment count |
15
- | `tfl-bike-points` | Transport for London cycle hire | none | Every Santander Cycles docking station, with docking points and docked bikes |
16
- | `planning-datasets` | Planning Data platform (MHCLG) | none | Every planning dataset, with the records published behind it |
17
- | `ancient-woodland` | Natural England ancient woodland | none | Ancient woodland polygons for England, counted by type and size |
18
- | `bank-rate` | Bank of England Bank Rate | none | The daily official Bank Rate, one reading per business day since 1975 |
19
- | `police-crimes` | Home Office police.uk | none | Street-level crime within a mile of a point, counted by crime type and outcome |
20
- | `carbon-intensity` | National Energy System Operator | none | Half-hourly carbon intensity for Great Britain, with the window's cleanest and dirtiest half hours |
21
- | `parliament-seats` | UK Parliament Members API | none | Seats each party holds in the Commons, with the members counted behind them |
22
- | `postcode-lookup` | postcodes.io (ONS and OS data) | none | One postcode's country, region, wards, and coordinates |
23
- | `explore-education-statistics` | Department for Education | none | The most recent statistics releases, with their publish stamps |
24
- | `london-datastore` | Greater London Authority | none | Every dataset on the London Datastore |
25
- | `tna-discovery` | The National Archives | none | Catalogue records matching a search, with the total hit count |
26
- | `ukhsa-dashboard` | UK Health Security Agency | none | Metric points for new HIV diagnoses in England |
27
- | `nomis` | ONS Nomis | none | SDMX dataset definitions, with maintenance status and keywords |
28
- | `fingertips-indicators` | Office for Health Improvement and Disparities | none | Public health indicator metadata, with unit, type, and data source |
29
- | `find-a-tender` | Cabinet Office | none | Recent procurement notices as OCDS 1.1 releases |
30
- | `tfl-line-status` | Transport for London | none | Live status of every Tube line, with disruption reasons |
31
- | `public-health-scotland` | Public Health Scotland | none | Every dataset on the Public Health Scotland CKAN portal |
32
- | `nhsbsa-ckan` | NHS Business Services Authority | none | Every dataset on the NHSBSA CKAN portal |
33
-
34
- The flood-monitoring adapters use `environment.data.gov.uk` under the Open
35
- Government Licence v3:
36
- <https://environment.data.gov.uk/flood-monitoring/doc/reference>
37
-
38
- The ONS adapter uses the beta API behind the ONS website rebuild,
39
- <https://api.beta.ons.gov.uk/v1/datasets>, also keyless and under the Open
40
- Government Licence v3.
41
-
42
- The food hygiene adapter uses the FSA Food Hygiene Rating Scheme API,
43
- <https://api.ratings.food.gov.uk/Authorities/basic>, also keyless and under the
44
- Open Government Licence v3. It answers only with the version header the FSA
45
- asks for, `x-api-version: 2`; without it the endpoint returns HTTP 404.
46
-
47
- The Planning Data platform adapter uses the dataset catalogue behind
48
- <https://www.planning.data.gov.uk/dataset>, <https://www.planning.data.gov.uk/dataset.json>,
49
- which answers without a key under the Open Government Licence v3. The file
50
- lists datasets alongside the platform's pipeline configuration and provenance
51
- tables, so the adapter keeps the entries whose `realm` is `dataset`.
52
-
53
- The ancient woodland adapter uses Natural England's Ancient Woodland (England)
54
- layer on the Defra ArcGIS estate,
55
- <https://services.arcgis.com/JJzESW51TqeY9uat/arcgis/rest/services/Ancient_Woodland_England/FeatureServer/0>,
56
- which answers without a key under the Open Government Licence v3. The layer
57
- carries more than fifty thousand polygons, past ArcGIS's page size, so the
58
- adapter reads the counts from the service's own statistics queries instead of
59
- downloading the features.
60
-
61
- The Bank Rate adapter uses the Bank of England's Interactive Statistical
62
- Database (IADB),
63
- <https://www.bankofengland.co.uk/boeapps/database/_iadb-fromshowcolumns.asp>,
64
- which answers without a key. The daily series, `IUDBEDR`, starts on 2 January
65
- 1975; asking for an earlier start returns the database's error page instead of
66
- a CSV, so the adapter starts there. The Bank's published terms place
67
- reproduction of Database data under the Open Government Licence v3:
68
- <https://www.bankofengland.co.uk/legal>.
69
-
70
- The recorded crime adapter uses the Home Office police.uk API,
71
- <https://data.police.uk/api/crimes-street/all-crime>, which answers without a
72
- key under the Open Government Licence v3. It holds the last 36 months of
73
- street-level crime from the 44 forces of England, Wales and Northern Ireland,
74
- so nothing here covers Scotland. A call takes a point and returns everything
75
- within a mile of it, which is why the adapter counts around one point rather
76
- than a boundary, and it asks for one month at a time to stay inside the API's
77
- limit of 15 requests a second.
78
-
79
- The docking station adapter uses TfL's Unified API,
80
- <https://api.tfl.gov.uk/BikePoint>, which answers without a key. TfL asks for
81
- an app key above the free rate limit, so `fetchTflBikePoints` takes an optional
82
- key and sends it as the `app_key` query parameter. The data is published as TfL
83
- Open Data: <https://tfl.gov.uk/info-for/open-data-users/>.
84
-
85
- The carbon intensity adapter uses the National Energy System Operator's Carbon
86
- Intensity API, <https://api.carbonintensity.org.uk/intensity>, which answers
87
- without a key. It is the official half-hourly series for Great Britain, with a
88
- reading and a grade for every half hour, and the API's own terms place the data
89
- under the Creative Commons Attribution 4.0 licence:
90
- <https://terms.carbonintensity.org.uk/>. The API refuses a range longer than 31
91
- days, so the adapter reads whole days and asks for a window that ends at the
92
- start of today, which keeps every reading in it a settled one.
93
-
94
- The Parliament seat adapter uses the UK Parliament Members API,
95
- <https://members-api.parliament.uk/api/Parties/StateOfTheParties>, which
96
- answers without a key. It is the current state of the parties in each house,
97
- with the seats a party holds and the members counted behind them, published
98
- under the Open Parliament Licence v3.0:
99
- <https://www.parliament.uk/site-information/copyright-parliament/open-parliament-licence/>.
100
- The call needs a house and a date, so the adapter asks for the caller's own
101
- date rather than a fixed one.
102
-
103
- Eleven more keyless adapters landed on 2026-10-05: `postcode-lookup` reads
104
- one postcode from postcodes.io, `explore-education-statistics` reads the
105
- Department for Education's most recent releases, `london-datastore` and
106
- `public-health-scotland` and `nhsbsa-ckan` read CKAN catalogues, `tna-discovery`
107
- searches The National Archives catalogue, `ukhsa-dashboard` reads UKHSA metric
108
- points, `nomis` reads the ONS Nomis SDMX catalogue, `fingertips-indicators`
109
- reads OHID indicator metadata, `find-a-tender` reads OCDS procurement notices,
110
- and `tfl-line-status` reads live Tube status. Endpoints, exact curl commands,
111
- capture date, and licences are in `docs/CONNECTOR_DISCOVERY.md`.
112
-
113
- Note on sources that look obvious but are not usable: `api.ons.gov.uk` was
114
- retired on 2024-11-25 and now answers every request with a decommission notice.
115
- The beta API at `api.beta.ons.gov.uk/v1` replaced it for dataset metadata,
116
- editions, versions, and observations.
117
-
118
- ## Usage
119
-
120
- ```ts
121
- import { fetchFloodStationReadings, summarizeFloodReadings } from '@uk-open-data-connectors/uk-sources';
122
- import { fetchOnsDatasets, summarizeOnsDatasets } from '@uk-open-data-connectors/uk-sources';
123
- import { fetchFoodHygieneAuthorities, summarizeFoodHygieneAuthorities } from '@uk-open-data-connectors/uk-sources';
124
- import { fetchTflBikePoints, summarizeTflBikePoints } from '@uk-open-data-connectors/uk-sources';
125
- import { fetchPlanningDatasets, summarizePlanningDatasets } from '@uk-open-data-connectors/uk-sources';
126
- import { fetchAncientWoodlandProfile } from '@uk-open-data-connectors/uk-sources';
127
- import { fetchBankRateObservations, summarizeBankRateSeries } from '@uk-open-data-connectors/uk-sources';
128
- import { fetchPoliceCrimeSummary } from '@uk-open-data-connectors/uk-sources';
129
- import { fetchCarbonIntensityWindow } from '@uk-open-data-connectors/uk-sources';
130
- import { fetchParliamentSeats } from '@uk-open-data-connectors/uk-sources';
131
-
132
- const readings = await fetchFloodStationReadings('1029TH', { limit: 96 });
133
- const summary = summarizeFloodReadings(readings);
134
- console.log(summary.latest?.value, summary.trend);
135
-
136
- const catalogue = summarizeOnsDatasets(await fetchOnsDatasets());
137
- console.log(catalogue.datasetCount, catalogue.yearCounts);
138
-
139
- const registers = summarizeFoodHygieneAuthorities(await fetchFoodHygieneAuthorities());
140
- console.log(registers.authorityCount, registers.establishmentCount);
141
-
142
- const docks = summarizeTflBikePoints(await fetchTflBikePoints());
143
- console.log(docks.stationCount, docks.dockCount, docks.largestStations[0]?.name);
5
+ ## What this package does
144
6
 
145
- const planning = summarizePlanningDatasets(await fetchPlanningDatasets());
146
- console.log(planning.datasetCount, planning.entityCount, planning.emptyDatasetCount);
7
+ - Ships one adapter for each of 22 UK public data sources.
8
+ - Gives every adapter the same shape: a live fetch, a strict parse, and a committed fixture fallback.
9
+ - Lets you build and test offline, because each adapter falls back to a fixture when the live call fails.
10
+ - Exposes a registry (`UK_DATA_SOURCES`) and probe helpers (`probeUkDataSource`, `probeAllUkDataSources`).
11
+ - Needs no API keys, because every UK source is keyless.
147
12
 
148
- const woodland = await fetchAncientWoodlandProfile();
149
- console.log(woodland.recordCount, woodland.totalHectares, woodland.sizeBands[0]?.recordCount);
13
+ ## Install
150
14
 
151
- const intensity = await fetchCarbonIntensityWindow();
152
- console.log(intensity.periodCount, intensity.averageIntensity, intensity.lowestPeriod.intensity);
153
-
154
- const seats = await fetchParliamentSeats();
155
- console.log(seats.seatCount, seats.partyCount, seats.largestParty.party.name);
15
+ ```sh
16
+ npm install @uk-open-data-connectors/uk-sources
156
17
  ```
157
18
 
158
- ## UK Parliament seats
159
-
160
- `fetchParliamentSeats` reads the state of the parties in the House of Commons
161
- and returns the seat counts a page can print.
19
+ ## Quick start
162
20
 
163
21
  ```ts
164
- import { fetchParliamentSeats } from '@uk-open-data-connectors/uk-sources';
22
+ import { fetchFloodStationReadings, summarizeFloodReadings } from '@uk-open-data-connectors/uk-sources';
165
23
 
166
- const seats = await fetchParliamentSeats();
167
- // { seatCount: 650, partyCount: 18, majorityThreshold: 326, ... }
168
- console.log(seats.largestParty.party.name, seats.largestParty.seatCount);
24
+ const readings = await fetchFloodStationReadings('1029TH', { limit: 96 });
25
+ const summary = summarizeFloodReadings(readings);
26
+ console.log(summary.latest?.value, summary.trend);
169
27
  ```
170
28
 
171
- The payload is validated with this schema before anything is counted:
172
-
173
- ```ts
174
- const PARLIAMENT_PARTY_SCHEMA = z.object({
175
- id: z.number().int(),
176
- name: z.string().nullable(),
177
- abbreviation: z.string().nullable(),
178
- backgroundColour: z.string().nullable(),
179
- foregroundColour: z.string().nullable(),
180
- isIndependentParty: z.boolean(),
181
- });
182
-
183
- const PARLIAMENT_SEAT_COUNT_SCHEMA = z.object({
184
- male: z.number().int().nonnegative().nullable(),
185
- female: z.number().int().nonnegative().nullable(),
186
- nonBinary: z.number().int().nonnegative().nullable(),
187
- total: z.number().int(),
188
- party: PARLIAMENT_PARTY_SCHEMA.nullable(),
189
- });
190
-
191
- const PARLIAMENT_RESPONSE_SCHEMA = z.object({
192
- items: z.array(z.object({ value: PARLIAMENT_SEAT_COUNT_SCHEMA.nullable() })).nullable(),
193
- });
194
- ```
29
+ ## Adapters
195
30
 
196
- The public surface also carries `buildParliamentSeatsUrl(house, forDate)` for
197
- a specific house and date, `formatParliamentQueryDate(date)` for the
198
- `YYYY-MM-DD` the path takes, and `parseParliamentSeats(payload)` /
199
- `summarizeParliamentPartySeats(seats)` for parsing a payload or a list of
200
- parties on its own. `PARLIAMENT_COMMONS_HOUSE` is 1 and
201
- `PARLIAMENT_LORDS_HOUSE` is 2.
202
-
203
- Quirks worth knowing before you build on this:
204
-
205
- - A vacant seat appears as its own party, named `Vacant`, with one seat and
206
- no members behind it. The summary keeps it in `seats` and reports the gap
207
- per row as `unallocatedSeatCount`, so `male + female + nonBinary` can sit
208
- below `seatCount`.
209
- - `backgroundColour` and `foregroundColour` are null for a few parties,
210
- including the Speaker, so a chart needs its own fallback colour rather than
211
- reading the field straight.
212
- - The house is a path segment, not a query parameter: 1 is the Commons and 2
213
- is the Lords, and the same call returns peers for house 2.
214
- - The call can be slow. One request here timed out at 25 seconds and the next
215
- answered in two, so give it a generous timeout and keep a committed fixture
216
- fallback.
217
- - The date is part of the call, so a page that wants "today" has to send its
218
- own date; the response does not echo the date or the house back.
219
-
220
- ## Tests
221
-
222
- Unit tests run against the committed fixtures in `src/fixtures`, offline.
223
-
224
- ```bash
225
- npm run test --workspace @uk-open-data-connectors/uk-sources
226
- npm run test:smoke --workspace @uk-open-data-connectors/uk-sources # hits the live APIs
227
- ```
31
+ | id | Source | Auth | What it does |
32
+ | --- | ------ | ---- | ------------ |
33
+ | `flood-stations` | Environment Agency | none | Monitoring stations with their river, catchment, and measures. |
34
+ | `flood-readings` | Environment Agency | none | Recent water levels for one station, newest first. |
35
+ | `ons-datasets` | Office for National Statistics (ONS) | none | The dataset catalogue, with state and last-updated stamp. |
36
+ | `food-hygiene-authorities` | Food Standards Agency (FSA) | none | Every local authority food hygiene register, with its establishment count. |
37
+ | `tfl-bike-points` | Transport for London (TfL) | none | Every Santander Cycles docking station, with docking points and docked bikes. |
38
+ | `planning-datasets` | Planning Data platform (MHCLG) | none | Every dataset, with the records published behind it. |
39
+ | `ancient-woodland` | Natural England | none | Ancient woodland polygons for England, counted by type and size. |
40
+ | `bank-rate` | Bank of England | none | The daily official Bank Rate, one reading per business day since 1975. |
41
+ | `police-crimes` | Home Office police.uk | none | Street-level crime within a mile of a point, counted by type and outcome. |
42
+ | `carbon-intensity` | National Energy System Operator (NESO) | none | Half-hourly carbon intensity for Great Britain, with the cleanest and dirtiest half hours. |
43
+ | `parliament-seats` | UK Parliament | none | Seats each party holds in the Commons, with the members counted behind them. |
44
+ | `postcode-lookup` | postcodes.io (ONS and Ordnance Survey data) | none | One postcode's country, region, wards, and coordinates. |
45
+ | `explore-education-statistics` | Department for Education (DfE) | none | The most recent statistics releases, with their publish stamps. |
46
+ | `london-datastore` | Greater London Authority (GLA) | none | Every dataset on the London Datastore. |
47
+ | `tna-discovery` | The National Archives | none | Catalogue records matching a search, with the total hit count. |
48
+ | `ukhsa-dashboard` | UK Health Security Agency (UKHSA) | none | Annual counts of new HIV diagnoses in England. |
49
+ | `nomis` | ONS Nomis | none | SDMX dataset definitions, with maintenance status and keywords. |
50
+ | `fingertips-indicators` | Office for Health Improvement and Disparities (OHID) | none | Public health indicator metadata, with unit, type, and data source. |
51
+ | `find-a-tender` | Cabinet Office | none | Recent procurement notices as OCDS 1.1 releases. |
52
+ | `tfl-line-status` | Transport for London (TfL) | none | Live status of every Tube line, with disruption reasons. |
53
+ | `public-health-scotland` | Public Health Scotland | none | Every dataset on the Public Health Scotland CKAN portal. |
54
+ | `nhsbsa-ckan` | NHS Business Services Authority (NHSBSA) | none | Every dataset on the NHSBSA CKAN portal. |
55
+ | `neso-generation-mix` | National Energy System Operator (NESO) | none | Half-hourly Great Britain generation by fuel, with the cleanest and dirtiest half hours. |
56
+
57
+ The `auth` field is `none` for every adapter.
58
+
59
+ ## Notes and limits
60
+
61
+ - All 23 adapters are keyless. `fetchTflBikePoints` and `fetchTflLineStatuses` take an optional `apiKey`, sent as the `app_key` query parameter.
62
+ - Each adapter falls back to a committed fixture when the live call fails. A returned value can be stale. Call `probeUkDataSource` before you quote a number.
63
+ - The fixtures in `src/fixtures` are real snapshots from the live APIs. The newer files carry their capture date in the filename.
64
+ - Tests never reach the network unless `RUN_SMOKE=1` is set. The smoke test hits the real endpoints and needs no keys.
65
+ - `api.ons.gov.uk` was retired on 2024-11-25. Every path answers HTTP 200 with a plain-text decommission notice, so a naive health check reads it as healthy. The `ons-datasets` adapter uses `api.beta.ons.gov.uk/v1` instead.
66
+ - `data.gov.uk/api/3/action/...` redirects to an HTML landing page. The CKAN API is no longer at that path.
67
+ - The FSA endpoint answers only with the `x-api-version: 2` header. Without it the endpoint returns HTTP 404. The adapter sends the header.
68
+ - The Planning Data file lists datasets and pipeline tables. The adapter keeps the entries whose `realm` is `dataset`.
69
+ - The ancient woodland layer holds more than 50,000 polygons, past the ArcGIS page size. The adapter reads the service statistics queries instead of the features.
70
+ - The Bank Rate daily series is `IUDBEDR` and starts on 2 January 1975. An earlier start returns the database error page instead of a CSV.
71
+ - police.uk holds the last 36 months of street-level crime from the 44 forces of England, Wales, and Northern Ireland. Police Scotland publishes elsewhere, so nothing here covers Scotland.
72
+ - A police.uk street-level call covers everything within a mile of a point. The adapter cannot ask for a smaller radius. It asks one month at a time, inside the API limit of 15 requests per second.
73
+ - The carbon intensity API refuses a range longer than 31 days. The adapter reads whole days and asks for a window that ends at the start of yesterday, so the newest half hour, which the API settles after a short lag, stays out of the window.
74
+ - The Parliament call takes a house (1 for the Commons, 2 for the Lords) and a date. The response does not echo the date or the house back.
75
+ - A vacant seat appears as its own party, named `Vacant`, with one seat and no members behind it. The summary keeps it in `seats` and reports the gap per row as `unallocatedSeatCount`.
76
+ - `backgroundColour` and `foregroundColour` are null for some parties, including the Speaker. A chart needs its own fallback colour.
77
+ - The Parliament call can be slow. A request in this repo timed out after 25 seconds, and the next one answered in two.
78
+ - The Nomis catalogue returns 1,617 dataset definitions in about 5.4 MB of JSON. The committed fixture keeps the first 25 definitions. The adapter reads the whole live catalogue.
79
+ - The Public Health Scotland portal is occasionally flaky. Calls can answer 200, answer 504, or reset the connection. The adapter has no retry, so a smoke run can fail on this source now and then.
80
+ - The London Datastore call answers a 307 redirect. Node's `fetch` follows it, so the adapter keeps the documented path.
81
+ - The Discovery adapter sends `Accept: application/json`, because the API documents the header.
82
+ - `postcode-lookup` reads from postcodes.io, a third-party service. It is not a government API, though it serves ONS and Ordnance Survey postcode data under the Open Government Licence v3.
83
+ - Only the Find a Tender `license` field, the NHSBSA `OGL-UK-3.0` metadata, and the Public Health Scotland `uk-ogl` metadata were read directly from the service. The other licences come from the publishers' standard terms.
84
+ - The eleven adapters added on 2026-10-05 were probed live on that day.
85
+
86
+ ## Data sources and licences
87
+
88
+ This package reads 22 sources. Most come from UK public bodies. The postcode lookup comes from postcodes.io, a third-party service. Most data carries the Open Government Licence v3. The two TfL adapters carry TfL Open Data. The carbon intensity series carries Creative Commons Attribution 4.0. The Parliament seat counts carry the Open Parliament Licence v3.0.
89
+
90
+ | Adapter | Publisher | Source URL | Data licence |
91
+ | ------- | --------- | ---------- | ------------ |
92
+ | `flood-stations` | Environment Agency | <https://environment.data.gov.uk/flood-monitoring/id/stations> | Open Government Licence v3 |
93
+ | `flood-readings` | Environment Agency | <https://environment.data.gov.uk/flood-monitoring/id/stations/{reference}/readings> | Open Government Licence v3 |
94
+ | `ons-datasets` | Office for National Statistics | <https://api.beta.ons.gov.uk/v1/datasets> | Open Government Licence v3 |
95
+ | `food-hygiene-authorities` | Food Standards Agency | <https://api.ratings.food.gov.uk/Authorities/basic> | Open Government Licence v3 |
96
+ | `tfl-bike-points` | Transport for London | <https://api.tfl.gov.uk/BikePoint> | TfL Open Data |
97
+ | `planning-datasets` | MHCLG Planning Data platform | <https://www.planning.data.gov.uk/dataset.json> | Open Government Licence v3 |
98
+ | `ancient-woodland` | Natural England | <https://services.arcgis.com/JJzESW51TqeY9uat/arcgis/rest/services/Ancient_Woodland_England/FeatureServer/0/query> | Open Government Licence v3 |
99
+ | `bank-rate` | Bank of England | <https://www.bankofengland.co.uk/boeapps/database/_iadb-fromshowcolumns.asp> | Open Government Licence v3 under the Bank's terms |
100
+ | `police-crimes` | Home Office police.uk | <https://data.police.uk/api/crimes-street/all-crime> | Open Government Licence v3 |
101
+ | `carbon-intensity` | National Energy System Operator | <https://api.carbonintensity.org.uk/intensity> | Creative Commons Attribution 4.0 |
102
+ | `parliament-seats` | UK Parliament | <https://members-api.parliament.uk/api/Parties/StateOfTheParties> | Open Parliament Licence v3.0 |
103
+ | `postcode-lookup` | postcodes.io (ONS and Ordnance Survey data) | <https://api.postcodes.io/postcodes/SW1A1AA> | Open Government Licence v3 |
104
+ | `explore-education-statistics` | Department for Education | <https://api.education.gov.uk/statistics/v1/publications> | Open Government Licence v3 |
105
+ | `london-datastore` | Greater London Authority | <https://data.london.gov.uk/api/3/action/package_list> | Open Government Licence v3 by default, individual datasets can differ |
106
+ | `tna-discovery` | The National Archives | <https://discovery.nationalarchives.gov.uk/API/search/records> | Open Government Licence v3 |
107
+ | `ukhsa-dashboard` | UK Health Security Agency | <https://api.ukhsa-dashboard.data.gov.uk/themes/infectious_disease/sub_themes/bloodborne/topics/HIV/geography_types/Nation/geographies/England/metrics/HIV_cases_newDiagnoses> | Open Government Licence v3 |
108
+ | `nomis` | ONS Nomis | <https://www.nomisweb.co.uk/api/v01/dataset/def.sdmx.json> | Open Government Licence v3 |
109
+ | `fingertips-indicators` | Office for Health Improvement and Disparities | <https://fingertips.phe.org.uk/api/indicator_metadata/by_indicator_id> | Open Government Licence v3 |
110
+ | `find-a-tender` | Cabinet Office | <https://www.find-tender.service.gov.uk/api/1.0/ocdsReleasePackages> | Open Government Licence v3 |
111
+ | `tfl-line-status` | Transport for London | <https://api.tfl.gov.uk/Line/Mode/tube/Status> | TfL Open Data |
112
+ | `public-health-scotland` | Public Health Scotland | <https://www.opendata.nhs.scot/api/3/action/package_list> | Open Government Licence v3, the portal reports `uk-ogl` |
113
+ | `nhsbsa-ckan` | NHS Business Services Authority | <https://opendata.nhsbsa.net/api/3/action/package_list> | Open Government Licence v3, the portal reports `OGL-UK-3.0` |
114
+ | `neso-generation-mix` | National Energy System Operator | <https://api.neso.energy/api/3/action/datastore_search> | The NESO Open Data Licence, the portal reports `ESO` |
115
+
116
+ ## Package licence
117
+
118
+ MIT. See LICENSE.
119
+
120
+ ## Links
121
+
122
+ - npm: <https://www.npmjs.com/package/@uk-open-data-connectors/uk-sources>
123
+ - source: <https://github.com/olitreadwell/uk-open-data-connectors/tree/main/packages/uk-sources>
124
+ - docs: [Connector discovery](../../docs/CONNECTOR_DISCOVERY.md)
@@ -1 +1 @@
1
- {"version":3,"file":"ancientWoodland.d.ts","sourceRoot":"","sources":["../src/ancientWoodland.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,qHAC6E,CAAC;AAErH,+DAA+D;AAC/D,eAAO,MAAM,4BAA4B,uFAC6C,CAAC;AAEvF,mDAAmD;AACnD,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D,8DAA8D;AAC9D,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhE,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,yBAAyB,CAAC;IAC9B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,uBAAuB,EAoBzE,CAAC;AAEF,8DAA8D;AAC9D,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,iCAAiC,EA6BnF,CAAC;AAEF,gEAAgE;AAChE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;CAC3D;AAED,gFAAgF;AAChF,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAC1D,yDAAyD;IACzD,gBAAgB,EAAE,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAC5D,+CAA+C;IAC/C,SAAS,EAAE,uBAAuB,EAAE,CAAC;CACtC;AAED,0DAA0D;AAC1D,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,cAAc,EAAE,OAAO,CAAC;IACxB,mFAAmF;IACnF,cAAc,EAAE,OAAO,EAAE,CAAC;CAC3B;AAqDD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,CAuEpF;AAsDD;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAAO,GACpD,OAAO,CAAC,sBAAsB,CAAC,CAkBjC;AAED,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,sBAAsB,CAWxE,CAAC"}
1
+ {"version":3,"file":"ancientWoodland.d.ts","sourceRoot":"","sources":["../src/ancientWoodland.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,qHAC6E,CAAC;AAErH,+DAA+D;AAC/D,eAAO,MAAM,4BAA4B,uFAC6C,CAAC;AAEvF,mDAAmD;AACnD,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D,8DAA8D;AAC9D,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEhE,8EAA8E;AAC9E,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,yBAAyB,CAAC;IAC9B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,uBAAuB,EAoBzE,CAAC;AAEF,8DAA8D;AAC9D,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,iCAAiC,EA6BnF,CAAC;AAEF,gEAAgE;AAChE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;CAC3D;AAED,gFAAgF;AAChF,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wDAAwD;IACxD,cAAc,EAAE,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAC1D,yDAAyD;IACzD,gBAAgB,EAAE,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;IAC5D,+CAA+C;IAC/C,SAAS,EAAE,uBAAuB,EAAE,CAAC;CACtC;AAED,0DAA0D;AAC1D,MAAM,WAAW,wBAAwB;IACvC,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,cAAc,EAAE,OAAO,CAAC;IACxB,mFAAmF;IACnF,cAAc,EAAE,OAAO,EAAE,CAAC;CAC3B;AAqDD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,CAuEpF;AAgDD;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAAO,GACpD,OAAO,CAAC,sBAAsB,CAAC,CAkBjC;AAED,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,sBAAsB,CAWxE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { UkSourceApiError, UkSourceParseError } from './errors.js';
3
+ import { httpGet } from './http.js';
3
4
  import { readFixtureJson } from './fixtures.js';
4
5
  /**
5
6
  * Natural England's Ancient Woodland (England) polygons, served from the Defra
@@ -72,7 +73,7 @@ export const ANCIENT_WOODLAND_SIZE_BANDS = [
72
73
  { label: '100 hectares or more', minHectares: 100, where: 'AREA >= 100' },
73
74
  ];
74
75
  const ARCGIS_STATISTICS_RESPONSE_SCHEMA = z.object({
75
- features: z.array(z.object({ attributes: z.record(z.unknown()) })),
76
+ features: z.array(z.object({ attributes: z.record(z.string(), z.unknown()) })),
76
77
  });
77
78
  const ANCIENT_WOODLAND_RESPONSES_SCHEMA = z.object({
78
79
  totals: ARCGIS_STATISTICS_RESPONSE_SCHEMA,
@@ -191,10 +192,7 @@ async function queryArcgisStatistics(fetchImpl, query) {
191
192
  }
192
193
  url.searchParams.set('returnGeometry', 'false');
193
194
  url.searchParams.set('f', 'json');
194
- const response = await fetchImpl(url);
195
- if (!response.ok) {
196
- throw new UkSourceApiError(ANCIENT_WOODLAND_SOURCE_ID, `HTTP ${response.status} querying the ancient woodland layer`);
197
- }
195
+ const response = await httpGet(ANCIENT_WOODLAND_SOURCE_ID, url, { fetchImpl });
198
196
  const payload = await response.json();
199
197
  const arcgisError = ARCGIS_ERROR_SCHEMA.safeParse(payload);
200
198
  if (arcgisError.success) {
@@ -1 +1 @@
1
- {"version":3,"file":"ancientWoodland.js","sourceRoot":"","sources":["../src/ancientWoodland.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ancientWoodland.js","sourceRoot":"","sources":["../src/ancientWoodland.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Normalizes an optional API key read from configuration or a caller.
3
+ *
4
+ * An environment variable that is set but empty is treated as absent, so a
5
+ * blank key never reaches a request as an empty query parameter or header.
6
+ *
7
+ * @param key - The raw key, or undefined when unset.
8
+ * @returns The trimmed key, or undefined when it is blank.
9
+ */
10
+ export declare function normalizeSourceApiKey(key: string | undefined): string | undefined;
11
+ //# sourceMappingURL=apiKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiKey.d.ts","sourceRoot":"","sources":["../src/apiKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMjF"}
package/dist/apiKey.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Normalizes an optional API key read from configuration or a caller.
3
+ *
4
+ * An environment variable that is set but empty is treated as absent, so a
5
+ * blank key never reaches a request as an empty query parameter or header.
6
+ *
7
+ * @param key - The raw key, or undefined when unset.
8
+ * @returns The trimmed key, or undefined when it is blank.
9
+ */
10
+ export function normalizeSourceApiKey(key) {
11
+ const trimmed = key?.trim();
12
+ if (trimmed === undefined || trimmed === '') {
13
+ return undefined;
14
+ }
15
+ return trimmed;
16
+ }
17
+ //# sourceMappingURL=apiKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiKey.js","sourceRoot":"","sources":["../src/apiKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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":"bankRate.d.ts","sourceRoot":"","sources":["../src/bankRate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,+EACgD,CAAC;AAE/E;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,gBAAgB,CAAC;AAExD,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,iBAAiB,EAAE,mBAAmB,CAAC;IACvC,4DAA4D;IAC5D,YAAY,EAAE,aAAa,CAAC;IAC5B,2DAA2D;IAC3D,WAAW,EAAE,aAAa,CAAC;IAC3B,oCAAoC;IACpC,YAAY,EAAE,aAAa,CAAC;IAC5B,4CAA4C;IAC5C,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAuCD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAOzD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAW/D;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAiCvE;AAeD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,mBAAmB,EAAE,GAAG,aAAa,EAAE,CAiBxF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,mBAAmB,EAAE,GAAG,eAAe,CAyC5F;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GAChE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAQhC;AAED,6EAA6E;AAC7E,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,mBAAmB,EAAE,CAWhE,CAAC"}
1
+ {"version":3,"file":"bankRate.d.ts","sourceRoot":"","sources":["../src/bankRate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,+EACgD,CAAC;AAE/E;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,gBAAgB,CAAC;AAExD,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,iBAAiB,EAAE,mBAAmB,CAAC;IACvC,4DAA4D;IAC5D,YAAY,EAAE,aAAa,CAAC;IAC5B,2DAA2D;IAC3D,WAAW,EAAE,aAAa,CAAC;IAC3B,oCAAoC;IACpC,YAAY,EAAE,aAAa,CAAC;IAC5B,4CAA4C;IAC5C,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAuCD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAOzD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAW/D;AA2BD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAiCvE;AAeD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,mBAAmB,EAAE,GAAG,aAAa,EAAE,CAiBxF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,mBAAmB,EAAE,GAAG,eAAe,CAyC5F;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAO,GAChE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAKhC;AAED,6EAA6E;AAC7E,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,mBAAmB,EAAE,CAWhE,CAAC"}
package/dist/bankRate.js CHANGED
@@ -1,4 +1,5 @@
1
- import { UkSourceApiError, UkSourceParseError } from './errors.js';
1
+ import { UkSourceParseError } from './errors.js';
2
+ import { httpGet } from './http.js';
2
3
  import { readFixtureText } from './fixtures.js';
3
4
  /**
4
5
  * The Bank of England's official Bank Rate, published in the Bank's
@@ -232,10 +233,7 @@ export function summarizeBankRateSeries(observations) {
232
233
  export async function fetchBankRateObservations(options = {}) {
233
234
  const { fetchImpl = globalThis.fetch, now = new Date() } = options;
234
235
  const url = buildBankRateCsvUrl(formatBankRateQueryDate(now));
235
- const response = await fetchImpl(url);
236
- if (!response.ok) {
237
- throw new UkSourceApiError(BANK_RATE_SOURCE_ID, `HTTP ${response.status} reading Bank Rate`);
238
- }
236
+ const response = await httpGet(BANK_RATE_SOURCE_ID, url, { fetchImpl });
239
237
  return parseBankRateCsv(await response.text());
240
238
  }
241
239
  /** Bank of England Bank Rate readings, keyless, one row per business day. */
@@ -1 +1 @@
1
- {"version":3,"file":"bankRate.js","sourceRoot":"","sources":["../src/bankRate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bankRate.js","sourceRoot":"","sources":["../src/bankRate.ts"],"names":[],"mappings":"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"}
@@ -75,7 +75,10 @@ export interface CarbonIntensityWindow {
75
75
  export declare function formatCarbonIntensityInstant(date: Date): string;
76
76
  /**
77
77
  * Works out the window a build reads: whole UTC days, ending at the start of
78
- * today, so every reading in it is settled rather than a forecast.
78
+ * yesterday, so every reading in it is settled rather than a forecast. The API
79
+ * fills in actual readings for the newest half hours after a short lag, so a
80
+ * window ending at today's start can still hold null actuals just after
81
+ * midnight UTC.
79
82
  *
80
83
  * @param options - how many days, and the clock to measure back from
81
84
  * @returns the window's start and end as ISO instants
@@ -1 +1 @@
1
- {"version":3,"file":"carbonIntensity.d.ts","sourceRoot":"","sources":["../src/carbonIntensity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"carbonIntensity.d.ts","sourceRoot":"","sources":["../src/carbonIntensity.ts"],"names":[],"mappings":"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"}
@@ -68,7 +68,10 @@ export function formatCarbonIntensityInstant(date) {
68
68
  }
69
69
  /**
70
70
  * Works out the window a build reads: whole UTC days, ending at the start of
71
- * today, so every reading in it is settled rather than a forecast.
71
+ * yesterday, so every reading in it is settled rather than a forecast. The API
72
+ * fills in actual readings for the newest half hours after a short lag, so a
73
+ * window ending at today's start can still hold null actuals just after
74
+ * midnight UTC.
72
75
  *
73
76
  * @param options - how many days, and the clock to measure back from
74
77
  * @returns the window's start and end as ISO instants
@@ -82,7 +85,8 @@ export function resolveCarbonIntensityWindow(options = {}) {
82
85
  throw new UkSourceParseError(CARBON_INTENSITY_SOURCE_ID, `the API refuses a range longer than ${String(CARBON_INTENSITY_MAX_WINDOW_DAYS)} days`);
83
86
  }
84
87
  const now = options.now ?? new Date();
85
- const to = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
88
+ const today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
89
+ const to = new Date(today.getTime() - MILLISECONDS_PER_DAY);
86
90
  const from = new Date(to.getTime() - windowDays * MILLISECONDS_PER_DAY);
87
91
  return { from: formatCarbonIntensityInstant(from), to: formatCarbonIntensityInstant(to) };
88
92
  }