@maschinenlesbar.org/luftqualitaet-cli 0.0.2 → 0.0.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.
package/README.md CHANGED
@@ -1,197 +1,269 @@
1
1
  # luftqualitaet-cli
2
2
 
3
- A TypeScript **API client** and **command-line interface** for the open
4
- [Umweltbundesamt Air Data API](https://luftqualitaet.api.bund.dev/)
5
- (`umweltbundesamt.de/api/air_data`) — German **air-quality** measurements,
6
- indices, annual balances, exceedances and the station/component metadata behind them.
3
+ [![CI](https://github.com/maschinenlesbar-org/luftqualitaet-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/maschinenlesbar-org/luftqualitaet-cli/actions/workflows/ci.yml)
4
+ [![Release](https://github.com/maschinenlesbar-org/luftqualitaet-cli/actions/workflows/release.yml/badge.svg)](https://github.com/maschinenlesbar-org/luftqualitaet-cli/actions/workflows/release.yml)
5
+ [![npm](https://img.shields.io/npm/v/@maschinenlesbar.org/luftqualitaet-cli)](https://www.npmjs.com/package/@maschinenlesbar.org/luftqualitaet-cli)
6
+
7
+ Query Germany's official **air-quality data** — measurements, indices, annual
8
+ balances and exceedances — straight from your terminal. `luftqualitaet` is a
9
+ command-line tool over the open
10
+ [Umweltbundesamt Air Data API](https://www.umweltbundesamt.de/api/air_data/v3):
11
+ look up pollutants and stations, fetch hourly or daily measurements, inspect
12
+ exceedances, and get the full picture — as clean JSON you can pipe straight into
13
+ [`jq`](https://jqlang.github.io/jq/).
14
+
15
+ - **Works out of the box** — no account, no API key, no configuration. Install and go.
16
+ - **Clean JSON output** — pretty-printed by default, `--compact` for one-line/scripting.
17
+ - **14 commands** covering reference lists, measurements, annual balances, exceedances, thresholds and metadata.
18
+ - **Validates locally** — bad dates, reversed windows, out-of-range hours and years are caught before any request is sent.
19
+
20
+ > Want to use this as a TypeScript library or understand how it's built?
21
+ > See **[DEVELOPING.md](DEVELOPING.md)**.
7
22
 
8
- > This client targets `/api/air_data/v3`, the live API path, which supersedes the
9
- > **v2** OpenAPI spec published at [luftqualitaet.api.bund.dev](https://luftqualitaet.api.bund.dev/).
23
+ ## Install
10
24
 
11
- New to the UBA Air Data API, or terms like *component*, *scope*, *station type*
12
- or the hour-ending time window? See **[GLOSSARY.md](GLOSSARY.md)** for the domain
13
- concepts and the project's own vocabulary.
25
+ ```bash
26
+ npm i -g @maschinenlesbar.org/luftqualitaet-cli
27
+ ```
14
28
 
15
- - **Zero runtime HTTP dependencies** built on Node's built-in `http`/`https` (no axios, no fetch polyfill).
16
- - **One small dependency** for the CLI: [`commander`](https://github.com/tj/commander.js).
17
- - **Strongly typed** — typed parameter objects and the lang/index/use enums.
18
- - **Tested** — unit tests on Node's built-in test runner (`node --test`); every HTTP response is mocked (no real network in the suite).
19
- - **Read-only, no auth** — the UBA Air Data API needs no key; this client only reads.
29
+ This installs the **`luftqualitaet`** command. Requires **Node.js 20+**.
20
30
 
21
- ## Requirements
31
+ Check it works:
22
32
 
23
- - Node.js **>= 20** (uses the stable built-in test runner, ESM and top-level `await`).
33
+ ```bash
34
+ luftqualitaet --help
35
+ ```
24
36
 
25
- ## Install
37
+ ## Quickstart
38
+
39
+ No setup needed — the API is public and open, no key required. Start with the
40
+ reference lists to find the ids you'll need:
26
41
 
27
42
  ```bash
28
- npm install
29
- npm run build # compiles TypeScript to dist/
43
+ luftqualitaet components --lang en --index code
30
44
  ```
31
45
 
32
- Run the CLI without a global install:
46
+ This returns a map of all measured pollutants keyed by their short code. Pull
47
+ out just the ids with `jq`:
33
48
 
34
49
  ```bash
35
- node dist/src/cli/index.js --help
36
- # or, after `npm link` / global install:
37
- luftqualitaet --help
50
+ luftqualitaet components --lang en | jq '.data | to_entries[] | {id: .key, name: .value[1]}'
38
51
  ```
39
52
 
40
- ---
53
+ Then fetch the air-quality index for a station over a day:
41
54
 
42
- ## How the API works
55
+ ```bash
56
+ luftqualitaet airquality \
57
+ --station 143 \
58
+ --date-from 2024-01-01 --time-from 1 \
59
+ --date-to 2024-01-01 --time-to 24
60
+ ```
43
61
 
44
- UBA responses are **index + data** structures: an `indices` array names the
45
- columns and the payload is a compact map keyed by id/code/timestamp. This client
46
- returns those payloads faithfully (as JSON) and focuses on getting the request
47
- right. Look up station ids and component ids via `meta`, `components`, etc.
62
+ ## Commands
48
63
 
49
- ### Global options
64
+ ### Reference lists — look up ids
50
65
 
51
- | Option | Description |
66
+ These commands need no required arguments (just optional `--lang` and `--index`):
67
+
68
+ | Command | What it returns |
52
69
  | --- | --- |
53
- | `--base-url <url>` | API base URL (default `https://www.umweltbundesamt.de`) |
54
- | `--timeout <ms>` | Per-request timeout (default `30000`) |
55
- | `--user-agent <ua>` | `User-Agent` header value |
56
- | `--max-retries <n>` | Retries for transient `429`/`503` responses (default `2`) |
57
- | `--max-response-bytes <n>` | Cap response body size in bytes (`0` = unlimited; default 100 MiB) |
58
- | `--compact` | Print JSON on a single line |
59
-
60
- Global options may be given either before or after the command, e.g.
61
- `luftqualitaet --compact components --lang de` or `luftqualitaet components --compact --lang de`.
62
-
63
- ### Commands
64
-
65
- ```text
66
- # Reference lists
67
- components | networks | scopes [--lang de|en] [--index id|code]
68
- station-types | station-settings | transgression-types [--lang de|en]
69
-
70
- # Data (a time window is date-from/time-from .. date-to/time-to, hour 1..24)
71
- airquality --date-from --time-from --date-to --time-to --station
72
- airquality-limits
73
- measures --date-from --time-from --date-to --time-to --station [--component] [--scope]
74
- measures-limits
75
- annual-balances --component --year [--lang] [--index]
76
- transgressions --component --year [--lang] [--index]
77
- thresholds --use airquality|measure [--lang] [--component] [--scope]
78
- meta --use airquality|measure|transgression|annualbalance|map [--lang] [--date-from --date-to]
79
- ```
70
+ | `components` | Measured pollutants (PM₁₀, NO₂, O₃, …) with ids, codes and units |
71
+ | `networks` | Measurement networks (*Messnetze*) |
72
+ | `scopes` | Measurement scopes averaging/aggregation definitions |
73
+ | `station-types` | Station-type classifications (background, traffic, industrial, ) |
74
+ | `station-settings` | Station-setting classifications (urban, suburban, rural, ) |
75
+ | `transgression-types` | Catalogue of exceedance types |
80
76
 
81
- ### Examples
77
+ Flags for reference commands:
82
78
 
83
- ```bash
84
- # Components (pollutants) in German, keyed by code
85
- luftqualitaet components --lang de --index code
79
+ | Flag | Meaning |
80
+ | --- | --- |
81
+ | `--lang de\|en` | Label language (default varies by endpoint) |
82
+ | `--index id\|code` | Key the response map by numeric id or short code (where supported) |
86
83
 
87
- # Air-quality index for station 143 on one day
88
- luftqualitaet airquality --date-from 2024-01-01 --time-from 1 \
89
- --date-to 2024-01-01 --time-to 24 --station 143
84
+ ### Data commands measurements and aggregations
90
85
 
91
- # Annual PM10 (component 1) balance for 2023
92
- luftqualitaet annual-balances --component 1 --year 2023 --lang de
86
+ **`airquality`** air-quality index for a station over a time window.
93
87
 
94
- # Metadata needed to pick stations/components for a measurement query
95
- luftqualitaet meta --use measure --lang de
96
- ```
88
+ | Flag | Required | Meaning |
89
+ | --- | --- | --- |
90
+ | `--station <id>` | yes | station id (positive integer) |
91
+ | `--date-from <YYYY-MM-DD>` | yes | window start date |
92
+ | `--time-from <1-24>` | yes | window start hour (hour-ending, 1..24) |
93
+ | `--date-to <YYYY-MM-DD>` | yes | window end date |
94
+ | `--time-to <1-24>` | yes | window end hour |
97
95
 
98
- Exit codes: `0` success, `4` on a `404` from the API, `1` for any other error, non-zero for usage errors.
96
+ **`airquality-limits`** available date range per station for air-quality data.
97
+ Takes no options.
99
98
 
100
- ---
99
+ **`measures`** — raw measurement data for a station over a time window.
101
100
 
102
- ## Library usage
101
+ Same window + station flags as `airquality`, plus:
103
102
 
104
- ```ts
105
- import { LuftqualitaetClient, LuftApiError } from "@maschinenlesbar.org/luftqualitaet-cli";
103
+ | Flag | Required | Meaning |
104
+ | --- | --- | --- |
105
+ | `--component <id>` | no | narrow to one pollutant |
106
+ | `--scope <id>` | no | narrow to one averaging scope |
106
107
 
107
- const client = new LuftqualitaetClient(); // defaults to https://www.umweltbundesamt.de
108
+ **`measures-limits`** available date range per scope/component/station.
109
+ Takes no options.
108
110
 
109
- const components = await client.components({ lang: "de" });
110
- const aq = await client.airquality({
111
- date_from: "2024-01-01", time_from: 1, date_to: "2024-01-01", time_to: 24, station: 143,
112
- });
111
+ **`annual-balances`** annual tabulations for a component and year.
113
112
 
114
- try {
115
- await client.thresholds({ use: "measure" });
116
- } catch (err) {
117
- if (err instanceof LuftApiError) console.error(err.status, err.detail);
118
- }
119
- ```
113
+ | Flag | Required | Meaning |
114
+ | --- | --- | --- |
115
+ | `--component <id>` | yes | component id |
116
+ | `--year <YYYY>` | yes | year (>= 2016) |
117
+ | `--lang de\|en` | no | label language |
118
+ | `--index id\|code` | no | response key |
120
119
 
121
- ### Client options
122
-
123
- ```ts
124
- new LuftqualitaetClient({
125
- baseUrl: "https://www.umweltbundesamt.de",
126
- timeoutMs: 15_000,
127
- maxRetries: 3, // 429 / 503 are retried with linear backoff
128
- maxResponseBytes: 50 << 20, // abort responses larger than 50 MiB (0 = unlimited)
129
- userAgent: "my-app/1.0",
130
- transport: customTransport, // inject your own HTTP transport
131
- });
132
- ```
120
+ **`transgressions`** exceedance data for a component and year.
121
+ Same flags as `annual-balances`.
133
122
 
134
- ### Methods
123
+ **`thresholds`** — limit/threshold values for a given use case.
135
124
 
136
- `airquality`, `airqualityLimits`, `measures`, `measuresLimits`, `annualBalances`,
137
- `transgressions`, `components`, `networks`, `scopes`, `stationTypes`, `stationSettings`,
138
- `transgressionTypes`, `thresholds`, `meta`. The `LangValues` / `IndexValues` /
139
- `MetaUseValues` / `ThresholdUseValues` enums are exported for reference.
125
+ | Flag | Required | Meaning |
126
+ | --- | --- | --- |
127
+ | `--use airquality\|measure` | yes | which threshold set |
128
+ | `--lang de\|en` | no | label language |
129
+ | `--component <id>` | no | narrow to one component |
130
+ | `--scope <id>` | no | narrow to one scope |
140
131
 
141
- ---
132
+ **`meta`** — combined metadata bundle (components, scopes, stations, networks,
133
+ …) for building other queries.
142
134
 
143
- ## Architecture
135
+ | Flag | Required | Meaning |
136
+ | --- | --- | --- |
137
+ | `--use measure\|airquality\|transgression\|annualbalance\|map` | yes | which bundle |
138
+ | `--lang de\|en` | no | label language |
139
+ | `--date-from`, `--date-to` | when `--use airquality` | time window (required for that use) |
140
+ | `--time-from`, `--time-to` | no | hour bounds within window |
144
141
 
142
+ ## Common tasks
143
+
144
+ A few recipes to get going — see **[Usage.md](Usage.md)** for the full,
145
+ use-case-driven set.
146
+
147
+ ```bash
148
+ # What ids do the pollutants have?
149
+ luftqualitaet components --lang en --index code
150
+
151
+ # Which averaging scopes exist? (daily = 1, hourly = 2, 8h-max = 5, …)
152
+ luftqualitaet scopes --lang en
153
+
154
+ # Air-quality index for station 143 over a full day
155
+ luftqualitaet airquality \
156
+ --station 143 \
157
+ --date-from 2024-01-01 --time-from 1 \
158
+ --date-to 2024-01-01 --time-to 24
159
+
160
+ # PM₁₀ (component 1) daily-average measurements, station 143
161
+ luftqualitaet measures \
162
+ --station 143 --component 1 --scope 1 \
163
+ --date-from 2024-06-01 --time-from 1 \
164
+ --date-to 2024-06-01 --time-to 24
165
+
166
+ # Annual PM₁₀ balance for 2023
167
+ luftqualitaet annual-balances --component 1 --year 2023 --lang de
168
+
169
+ # NO₂ exceedances in 2022
170
+ luftqualitaet transgressions --component 5 --year 2022 --lang en
171
+
172
+ # Lookup tables for building a measurement query
173
+ luftqualitaet meta --use measure --lang de | jq 'keys'
145
174
  ```
146
- src/
147
- client/
148
- enums.ts # Lang / IndexKind / MetaUse / ThresholdUse value sets
149
- types.ts # parameter objects (responses kept as faithful JsonObject)
150
- query.ts # dependency-free query-string builder
151
- http.ts # the Transport interface + default node:http/https transport
152
- engine.ts # URL building, retry/backoff, redirects (cross-origin headers stripped), JSON decoding, error mapping
153
- errors.ts # LuftError / LuftApiError / LuftNetworkError / LuftParseError
154
- client.ts # LuftqualitaetClient — the air-data surface over the engine
155
- cli/
156
- io.ts # injectable I/O seam (stdout/stderr)
157
- shared.ts # option parsers, global-option resolver, JSON renderer
158
- commands/ # reference lists + data endpoints
159
- program.ts # assembles the commander program from injectable deps
160
- run.ts # parses argv -> exit code (no process.exit; testable)
161
- index.ts # #! bin shim
162
- ```
163
175
 
164
- **Design notes**
176
+ ## Output & scripting
177
+
178
+ Every command prints **pretty JSON to stdout**. Errors and diagnostics go to
179
+ stderr, so piping stdout into `jq` stays clean.
180
+
181
+ UBA responses are **index + data** structures: an `indices` array names the
182
+ columns and the payload is a compact map keyed by id/code/timestamp. Most
183
+ recipes involve indexing into `.data`:
184
+
185
+ ```bash
186
+ # How many stations have air-quality limits data?
187
+ luftqualitaet airquality-limits | jq '.data | keys | length'
165
188
 
166
- - The HTTP layer is a single `Transport` function (`(req) => Promise<HttpResponse>`). The default
167
- uses `node:http`/`node:https`; tests inject a mock. This keeps the client free of any HTTP framework.
168
- - The CLI is built around injectable `CliDeps` (client factory + I/O), so the whole program can be
169
- driven in-process by tests with a mocked client and captured output — no subprocesses.
170
- - UBA responses are index/data structures whose exact shape varies by endpoint, so they are returned
171
- as faithful raw `JsonObject`s rather than partially-guessed types.
189
+ # Pull the component name + unit for every pollutant
190
+ luftqualitaet components --lang en | jq '.data | to_entries[] | {id: .key, name: .value[1]}'
172
191
 
173
- ---
192
+ # Annual balances as compact JSON for further piping
193
+ luftqualitaet --compact annual-balances --component 1 --year 2023 | jq '.data'
194
+ ```
174
195
 
175
- ## Testing
196
+ Use `--compact` for single-line JSON in pipelines and logs:
176
197
 
177
198
  ```bash
178
- npm test # builds, then runs `node --test` over dist/test
199
+ luftqualitaet --compact measures-limits | jq '.data[] | select(.[0]=="1")' | head
179
200
  ```
180
201
 
181
- - **`query.test.ts`** query-string serialisation.
182
- - **`http.test.ts`** the default transport against a real loopback `http.createServer`.
183
- - **`engine.test.ts`** URL building, JSON decoding, error mapping, 429/503 retry, redirects — mocked transport.
184
- - **`client.test.ts`** — a parameterized table over all 15 client methods asserting URL/query mapping plus parameter pruning — mocked transport.
185
- - **`cli.test.ts`** end-to-end command parsing, domain validation (hour `1..24`, year `>= 2016`, positive ids, date format, conditional `meta` window) and exit codes — mocked client.
202
+ `--compact` (and every global option) works **before or after** the command —
203
+ both `luftqualitaet --compact components` and `luftqualitaet components --compact`
204
+ do the same thing.
205
+
206
+ **Exit codes** make the CLI easy to use in scripts:
207
+
208
+ | Code | Meaning |
209
+ | --- | --- |
210
+ | `0` | success (also `--help` / `--version`) |
211
+ | `4` | resource not found (`404` from the API) |
212
+ | `1` | any other error (network failure, bad JSON, validation error) |
213
+ | non-zero | usage / argument error (bad flag, missing required option) |
214
+
215
+ ## Troubleshooting
216
+
217
+ - **`command not found: luftqualitaet`** — the global npm bin directory isn't on
218
+ your `PATH`. Run `npm bin -g` to find it and add it, or run via
219
+ `npx @maschinenlesbar.org/luftqualitaet-cli …`.
220
+ - **Exit `4` / "not found"** — the API returned a `404`. The station or component
221
+ id may not exist, or the requested year/window is out of the available range.
222
+ Use `airquality-limits` or `measures-limits` to discover what data is actually
223
+ available.
224
+ - **Exit `1` / network error** — connectivity, DNS, or a timeout. Try again, or
225
+ raise the limit with `--timeout 60000`.
226
+ - **Empty `.data`** — the query matched nothing or the window has no data; use the
227
+ `-limits` commands to find a window that has data for that station/component.
228
+ - **Reversed window error** — `--date-from`/`--time-from` must come before
229
+ `--date-to`/`--time-to`; the CLI checks this locally before sending any request.
230
+ - **Year rejected** — `--year` must be `>= 2016`; the API does not carry annual
231
+ tabulations (`annual-balances`/`transgressions`) before that. The `>= 2016` floor
232
+ applies **only** to `--year`: the windowed endpoints (`airquality`/`measures`)
233
+ accept any valid `--date-from`/`--date-to`, since their available range varies by
234
+ station/scope — use the `-limits` commands to find what exists.
235
+
236
+ ## Global options
237
+
238
+ These apply to every command and may be given before *or* after it:
239
+
240
+ | Option | Description |
241
+ | --- | --- |
242
+ | `-V, --version` | Print the version number |
243
+ | `-h, --help` | Show help for the program or a command |
244
+ | `--compact` | Print JSON on a single line instead of pretty-printed |
245
+ | `--base-url <url>` | API base URL (default `https://www.umweltbundesamt.de`) |
246
+ | `--timeout <ms>` | Per-request timeout (default `30000`) |
247
+ | `--user-agent <ua>` | `User-Agent` header value |
248
+ | `--max-retries <n>` | Retries for transient `429`/`503` responses (default `2`) |
249
+ | `--max-redirects <n>` | HTTP redirects to follow (`0` = none; default `5`) |
250
+ | `--max-response-bytes <n>` | Cap response body size in bytes (`0` = unlimited; default 100 MiB) |
251
+
252
+ ## Learn more
253
+
254
+ - **[SKILLS.md](SKILLS.md)** — Claude Code Agent Skills that drive this CLI for you.
255
+ - **[Usage.md](Usage.md)** — full use-case-driven cookbook.
256
+ - **[GLOSSARY.md](GLOSSARY.md)** — every command, flag and domain term explained.
257
+ - **[DEVELOPING.md](DEVELOPING.md)** — TypeScript library usage, architecture, testing, CI.
186
258
 
187
- ## Continuous integration
259
+ ## Data license
188
260
 
189
- GitHub Actions workflows under `.github/workflows/`:
261
+ This CLI is a **client** — it accesses data it does not own or redistribute. The
262
+ upstream data is © its provider and licensed **separately from this tool's code**.
263
+ See **[DATA_LICENSE.md](DATA_LICENSE.md)**.
190
264
 
191
- - **ci.yml** — type-check, build and test on Node 20/22/24 for every push and PR.
192
- - **release.yml** on a `v*` tag: verify the tag matches `package.json`, test, `npm pack`, and create a GitHub Release with the tarball.
193
- - **publish.yml** — manual dispatch: publish to npm via OIDC **Trusted Publishing** (no stored `NPM_TOKEN`) with provenance.
194
- - **docs.yml** — build TypeDoc API docs and deploy to GitHub Pages on each `v*` tag.
265
+ > **Umweltbundesamt** — Datenlizenz Deutschland Namensnennung 2.0 (`dl-de/by-2-0`).
266
+ > Attribution required; commercial use and modification allowed.
195
267
 
196
268
  ## License
197
269
 
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAkExC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAsK1E"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAkExC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAoL1E"}
@@ -136,16 +136,29 @@ export function registerDataCommands(program, deps) {
136
136
  const use = assertEnum(String(opts["use"]), MetaUseValues, "use");
137
137
  const dateFrom = opts["dateFrom"];
138
138
  const dateTo = opts["dateTo"];
139
- if (use === "airquality" && (dateFrom === undefined || dateTo === undefined)) {
140
- throw new LuftError("meta --use airquality requires --date-from and --date-to.");
139
+ const timeFrom = opts["timeFrom"];
140
+ const timeTo = opts["timeTo"];
141
+ if (use === "airquality") {
142
+ if (dateFrom === undefined || dateTo === undefined) {
143
+ throw new LuftError("meta --use airquality requires --date-from and --date-to.");
144
+ }
145
+ // Validate the window locally, consistent with the `airquality`/`measures`
146
+ // commands and the "reversed windows are caught before any request" promise.
147
+ // Omitted hours default to the full-day bounds (1..24).
148
+ assertWindowOrdered(dateFrom, timeFrom ?? 1, dateTo, timeTo ?? 24);
149
+ }
150
+ else if (timeFrom !== undefined || timeTo !== undefined) {
151
+ // Hour bounds only mean anything for the airquality window; reject them
152
+ // elsewhere rather than silently sending an ignored parameter.
153
+ throw new LuftError(`meta --time-from/--time-to apply only to --use airquality (got --use ${use}).`);
141
154
  }
142
155
  renderJson(deps, global, await client.meta({
143
156
  use,
144
157
  lang: lang(opts),
145
158
  date_from: dateFrom,
146
159
  date_to: dateTo,
147
- time_from: opts["timeFrom"],
148
- time_to: opts["timeTo"],
160
+ time_from: timeFrom,
161
+ time_to: timeTo,
149
162
  }));
150
163
  }));
151
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../../src/cli/commands/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../../src/cli/commands/data.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../../src/cli/program.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAuBvC,eAAO,MAAM,OAAO,QAAgB,CAAC;AAErC,yEAAyE;AACzE,eAAO,MAAM,WAAW,EAAE,OAGzB,CAAC;AAEF,wBAAgB,YAAY,CAAC,IAAI,GAAE,OAAqB,GAAG,OAAO,CA0BjE"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../../src/cli/program.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAuBvC,eAAO,MAAM,OAAO,QAAgB,CAAC;AAErC,yEAAyE;AACzE,eAAO,MAAM,WAAW,EAAE,OAGzB,CAAC;AAEF,wBAAgB,YAAY,CAAC,IAAI,GAAE,OAAqB,GAAG,OAAO,CA2BjE"}
@@ -42,6 +42,7 @@ export function buildProgram(deps = defaultDeps) {
42
42
  .option("--timeout <ms>", "per-request timeout in milliseconds", parseIntArg)
43
43
  .option("--user-agent <ua>", "User-Agent header value")
44
44
  .option("--max-retries <n>", "retries for transient 429/503 responses", parseIntArg)
45
+ .option("--max-redirects <n>", "HTTP redirects to follow (0 = none; default 5)", parseIntArg)
45
46
  .option("--max-response-bytes <n>", "cap response body size in bytes (0 = unlimited; default 100 MiB)", parseIntArg)
46
47
  .option("--compact", "print JSON on a single line instead of pretty-printed")
47
48
  .showHelpAfterError();
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/cli/program.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,4EAA4E;AAC5E,mBAAmB;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;GAKG;AACH,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAC;QAC5F,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;AAErC,yEAAyE;AACzE,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,EAAE,EAAE,SAAS;IACb,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC;CAC5D,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,OAAgB,WAAW;IACtD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,eAAe,CAAC;SACrB,WAAW,CACV,gDAAgD;QAC9C,kDAAkD,CACrD;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,gCAAgC,CAAC;SAC5E,MAAM,CAAC,gBAAgB,EAAE,qCAAqC,EAAE,WAAW,CAAC;SAC5E,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;SACtD,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,EAAE,WAAW,CAAC;SACnF,MAAM,CACL,0BAA0B,EAC1B,kEAAkE,EAClE,WAAW,CACZ;SACA,MAAM,CAAC,WAAW,EAAE,uDAAuD,CAAC;SAC5E,kBAAkB,EAAE,CAAC;IAExB,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEpC,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/cli/program.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,4EAA4E;AAC5E,mBAAmB;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;GAKG;AACH,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAyB,CAAC;QAC5F,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;AAErC,yEAAyE;AACzE,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,EAAE,EAAE,SAAS;IACb,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,mBAAmB,CAAC,OAAO,CAAC;CAC5D,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,OAAgB,WAAW;IACtD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,eAAe,CAAC;SACrB,WAAW,CACV,gDAAgD;QAC9C,kDAAkD,CACrD;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,gCAAgC,CAAC;SAC5E,MAAM,CAAC,gBAAgB,EAAE,qCAAqC,EAAE,WAAW,CAAC;SAC5E,MAAM,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;SACtD,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,EAAE,WAAW,CAAC;SACnF,MAAM,CAAC,qBAAqB,EAAE,gDAAgD,EAAE,WAAW,CAAC;SAC5F,MAAM,CACL,0BAA0B,EAC1B,kEAAkE,EAClE,WAAW,CACZ;SACA,MAAM,CAAC,WAAW,EAAE,uDAAuD,CAAC;SAC5E,kBAAkB,EAAE,CAAC;IAExB,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEpC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAiBvC,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,OAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBtF"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAiBvC,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,OAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4CtF"}
@@ -21,6 +21,25 @@ function configureTree(command, deps) {
21
21
  export async function run(argv, deps = defaultDeps) {
22
22
  const program = buildProgram(deps);
23
23
  configureTree(program, deps);
24
+ // A no-subcommand invocation (`luftqualitaet`, `luftqualitaet --compact`) should
25
+ // print help to stdout and exit 0 — matching `--help` — rather than commander's
26
+ // default of help-to-stderr + exit 1, which contradicts the documented
27
+ // "help → exit 0" model and is a spurious failure for scripts building a
28
+ // possibly-empty command. Detect it by parsing only the options (which correctly
29
+ // consumes global-option values) on a throwaway program: empty `operands` with
30
+ // nothing left in `unknown` means no command and no help/version or unknown
31
+ // option. `--help`/`--version`/unknown options land in `unknown` and fall through
32
+ // to commander so it handles (and reports) them exactly as before.
33
+ try {
34
+ const probe = buildProgram(deps).parseOptions([...argv]);
35
+ if (probe.operands.length === 0 && probe.unknown.length === 0) {
36
+ deps.io.out(program.helpInformation().replace(/\n$/, ""));
37
+ return 0;
38
+ }
39
+ }
40
+ catch {
41
+ // Option parsing hiccuped — fall through and let the real parse report it.
42
+ }
24
43
  try {
25
44
  await program.parseAsync(argv, { from: "user" });
26
45
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,6EAA6E;AAC7E,+DAA+D;AAE/D,OAAO,EAAE,cAAc,EAAgB,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAgB,EAAE,IAAa;IACpD,OAAO,CAAC,YAAY,EAAE,CAAC;IACvB,OAAO,CAAC,eAAe,CAAC;QACtB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;KACvD,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ;QAAE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc,EAAE,OAAgB,WAAW;IACnE,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;YAClC,2EAA2E;YAC3E,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QACD,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACrC,mEAAmE;YACnE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,CAAC,CAAC;YACjC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/run.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,7 @@ export interface GlobalOptions {
40
40
  timeout?: number;
41
41
  userAgent?: string;
42
42
  maxRetries?: number;
43
+ maxRedirects?: number;
43
44
  maxResponseBytes?: number;
44
45
  compact?: boolean;
45
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/cli/shared.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAmB1D,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,OAAO,EAAE,MAAM,GACd,CAAC,CAKH;AAED,iFAAiF;AACjF,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAIpE;AAED,kFAAkF;AAClF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,CAI1E;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAQpE;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAGrF;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5C,MAAM,EAAE,aAAa,CAAC;IACtB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,OAAO,EACb,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAC/D,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAQvC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/cli/shared.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAmB1D,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,OAAO,EAAE,MAAM,GACd,CAAC,CAKH;AAED,iFAAiF;AACjF,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAIpE;AAED,kFAAkF;AAClF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,CAI1E;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CASpE;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAGrF;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5C,MAAM,EAAE,aAAa,CAAC;IACtB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,OAAO,EACb,EAAE,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAC/D,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAQvC"}
@@ -113,6 +113,8 @@ export function toEngineOptions(global) {
113
113
  options.userAgent = global.userAgent;
114
114
  if (global.maxRetries !== undefined)
115
115
  options.maxRetries = global.maxRetries;
116
+ if (global.maxRedirects !== undefined)
117
+ options.maxRedirects = global.maxRedirects;
116
118
  if (global.maxResponseBytes !== undefined)
117
119
  options.maxResponseBytes = global.maxResponseBytes;
118
120
  return options;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/cli/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/cli/shared.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/client/engine.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAGhE,eAAO,MAAM,gBAAgB,mCAAmC,CAAC;AAGjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAOD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;gBAE1C,OAAO,GAAE,aAAkB;IAYvC,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM;IAMnD,6EAA6E;IACvE,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAmC,GAChF,OAAO,CAAC,WAAW,CAAC;IAwDvB,0DAA0D;IACpD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAU/D,OAAO,CAAC,UAAU;CAYnB"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/client/engine.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAGhE,eAAO,MAAM,gBAAgB,mCAAmC,CAAC;AAGjE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AA4BD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;gBAE1C,OAAO,GAAE,aAAkB;IAYvC,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM;IAenD,6EAA6E;IACvE,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,WAAW,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAmC,GAChF,OAAO,CAAC,WAAW,CAAC;IAmEvB,0DAA0D;IACpD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAU/D,OAAO,CAAC,UAAU;CAenB"}
@@ -3,10 +3,31 @@
3
3
  // (429, 503), and decodes responses.
4
4
  import { nodeHttpTransport } from "./http.js";
5
5
  import { buildQueryString } from "./query.js";
6
- import { LuftApiError, LuftParseError } from "./errors.js";
6
+ import { LuftApiError, LuftNetworkError, LuftParseError } from "./errors.js";
7
7
  export const DEFAULT_BASE_URL = "https://www.umweltbundesamt.de";
8
8
  const DEFAULT_USER_AGENT = "luftqualitaet-cli";
9
9
  const DEFAULT_MAX_RESPONSE_BYTES = 100 * 1024 * 1024;
10
+ /**
11
+ * Strip control characters (all C0/C1 except tab and newline, plus DEL) out of a
12
+ * string that originates in an attacker-controlled response — the error detail
13
+ * and any echoed Content-Type. `JSON.parse` decodes a JSON string escape for the
14
+ * ESC code point in an error body into a real ESC byte, so without this a hostile
15
+ * or MITM'd endpoint could drive ANSI/OSC escape sequences into the user's
16
+ * terminal when the message is printed raw to stderr. The success path is already
17
+ * safe (`JSON.stringify`
18
+ * escapes these), so this only needs to cover text flowing into an error message.
19
+ */
20
+ function sanitizeServerText(text) {
21
+ let out = "";
22
+ for (const ch of text) {
23
+ const n = ch.codePointAt(0) ?? 0;
24
+ // Keep tab (0x09) and newline (0x0a); drop the rest of C0, DEL, and C1.
25
+ if (n <= 8 || (n >= 0x0b && n <= 0x1f) || (n >= 0x7f && n <= 0x9f))
26
+ continue;
27
+ out += ch;
28
+ }
29
+ return out;
30
+ }
10
31
  const realSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
11
32
  export class RequestEngine {
12
33
  baseUrl;
@@ -31,6 +52,16 @@ export class RequestEngine {
31
52
  }
32
53
  /** Build a fully-qualified URL from a path and optional query parameters. */
33
54
  buildUrl(path, query) {
55
+ // Validate the base URL up front so a malformed `baseUrl` (e.g. a stray
56
+ // `--base-url notaurl`) yields a clear message naming the offending value,
57
+ // instead of an opaque "Invalid URL" that carries the full request path and
58
+ // reads as if the path were at fault.
59
+ try {
60
+ new URL(this.baseUrl);
61
+ }
62
+ catch {
63
+ throw new LuftNetworkError(`Invalid base URL: ${JSON.stringify(this.baseUrl)}`);
64
+ }
34
65
  const normalizedPath = path.startsWith("/") ? path : `/${path}`;
35
66
  const qs = query ? buildQueryString(query) : "";
36
67
  return `${this.baseUrl}${normalizedPath}${qs ? `?${qs}` : ""}`;
@@ -64,7 +95,16 @@ export class RequestEngine {
64
95
  if (status >= 300 && status < 400 && redirects < this.maxRedirects) {
65
96
  const location = response.headers["location"];
66
97
  if (typeof location === "string" && location.length > 0) {
67
- const target = new URL(location, url);
98
+ // A hostile server can send an unparsable Location; wrap the parse so
99
+ // it surfaces as a typed LuftNetworkError (matchable by library
100
+ // consumers) rather than a raw TypeError reported as "Unexpected error".
101
+ let target;
102
+ try {
103
+ target = new URL(location, url);
104
+ }
105
+ catch (cause) {
106
+ throw new LuftNetworkError(`Invalid redirect Location ${JSON.stringify(location)} from ${url}`, { cause });
107
+ }
68
108
  // Cross-origin redirect: strip request headers so any sensitive
69
109
  // header (e.g. an Authorization/token added later) is never leaked to
70
110
  // a different origin. Today only Accept/User-Agent are sent, so we
@@ -111,6 +151,10 @@ export class RequestEngine {
111
151
  catch {
112
152
  // Non-JSON error body; leave detail undefined.
113
153
  }
154
+ // `detail` came from the response body; strip control characters so a hostile
155
+ // endpoint cannot inject terminal escape sequences via the stderr error message.
156
+ if (detail !== undefined)
157
+ detail = sanitizeServerText(detail);
114
158
  return new LuftApiError({ status, url, method, body: text, detail });
115
159
  }
116
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/client/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/client/engine.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yEAAyE;AACzE,qCAAqC;AAErC,OAAO,EAAE,iBAAiB,EAAkB,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAoB,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,gCAAgC,CAAC;AACjE,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAgC/C,MAAM,0BAA0B,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAErD;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,wEAAwE;QACxE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;YAAE,SAAS;QAC7E,GAAG,IAAI,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,EAAU,EAAiB,EAAE,CAC9C,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD,MAAM,OAAO,aAAa;IACP,OAAO,CAAS;IAChB,SAAS,CAAY;IACrB,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,YAAY,CAAS;IACrB,YAAY,CAAS;IACrB,gBAAgB,CAAS;IACzB,KAAK,CAAgC;IAEtD,YAAY,UAAyB,EAAE;QACrC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,iBAAiB,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,GAAG,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;QAC/E,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;IAC1C,CAAC;IAED,6EAA6E;IAC7E,QAAQ,CAAC,IAAY,EAAE,KAAmB;QACxC,wEAAwE;QACxE,2EAA2E;QAC3E,4EAA4E;QAC5E,sCAAsC;QACtC,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAChE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjE,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,OAAO,CACX,MAAc,EACd,IAAY,EACZ,UAAmD,EAAE,MAAM,EAAE,kBAAkB,EAAE;QAEjF,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,IAAI,CAAC,SAAS;SAC7B,CAAC;QAEF,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,yEAAyE;QACzE,SAAS,CAAC;YACR,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;gBACpC,MAAM;gBACN,GAAG;gBACH,OAAO;gBACP,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,MAAM,SAAS,GAAG,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC;YACnD,IAAI,SAAS,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC,CAAC;gBACb,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;gBAC9C,SAAS;YACX,CAAC;YAED,wEAAwE;YACxE,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC9C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxD,sEAAsE;oBACtE,gEAAgE;oBAChE,yEAAyE;oBACzE,IAAI,MAAW,CAAC;oBAChB,IAAI,CAAC;wBACH,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBAClC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,IAAI,gBAAgB,CACxB,6BAA6B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,GAAG,EAAE,EACnE,EAAE,KAAK,EAAE,CACV,CAAC;oBACJ,CAAC;oBACD,gEAAgE;oBAChE,sEAAsE;oBACtE,mEAAmE;oBACnE,4DAA4D;oBAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;wBAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;4BAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;wBACnC,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;oBACzC,CAAC;oBACD,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACxB,SAAS,IAAI,CAAC,CAAC;oBACf,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;YACnE,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5D,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,KAAmB;QAChD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,cAAc,CAAC,sCAAsC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,MAAc,EAAE,GAAW,EAAE,MAAc,EAAE,IAAY;QAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,MAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4C,CAAC;YAC3E,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;gBAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;iBACnE,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;gBAAE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;QACD,8EAA8E;QAC9E,iFAAiF;QACjF,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/client/http.ts"],"names":[],"mappings":"AAQA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAuG5B,CAAC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/client/http.ts"],"names":[],"mappings":"AAQA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAoI5B,CAAC"}
@@ -32,6 +32,20 @@ export const nodeHttpTransport = (request) => new Promise((resolve, reject) => {
32
32
  const isHttps = url.protocol === "https:";
33
33
  const driver = isHttps ? https : http;
34
34
  const maxBytes = request.maxResponseBytes;
35
+ const timeoutMs = request.timeoutMs;
36
+ // Wall-clock deadline for the whole request. `req.setTimeout()` below is an
37
+ // *idle-socket* timeout that resets on every received byte, so a slow-drip
38
+ // server that sends one byte just under the idle window (and stays under
39
+ // maxResponseBytes) could keep the request alive indefinitely. A single fixed
40
+ // timer bounds the total time from request start to `end`, independent of the
41
+ // byte cadence.
42
+ let deadline;
43
+ const clearDeadline = () => {
44
+ if (deadline !== undefined) {
45
+ clearTimeout(deadline);
46
+ deadline = undefined;
47
+ }
48
+ };
35
49
  const req = driver.request(url, {
36
50
  method: request.method,
37
51
  headers: request.headers,
@@ -45,6 +59,7 @@ export const nodeHttpTransport = (request) => new Promise((resolve, reject) => {
45
59
  received += chunk.length;
46
60
  if (maxBytes !== undefined && received > maxBytes) {
47
61
  aborted = true;
62
+ clearDeadline();
48
63
  res.destroy();
49
64
  reject(new LuftNetworkError(`Response exceeded maxResponseBytes (${maxBytes})`));
50
65
  return;
@@ -54,6 +69,7 @@ export const nodeHttpTransport = (request) => new Promise((resolve, reject) => {
54
69
  res.on("end", () => {
55
70
  if (aborted)
56
71
  return;
72
+ clearDeadline();
57
73
  resolve({
58
74
  status: res.statusCode ?? 0,
59
75
  headers: res.headers,
@@ -63,6 +79,7 @@ export const nodeHttpTransport = (request) => new Promise((resolve, reject) => {
63
79
  res.on("error", (err) => {
64
80
  if (aborted)
65
81
  return; // we already rejected with the size-cap error
82
+ clearDeadline();
66
83
  reject(new LuftNetworkError(`Response stream error: ${err.message}`, { cause: err }));
67
84
  });
68
85
  });
@@ -84,10 +101,12 @@ export const nodeHttpTransport = (request) => new Promise((resolve, reject) => {
84
101
  connected = true;
85
102
  });
86
103
  });
87
- if (request.timeoutMs && request.timeoutMs > 0) {
88
- req.setTimeout(request.timeoutMs, () => {
104
+ if (timeoutMs && timeoutMs > 0) {
105
+ // Idle-socket timeout (resets on activity). Reports the true failure phase
106
+ // (connected timeout vs. DNS/connect failure) as before.
107
+ req.setTimeout(timeoutMs, () => {
89
108
  if (connected) {
90
- req.destroy(new LuftNetworkError(`Request timed out after ${request.timeoutMs}ms`));
109
+ req.destroy(new LuftNetworkError(`Request timed out after ${timeoutMs}ms`));
91
110
  }
92
111
  else if (dnsError) {
93
112
  // DNS resolution already failed; report that, not a timeout.
@@ -96,11 +115,20 @@ export const nodeHttpTransport = (request) => new Promise((resolve, reject) => {
96
115
  else {
97
116
  // Still in the connect/DNS phase with no socket yet. Attribute the
98
117
  // failure to that phase rather than claiming a generic request timeout.
99
- req.destroy(new LuftNetworkError(`Could not connect to ${url.host} within ${request.timeoutMs}ms (host unresolved or unreachable)`));
118
+ req.destroy(new LuftNetworkError(`Could not connect to ${url.host} within ${timeoutMs}ms (host unresolved or unreachable)`));
100
119
  }
101
120
  });
121
+ // ...plus a hard wall-clock deadline that does *not* reset on activity, so a
122
+ // slow drip cannot outlast the caller's timeout budget (see LQ-02). This
123
+ // bounds total time; maxResponseBytes bounds total size.
124
+ deadline = setTimeout(() => {
125
+ req.destroy(new LuftNetworkError(`Request exceeded the ${timeoutMs}ms deadline`));
126
+ }, timeoutMs);
127
+ // Don't let the deadline timer keep the event loop alive on its own.
128
+ deadline.unref?.();
102
129
  }
103
130
  req.on("error", (err) => {
131
+ clearDeadline();
104
132
  // A timeout destroy already passes an LuftNetworkError; don't double-wrap.
105
133
  reject(err instanceof LuftNetworkError ? err : new LuftNetworkError(err.message, { cause: err }));
106
134
  });
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/client/http.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,iDAAiD;AACjD,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,8EAA8E;AAC9E,yCAAyC;AAEzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAuB/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAc,CAAC,OAAO,EAAE,EAAE,CACtD,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC5C,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,gBAAgB,CAAC,gBAAgB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,2EAA2E;IAC3E,2DAA2D;IAC3D,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,gBAAgB,CAAC,yBAAyB,GAAG,CAAC,QAAQ,aAAa,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE1C,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CACxB,GAAG,EACH;QACE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,EACD,CAAC,GAAG,EAAE,EAAE;QACN,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC/B,IAAI,OAAO;gBAAE,OAAO;YACpB,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC;YACzB,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;gBAClD,OAAO,GAAG,IAAI,CAAC;gBACf,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,gBAAgB,CAAC,uCAAuC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,CAAC;gBACN,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC;gBAC3B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aAC5B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,IAAI,OAAO;gBAAE,OAAO,CAAC,8CAA8C;YACnE,MAAM,CAAC,IAAI,gBAAgB,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,mEAAmE;IACnE,qEAAqE;IACrE,yEAAyE;IACzE,mEAAmE;IACnE,0CAA0C;IAC1C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,QAA2B,CAAC;IAChC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1B,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1B,IAAI,GAAG;gBAAE,QAAQ,GAAG,GAAG,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACxB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE;YACrC,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,2BAA2B,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,QAAQ,EAAE,CAAC;gBACpB,6DAA6D;gBAC7D,GAAG,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,mEAAmE;gBACnE,wEAAwE;gBACxE,GAAG,CAAC,OAAO,CACT,IAAI,gBAAgB,CAClB,wBAAwB,GAAG,CAAC,IAAI,WAAW,OAAO,CAAC,SAAS,qCAAqC,CAClG,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACtB,2EAA2E;QAC3E,MAAM,CAAC,GAAG,YAAY,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/client/http.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maschinenlesbar.org/luftqualitaet-cli",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "TypeScript API client and CLI for the open Umweltbundesamt Air Data API (umweltbundesamt.de)",
5
5
  "type": "module",
6
6
  "bin": {