@dangahagan/weather-mcp 1.21.0 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -8
- package/dist/config/api.d.ts +28 -0
- package/dist/config/api.d.ts.map +1 -1
- package/dist/config/api.js +30 -0
- package/dist/config/api.js.map +1 -1
- package/dist/config/cache.d.ts +1 -0
- package/dist/config/cache.d.ts.map +1 -1
- package/dist/config/cache.js +5 -0
- package/dist/config/cache.js.map +1 -1
- package/dist/handlers/airQualityHandler.d.ts +2 -1
- package/dist/handlers/airQualityHandler.d.ts.map +1 -1
- package/dist/handlers/airQualityHandler.js +124 -11
- package/dist/handlers/airQualityHandler.js.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/services/googlePollen.d.ts +72 -0
- package/dist/services/googlePollen.d.ts.map +1 -0
- package/dist/services/googlePollen.js +249 -0
- package/dist/services/googlePollen.js.map +1 -0
- package/dist/types/googlePollen.d.ts +67 -0
- package/dist/types/googlePollen.d.ts.map +1 -0
- package/dist/types/googlePollen.js +16 -0
- package/dist/types/googlePollen.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@dangahagan/weather-mcp)
|
|
4
4
|
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.dgahagan/weather-mcp)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
|
-
[](./docs/testing/TEST_SUITE_README.md)
|
|
7
7
|
[](https://nodejs.org)
|
|
8
8
|
|
|
9
9
|
**Give your AI assistant real weather data — 17 tools, zero API keys, zero signup, zero cost.**
|
|
10
10
|
|
|
11
|
-
Weather MCP is a [Model Context Protocol](https://modelcontextprotocol.io) server that connects AI assistants (Claude, Cursor, Cline, Zed, and any other MCP client) to live weather data: forecasts, current conditions, alerts, air quality, marine conditions, lightning, radar, rivers, wildfires, and 85+ years of historical weather. It's built entirely on free public data sources — NOAA, Open-Meteo, USGS, NIFC, NASA FIRMS, RainViewer, and Blitzortung.org — so there is nothing to sign up for and no key to paste in.
|
|
11
|
+
Weather MCP is a [Model Context Protocol](https://modelcontextprotocol.io) server that connects AI assistants (Claude, Cursor, Cline, Zed, and any other MCP client) to live weather data: forecasts, current conditions, alerts, air quality, marine conditions, lightning, radar, rivers, wildfires, and 85+ years of historical weather. It's built entirely on free public data sources — NOAA, Open-Meteo, USGS, NIFC, NASA FIRMS, RainViewer, and Blitzortung.org — so there is nothing to sign up for and no key to paste in. (A few optional keys unlock extras — see [Optional API keys](#optional-api-keys) — but no tool ever requires one.)
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
claude mcp add weather -- npx -y @dangahagan/weather-mcp@latest
|
|
@@ -49,8 +49,8 @@ There are excellent commercial weather MCPs backed by paid APIs and full-time te
|
|
|
49
49
|
Choose this one if you want:
|
|
50
50
|
|
|
51
51
|
- **Genuinely free** — every data source is a free public API. No trial that expires, no credit card, no rate-limited "free tier" bait.
|
|
52
|
-
- **No API keys** — install to first forecast in under a minute. Nothing to configure, nothing to leak into a repo.
|
|
53
|
-
- **Fully open source** — MIT licensed, readable TypeScript, 2,
|
|
52
|
+
- **No API keys** — install to first forecast in under a minute. Nothing to configure, nothing to leak into a repo. ([Three optional keys](#optional-api-keys) add extras if you want them; the default configuration needs none.)
|
|
53
|
+
- **Fully open source** — MIT licensed, readable TypeScript, 2,204 tests. Audit it, fork it, fix it.
|
|
54
54
|
- **Privacy-respecting** — your queries go directly from your machine to public weather APIs. No middleman server, no telemetry.
|
|
55
55
|
- **Breadth** — 17 tools covering weather, safety hazards (lightning, floods, wildfires), marine conditions, air quality, and historical data back to 1940. Most weather MCPs stop at forecasts.
|
|
56
56
|
|
|
@@ -68,7 +68,7 @@ All 17 tools, documented in detail in **[docs/TOOLS.md](./docs/TOOLS.md)**:
|
|
|
68
68
|
| `get_historical_weather` | Hourly/daily observations from 1940 to present | 🌍 Global |
|
|
69
69
|
| `get_weather_summary` | One-call overview combining current conditions, forecast, and alerts (optionally air quality and lightning) | 🌍 Global |
|
|
70
70
|
| `search_location` | Geocode place names to coordinates ("Paris" → 48.85, 2.35) | 🌍 Global |
|
|
71
|
-
| `get_air_quality` | AQI (US/European scales), pollutants, UV index, health guidance; current pollen levels for European locations; optional day-grouped forecast up to 7 days with per-day peak AQI and UV | 🌍 Global |
|
|
71
|
+
| `get_air_quality` | AQI (US/European scales), pollutants, UV index, health guidance; current pollen levels for European locations (or worldwide with an optional key); optional day-grouped forecast up to 7 days with per-day peak AQI and UV | 🌍 Global |
|
|
72
72
|
| `get_marine_conditions` | Wave height, swell, ocean currents, Douglas Sea Scale — includes Great Lakes and major US bays; forecast up to 16 days | 🌍 Global |
|
|
73
73
|
| `get_weather_imagery` | Precipitation radar (static or 2-hour animated loops) + GOES satellite imagery; `composite: true` returns a finished radar map over a base map as an image | 🌍 Global |
|
|
74
74
|
| `get_lightning_activity` | Real-time strike detection with 4-level proximity safety assessment | 🌍 Global |
|
|
@@ -166,7 +166,7 @@ npm run build
|
|
|
166
166
|
|
|
167
167
|
Then point your MCP client at `node /absolute/path/to/weather-mcp/dist/index.js`.
|
|
168
168
|
|
|
169
|
-
Requires Node.js 18+. No API keys, tokens, or accounts needed.
|
|
169
|
+
Requires Node.js 18+. No API keys, tokens, or accounts needed — see [Optional API keys](#optional-api-keys) for the three that add optional extras.
|
|
170
170
|
|
|
171
171
|
### Works with
|
|
172
172
|
|
|
@@ -253,10 +253,45 @@ Supported on `get_forecast`, `get_current_conditions`, and `get_historical_weath
|
|
|
253
253
|
| `API_TIMEOUT_MS` | `30000` | Upstream API timeout (5000–120000) |
|
|
254
254
|
| `WEATHER_LIGHTNING_PREWARM` | `true` | Subscribe saved locations' geohashes at startup so `get_lightning_activity` has coverage before the first query. Set `false` to skip this and avoid the persistent MQTT connection at startup. No effect when the lightning tool is disabled. |
|
|
255
255
|
| `LOG_LEVEL` | `1` | 0=DEBUG, 1=INFO, 2=WARN, 3=ERROR (logs go to stderr) |
|
|
256
|
-
| `NCEI_API_TOKEN` | — | Optional [free NCEI token](https://www.ncdc.noaa.gov/cdo-web/token) for official NOAA climate normals (US); falls back to Open-Meteo automatically |
|
|
256
|
+
| `NCEI_API_TOKEN` | — | Optional [free NCEI token](https://www.ncdc.noaa.gov/cdo-web/token) for official NOAA climate normals (US); falls back to Open-Meteo automatically. See [Optional API keys](#optional-api-keys) |
|
|
257
|
+
| `FIRMS_MAP_KEY` | — | Optional [free FIRMS key](https://firms.modaps.eosdis.nasa.gov/api/map_key/) for targeted wildfire queries and up to 5 days of detection history. See [Optional API keys](#optional-api-keys) |
|
|
258
|
+
| `GOOGLE_POLLEN_API_KEY` | — | Optional key for pollen outside Europe (incl. the US). **Requires a Google Cloud billing account** — free tier is 5,000 lookups/month. See [Optional API keys](#optional-api-keys) and [the setup guide](./docs/GOOGLE_POLLEN_KEY_SETUP.md) |
|
|
257
259
|
|
|
258
260
|
For caching architecture details, see [.github/CACHING.md](./.github/CACHING.md).
|
|
259
261
|
|
|
262
|
+
## Optional API keys
|
|
263
|
+
|
|
264
|
+
**The default is the product.** Every one of the 17 tools works with zero keys,
|
|
265
|
+
zero signup, and zero cost — that is the configuration this project is built
|
|
266
|
+
around and the one most people should use. If that's you, you can skip this
|
|
267
|
+
section entirely.
|
|
268
|
+
|
|
269
|
+
Three optional keys each unlock one extra. Without them the corresponding tool
|
|
270
|
+
still works; it just returns the keyless answer.
|
|
271
|
+
|
|
272
|
+
| Variable | What it costs | What it adds | Without it |
|
|
273
|
+
|----------|---------------|--------------|------------|
|
|
274
|
+
| [`NCEI_API_TOKEN`](https://www.ncdc.noaa.gov/cdo-web/token) | Free registration (email) | Official NOAA station climate normals for US locations | Normals are computed from the Open-Meteo reanalysis archive — global, and the path virtually every user is already on |
|
|
275
|
+
| [`FIRMS_MAP_KEY`](https://firms.modaps.eosdis.nasa.gov/api/map_key/) | Free registration (email) | Targeted wildfire bbox queries with 1–5 days of detection history | Keyless 24-hour regional detection files — `get_wildfire_info` still works globally |
|
|
276
|
+
| `GOOGLE_POLLEN_API_KEY` | **Free tier, but requires a Google Cloud billing account (credit card on file)** — 5,000 lookups/month free, ~$10/1,000 after. [Setup guide](./docs/GOOGLE_POLLEN_KEY_SETUP.md) | Grass/tree/weed Universal Pollen Index outside Europe, including the US (65+ countries) | European pollen via CAMS still works keyless; elsewhere no pollen section renders |
|
|
277
|
+
|
|
278
|
+
The NCEI and FIRMS keys are true free registrations. **The Google Pollen key is
|
|
279
|
+
not** — it has a free usage tier, but Google requires a billing account with a
|
|
280
|
+
payment method to issue it at all. That's why it isn't described as simply
|
|
281
|
+
"free" anywhere in these docs, and why it stays strictly optional.
|
|
282
|
+
|
|
283
|
+
### Standing key policy
|
|
284
|
+
|
|
285
|
+
So the "genuinely free" promise above stays meaningful, this project holds to
|
|
286
|
+
three rules:
|
|
287
|
+
|
|
288
|
+
1. **Optional keys must always have a usable free tier.** A key that only makes
|
|
289
|
+
sense once you're paying doesn't belong here.
|
|
290
|
+
2. **No tool will ever *require* a key.** Every feature has a keyless path, even
|
|
291
|
+
if that path is "this data isn't available for your region".
|
|
292
|
+
3. **Features that would require a *paid* key are out of scope** unless there's
|
|
293
|
+
significant user demand for that specific service.
|
|
294
|
+
|
|
260
295
|
## Coverage & Limitations
|
|
261
296
|
|
|
262
297
|
Being honest about what free public data can and can't do:
|
|
@@ -271,6 +306,7 @@ Being honest about what free public data can and can't do:
|
|
|
271
306
|
| River conditions | ✅ (GloFAS modeled discharge) | Gauge observations + official flood stages via NWPS |
|
|
272
307
|
| Wildfires | ✅ (FIRMS satellite detections) | Named incidents with acreage + containment via NIFC |
|
|
273
308
|
| Fire weather | ✅ (computed Fosberg index + dryness context) | NOAA-published Haines, grassland, red-flag indices |
|
|
309
|
+
| Pollen | 🇪🇺 Europe keyless (CAMS, grains/m³); elsewhere needs an optional key | Universal Pollen Index with `GOOGLE_POLLEN_API_KEY` |
|
|
274
310
|
|
|
275
311
|
- European alerts are matched at **country level** — the keyless MeteoAlarm feeds carry no region polygons, so warnings for a large country may not affect the requested point; the output says so. Canadian alerts use a real bbox query with polygon-backed features.
|
|
276
312
|
- International current conditions default to **model-interpolated** values at the exact coordinates. `source="metar"` returns a **real instrument reading** instead — but from the nearest airport, which may be tens of km away and up to an hour old. The output always names the station, its distance and bearing, and the observation age, so the tradeoff is visible rather than assumed. METAR coverage follows airports, so remote land and open ocean have real gaps.
|
|
@@ -278,6 +314,7 @@ Being honest about what free public data can and can't do:
|
|
|
278
314
|
- Non-US wildfire results are **satellite heat detections, not managed incidents** — no fire names, sizes, or containment percentages exist in the data, detections can include industrial heat sources or agricultural burns, and a clear result is not an all-clear (cloud cover hides fires; small or new fires evade detection). The output frames all of this explicitly. Keyless data covers the last 24 hours; an optional free [`FIRMS_MAP_KEY`](https://firms.modaps.eosdis.nasa.gov/api/map_key/) unlocks targeted queries and up to 5 days of detection history (`day_range`).
|
|
279
315
|
- Non-US fire weather is a **Fosberg Fire Weather Index computed by this server** from current model values, not an agency-published rating — US locations get NOAA's own Haines/grassland/red-flag indices instead. The output says which it is and defers to national fire authorities; its category bands are a project heuristic.
|
|
280
316
|
- Non-US river discharge is **modeled**, not observed, and has no official flood-stage thresholds — levels are shown relative to recent history and the forecast ensemble. The ~5km model grid means the reported channel may be a few km from the requested point; the output says so when it is.
|
|
317
|
+
- Pollen is **Europe-only without a key**: it rides the CAMS European model on the air-quality endpoint, which returns real grains/m³ in Europe and nothing anywhere else. An optional [`GOOGLE_POLLEN_API_KEY`](#optional-api-keys) fills the gap for 65+ countries including the US, as a grass/tree/weed Universal Pollen Index (0–5) rather than per-species counts. Europe keeps the richer keyless data and never contacts Google.
|
|
281
318
|
- Marine data has limited coastal accuracy and is **not suitable for navigation**.
|
|
282
319
|
- Lightning coverage varies by region (community-operated detector network).
|
|
283
320
|
- Open-Meteo's fair-use limit is 10,000 requests/day; the built-in cache makes this hard to hit in normal use.
|
|
@@ -287,7 +324,7 @@ Being honest about what free public data can and can't do:
|
|
|
287
324
|
```bash
|
|
288
325
|
npm run build # Compile TypeScript
|
|
289
326
|
npm run dev # Run in development mode
|
|
290
|
-
npm test # Run all 2,
|
|
327
|
+
npm test # Run all 2,204 tests
|
|
291
328
|
npm run test:coverage # Coverage report
|
|
292
329
|
npm run audit # Dependency vulnerability scan
|
|
293
330
|
```
|
package/dist/config/api.d.ts
CHANGED
|
@@ -49,4 +49,32 @@ export declare const FIRMS_MAP_KEY: string | undefined;
|
|
|
49
49
|
* Check if FIRMS API key is available (key configured)
|
|
50
50
|
*/
|
|
51
51
|
export declare function isFIRMSKeyAvailable(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Google Pollen API key
|
|
54
|
+
*
|
|
55
|
+
* OPTIONAL: Create a key in the Google Cloud console
|
|
56
|
+
* (https://console.cloud.google.com/). Unlike the NCEI and FIRMS keys above,
|
|
57
|
+
* this one is **not a free registration**: it has a free usage tier, but
|
|
58
|
+
* **requires a Google Cloud billing account** (credit card on file).
|
|
59
|
+
*
|
|
60
|
+
* Benefits of providing a key:
|
|
61
|
+
* - Global pollen data for 65+ countries including the US
|
|
62
|
+
* - Grass/Tree/Weed Universal Pollen Index (UPI 0–5)
|
|
63
|
+
*
|
|
64
|
+
* If not provided:
|
|
65
|
+
* - European pollen via CAMS model continues to work
|
|
66
|
+
* - Pollen outside Europe is unavailable
|
|
67
|
+
* - No setup required
|
|
68
|
+
*
|
|
69
|
+
* Rate limits with key:
|
|
70
|
+
* - 5,000 lookups per month (free tier)
|
|
71
|
+
* - ~$10 per 1,000 lookups after free tier
|
|
72
|
+
*
|
|
73
|
+
* Setup guide: docs/GOOGLE_POLLEN_KEY_SETUP.md
|
|
74
|
+
*/
|
|
75
|
+
export declare const GOOGLE_POLLEN_API_KEY: string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Check if Google Pollen API key is available (key configured)
|
|
78
|
+
*/
|
|
79
|
+
export declare function isGooglePollenKeyAvailable(): boolean;
|
|
52
80
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/config/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/config/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc,oBAA6B,CAAC;AAEzD;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,oBAA4B,CAAC;AAEvD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C"}
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/config/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc,oBAA6B,CAAC;AAEzD;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,oBAA4B,CAAC;AAEvD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,qBAAqB,oBAAoC,CAAC;AAEvE;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD"}
|
package/dist/config/api.js
CHANGED
|
@@ -53,4 +53,34 @@ export const FIRMS_MAP_KEY = process.env.FIRMS_MAP_KEY;
|
|
|
53
53
|
export function isFIRMSKeyAvailable() {
|
|
54
54
|
return !!FIRMS_MAP_KEY && FIRMS_MAP_KEY.trim().length > 0;
|
|
55
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Google Pollen API key
|
|
58
|
+
*
|
|
59
|
+
* OPTIONAL: Create a key in the Google Cloud console
|
|
60
|
+
* (https://console.cloud.google.com/). Unlike the NCEI and FIRMS keys above,
|
|
61
|
+
* this one is **not a free registration**: it has a free usage tier, but
|
|
62
|
+
* **requires a Google Cloud billing account** (credit card on file).
|
|
63
|
+
*
|
|
64
|
+
* Benefits of providing a key:
|
|
65
|
+
* - Global pollen data for 65+ countries including the US
|
|
66
|
+
* - Grass/Tree/Weed Universal Pollen Index (UPI 0–5)
|
|
67
|
+
*
|
|
68
|
+
* If not provided:
|
|
69
|
+
* - European pollen via CAMS model continues to work
|
|
70
|
+
* - Pollen outside Europe is unavailable
|
|
71
|
+
* - No setup required
|
|
72
|
+
*
|
|
73
|
+
* Rate limits with key:
|
|
74
|
+
* - 5,000 lookups per month (free tier)
|
|
75
|
+
* - ~$10 per 1,000 lookups after free tier
|
|
76
|
+
*
|
|
77
|
+
* Setup guide: docs/GOOGLE_POLLEN_KEY_SETUP.md
|
|
78
|
+
*/
|
|
79
|
+
export const GOOGLE_POLLEN_API_KEY = process.env.GOOGLE_POLLEN_API_KEY;
|
|
80
|
+
/**
|
|
81
|
+
* Check if Google Pollen API key is available (key configured)
|
|
82
|
+
*/
|
|
83
|
+
export function isGooglePollenKeyAvailable() {
|
|
84
|
+
return !!GOOGLE_POLLEN_API_KEY && GOOGLE_POLLEN_API_KEY.trim().length > 0;
|
|
85
|
+
}
|
|
56
86
|
//# sourceMappingURL=api.js.map
|
package/dist/config/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/config/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAEzD;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5D,CAAC"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/config/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAEzD;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAEvE;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,CAAC,CAAC,qBAAqB,IAAI,qBAAqB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5E,CAAC"}
|
package/dist/config/cache.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare const CacheConfig: {
|
|
|
23
23
|
readonly normals: number;
|
|
24
24
|
readonly serviceStatus: number;
|
|
25
25
|
readonly floodDischarge: number;
|
|
26
|
+
readonly googlePollen: number;
|
|
26
27
|
readonly records: number;
|
|
27
28
|
readonly recordsStation: number;
|
|
28
29
|
readonly metarObservations: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/config/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkDH,eAAO,MAAM,WAAW;aAEtB,OAAO;aAIP,OAAO;aAIP,YAAY;aAGZ,GAAG;iBAGD,eAAe;iBAIf,SAAS;iBAIT,QAAQ;iBAIR,QAAQ;iBAIR,iBAAiB;iBAIjB,MAAM;iBAIN,gBAAgB;iBAIhB,cAAc;iBAKd,OAAO;iBAIP,aAAa;iBAMb,cAAc;iBAMd,OAAO;iBAIP,cAAc;iBAMd,iBAAiB;iBAQjB,YAAY;iBAQZ,cAAc;iBAKd,cAAc;iBAKd,cAAc;iBAKd,iBAAiB;;CAEX,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAYrE"}
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/config/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkDH,eAAO,MAAM,WAAW;aAEtB,OAAO;aAIP,OAAO;aAIP,YAAY;aAGZ,GAAG;iBAGD,eAAe;iBAIf,SAAS;iBAIT,QAAQ;iBAIR,QAAQ;iBAIR,iBAAiB;iBAIjB,MAAM;iBAIN,gBAAgB;iBAIhB,cAAc;iBAKd,OAAO;iBAIP,aAAa;iBAMb,cAAc;iBAMd,YAAY;iBAMZ,OAAO;iBAIP,cAAc;iBAMd,iBAAiB;iBAQjB,YAAY;iBAQZ,cAAc;iBAKd,cAAc;iBAKd,cAAc;iBAKd,iBAAiB;;CAEX,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAYrE"}
|
package/dist/config/cache.js
CHANGED
|
@@ -97,6 +97,11 @@ export const CacheConfig = {
|
|
|
97
97
|
// the 9-point channel-snapping probe (a single lookup fans out to 9
|
|
98
98
|
// grid cells in one request, so caching keeps repeat queries cheap).
|
|
99
99
|
floodDischarge: 6 * HOUR,
|
|
100
|
+
// Google Pollen API (optional global pollen fallback)
|
|
101
|
+
// Pollen models update ~daily; 6h matches the daily-model posture and
|
|
102
|
+
// shields the 5,000/month free-tier quota once the 1h air-quality cache
|
|
103
|
+
// expires. In-memory only — nothing is persisted per Google Maps Platform ToS.
|
|
104
|
+
googlePollen: 6 * HOUR,
|
|
100
105
|
// US daily temperature records (RCC ACIS) — the full 366-slot per-station
|
|
101
106
|
// table. ACIS publishes no rate limits or ToS, so be a good citizen and
|
|
102
107
|
// cache hard: a record changes at most when it is broken, so a stale
|
package/dist/config/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/config/cache.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/config/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
import { OpenMeteoService } from '../services/openmeteo.js';
|
|
5
5
|
import { LocationStore } from '../services/locationStore.js';
|
|
6
6
|
import { GeocodingService } from '../services/geocoding.js';
|
|
7
|
-
|
|
7
|
+
import type { GooglePollenService } from '../services/googlePollen.js';
|
|
8
|
+
export declare function handleGetAirQuality(args: unknown, openMeteoService: OpenMeteoService, locationStore: LocationStore, geocodingService: GeocodingService, googlePollenService?: GooglePollenService): Promise<{
|
|
8
9
|
content: Array<{
|
|
9
10
|
type: string;
|
|
10
11
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"airQualityHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/airQualityHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"airQualityHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/airQualityHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAgB5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAqCvE,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,OAAO,EACb,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA8E7D"}
|
|
@@ -4,9 +4,28 @@
|
|
|
4
4
|
import { resolveLocationAsync, prependLocationLine } from '../utils/locationResolver.js';
|
|
5
5
|
import { validateOptionalBoolean, validatePositiveInteger } from '../utils/validation.js';
|
|
6
6
|
import { getUSAQICategory, getEuropeanAQICategory, getUVIndexCategory, getPollutantInfo, formatPollutantConcentration, shouldUseUSAQI } from '../utils/airQuality.js';
|
|
7
|
+
import { GooglePollenKeyRejectedError } from '../services/googlePollen.js';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
7
9
|
const DEFAULT_FORECAST_DAYS = 5;
|
|
8
10
|
const MAX_FORECAST_DAYS = 7; // Open-Meteo air quality API limit (168 hours)
|
|
9
|
-
|
|
11
|
+
/**
|
|
12
|
+
* The six CAMS European-model pollen species, filtered to those carrying a
|
|
13
|
+
* real number. Non-European points return HTTP 200 with every species null,
|
|
14
|
+
* so an empty result is the "no CAMS coverage here" signal — shared by the
|
|
15
|
+
* render block and the Google-fallback trigger so the two can never drift
|
|
16
|
+
* (design plan D1).
|
|
17
|
+
*/
|
|
18
|
+
function finiteCamsPollen(current) {
|
|
19
|
+
return [
|
|
20
|
+
{ label: 'Alder', value: current.alder_pollen },
|
|
21
|
+
{ label: 'Birch', value: current.birch_pollen },
|
|
22
|
+
{ label: 'Grass', value: current.grass_pollen },
|
|
23
|
+
{ label: 'Mugwort', value: current.mugwort_pollen },
|
|
24
|
+
{ label: 'Olive', value: current.olive_pollen },
|
|
25
|
+
{ label: 'Ragweed', value: current.ragweed_pollen }
|
|
26
|
+
].filter(species => typeof species.value === 'number' && Number.isFinite(species.value));
|
|
27
|
+
}
|
|
28
|
+
export async function handleGetAirQuality(args, openMeteoService, locationStore, geocodingService, googlePollenService) {
|
|
10
29
|
// Resolve location from coordinates, a saved location name, or a geocoded city name
|
|
11
30
|
const resolved = await resolveLocationAsync(args, locationStore, geocodingService);
|
|
12
31
|
const { latitude, longitude } = resolved;
|
|
@@ -17,8 +36,44 @@ export async function handleGetAirQuality(args, openMeteoService, locationStore,
|
|
|
17
36
|
: validatePositiveInteger(rawForecastDays, 'forecast_days', 1, MAX_FORECAST_DAYS);
|
|
18
37
|
// Get air quality data
|
|
19
38
|
const airQualityData = await openMeteoService.getAirQuality(latitude, longitude, forecast, forecastDays);
|
|
39
|
+
// Optional keyed global pollen fallback (design plan D1/D6). Fires only
|
|
40
|
+
// when a key is configured AND the CAMS European model returned nothing
|
|
41
|
+
// for this point — Europe keeps the richer keyless grains/m³ data and
|
|
42
|
+
// never contacts Google. Sequential by necessity: the trigger needs the
|
|
43
|
+
// CAMS answer first.
|
|
44
|
+
//
|
|
45
|
+
// The Google data is garnish, not contract: the whole fetch sits in one
|
|
46
|
+
// try/catch and the air-quality call never fails because of it.
|
|
47
|
+
let googlePollen;
|
|
48
|
+
let googleKeyRejected = false;
|
|
49
|
+
if (googlePollenService &&
|
|
50
|
+
googlePollenService.isKeyAvailable() &&
|
|
51
|
+
airQualityData.current &&
|
|
52
|
+
finiteCamsPollen(airQualityData.current).length === 0) {
|
|
53
|
+
try {
|
|
54
|
+
googlePollen = await googlePollenService.getCurrentPollen(latitude, longitude);
|
|
55
|
+
if (!googlePollen) {
|
|
56
|
+
// Expected outside Google's 65+ covered countries — not a fault.
|
|
57
|
+
logger.info('Google Pollen returned no data for this location');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error instanceof GooglePollenKeyRejectedError) {
|
|
62
|
+
googleKeyRejected = true;
|
|
63
|
+
logger.warn('Google Pollen API key was rejected', {
|
|
64
|
+
service: 'GooglePollen',
|
|
65
|
+
securityEvent: true
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
logger.warn('Google Pollen fallback failed; rendering no pollen section', {
|
|
70
|
+
service: 'GooglePollen'
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
20
75
|
// Format the air quality data for display
|
|
21
|
-
const output = formatAirQuality(airQualityData, latitude, longitude, forecast);
|
|
76
|
+
const output = formatAirQuality(airQualityData, latitude, longitude, forecast, googlePollen, googleKeyRejected);
|
|
22
77
|
return prependLocationLine({
|
|
23
78
|
content: [
|
|
24
79
|
{
|
|
@@ -31,7 +86,7 @@ export async function handleGetAirQuality(args, openMeteoService, locationStore,
|
|
|
31
86
|
/**
|
|
32
87
|
* Format air quality data as markdown
|
|
33
88
|
*/
|
|
34
|
-
function formatAirQuality(data, latitude, longitude, includeForecast) {
|
|
89
|
+
function formatAirQuality(data, latitude, longitude, includeForecast, googlePollen, googleKeyRejected) {
|
|
35
90
|
let output = `# Air Quality Report\n\n`;
|
|
36
91
|
output += `**Location:** ${latitude.toFixed(4)}, ${longitude.toFixed(4)}\n`;
|
|
37
92
|
output += `**Timezone:** ${data.timezone}\n`;
|
|
@@ -122,14 +177,7 @@ function formatAirQuality(data, latitude, longitude, includeForecast) {
|
|
|
122
177
|
// every species null, so the section renders only when at least one species
|
|
123
178
|
// carries a real value — never trust the 200 alone. In-season zeros are
|
|
124
179
|
// meaningful ("none detected") and do render.
|
|
125
|
-
const pollenSpecies =
|
|
126
|
-
{ label: 'Alder', value: current.alder_pollen },
|
|
127
|
-
{ label: 'Birch', value: current.birch_pollen },
|
|
128
|
-
{ label: 'Grass', value: current.grass_pollen },
|
|
129
|
-
{ label: 'Mugwort', value: current.mugwort_pollen },
|
|
130
|
-
{ label: 'Olive', value: current.olive_pollen },
|
|
131
|
-
{ label: 'Ragweed', value: current.ragweed_pollen }
|
|
132
|
-
].filter(species => typeof species.value === 'number' && Number.isFinite(species.value));
|
|
180
|
+
const pollenSpecies = finiteCamsPollen(current);
|
|
133
181
|
if (pollenSpecies.length > 0) {
|
|
134
182
|
output += `## 🌾 Pollen\n\n`;
|
|
135
183
|
for (const species of pollenSpecies) {
|
|
@@ -138,6 +186,19 @@ function formatAirQuality(data, latitude, longitude, includeForecast) {
|
|
|
138
186
|
}
|
|
139
187
|
output += `\n*Pollen from the CAMS European forecast — available for European locations only.*\n\n`;
|
|
140
188
|
}
|
|
189
|
+
else {
|
|
190
|
+
// No CAMS coverage here. Fall back to the optional keyed Google Pollen
|
|
191
|
+
// section, or — if the configured key was rejected — a single
|
|
192
|
+
// misconfiguration note (design plan D5/D6). Otherwise nothing renders,
|
|
193
|
+
// exactly as before.
|
|
194
|
+
const googleSection = formatGooglePollen(googlePollen);
|
|
195
|
+
if (googleSection) {
|
|
196
|
+
output += googleSection;
|
|
197
|
+
}
|
|
198
|
+
else if (googleKeyRejected) {
|
|
199
|
+
output += `*Note: GOOGLE_POLLEN_API_KEY was rejected; global pollen data is unavailable.*\n\n`;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
141
202
|
// Show secondary AQI for reference
|
|
142
203
|
if (useUSAQI && current.european_aqi !== undefined) {
|
|
143
204
|
output += `*European AQI: ${Math.round(current.european_aqi)} (${getEuropeanAQICategory(current.european_aqi).level})*\n\n`;
|
|
@@ -153,6 +214,58 @@ function formatAirQuality(data, latitude, longitude, includeForecast) {
|
|
|
153
214
|
}
|
|
154
215
|
return output;
|
|
155
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Render the Google Pollen day-1 section that fills the CAMS slot outside
|
|
219
|
+
* Europe (design plan D5). Returns an empty string when there is nothing
|
|
220
|
+
* worth showing, so the caller can fall through to the key-rejected note.
|
|
221
|
+
*
|
|
222
|
+
* Only types whose `indexInfo.value` is a finite number render: Google omits
|
|
223
|
+
* `indexInfo` entirely for out-of-season types (upstream (c)), while a zero
|
|
224
|
+
* UPI that *does* carry `indexInfo` is meaningful ("none detected") and
|
|
225
|
+
* renders — mirroring the CAMS olive-0 rule.
|
|
226
|
+
*
|
|
227
|
+
* The attribution sentence is **mandatory and exact** — the Google Pollen
|
|
228
|
+
* API policies require the string "Source: Includes pollen data from Google"
|
|
229
|
+
* on or next to the data (upstream (d)). Do not reword it.
|
|
230
|
+
*/
|
|
231
|
+
function formatGooglePollen(daily) {
|
|
232
|
+
if (!daily) {
|
|
233
|
+
return '';
|
|
234
|
+
}
|
|
235
|
+
const types = (daily.pollenTypeInfo ?? []).filter(type => typeof type.indexInfo?.value === 'number' && Number.isFinite(type.indexInfo.value));
|
|
236
|
+
if (types.length === 0) {
|
|
237
|
+
return '';
|
|
238
|
+
}
|
|
239
|
+
let section = `## 🌾 Pollen\n\n`;
|
|
240
|
+
for (const type of types) {
|
|
241
|
+
// Google sends "Grass"/"Tree"/"Weed" as displayName; fall back to the
|
|
242
|
+
// enum code (GRASS) title-cased if a response ever omits it.
|
|
243
|
+
const label = type.displayName ?? titleCase(type.code ?? 'Pollen');
|
|
244
|
+
const category = type.indexInfo?.category;
|
|
245
|
+
const seasonSuffix = type.inSeason === true ? ' — in season' : '';
|
|
246
|
+
section += `**${label}:** ${type.indexInfo?.value}`;
|
|
247
|
+
section += category ? ` (${category})` : '';
|
|
248
|
+
section += `${seasonSuffix}\n`;
|
|
249
|
+
}
|
|
250
|
+
const inSeasonPlants = (daily.plantInfo ?? [])
|
|
251
|
+
.filter(plant => plant.inSeason === true && plant.displayName)
|
|
252
|
+
.map(plant => {
|
|
253
|
+
const category = plant.indexInfo?.category;
|
|
254
|
+
return category ? `${plant.displayName} (${category})` : `${plant.displayName}`;
|
|
255
|
+
});
|
|
256
|
+
if (inSeasonPlants.length > 0) {
|
|
257
|
+
section += `\nIn season: ${inSeasonPlants.join(', ')}\n`;
|
|
258
|
+
}
|
|
259
|
+
section += `\n*Universal Pollen Index (0–5) for today. Source: Includes pollen data from Google.*\n\n`;
|
|
260
|
+
return section;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* "GRASS" -> "Grass". Only used as a defensive fallback when a pollen type
|
|
264
|
+
* arrives without a displayName.
|
|
265
|
+
*/
|
|
266
|
+
function titleCase(value) {
|
|
267
|
+
return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
|
|
268
|
+
}
|
|
156
269
|
/**
|
|
157
270
|
* Format the hourly AQI forecast grouped by local calendar day, with 6-hour
|
|
158
271
|
* period ranges inside each day. Hours before the current observation time
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"airQualityHandler.js","sourceRoot":"","sources":["../../src/handlers/airQualityHandler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"airQualityHandler.js","sourceRoot":"","sources":["../../src/handlers/airQualityHandler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@ import { MeteoAlarmService } from './services/meteoalarm.js';
|
|
|
18
18
|
import { GeoMetService } from './services/geomet.js';
|
|
19
19
|
import { NIFCService } from './services/nifc.js';
|
|
20
20
|
import { FIRMSService } from './services/firms.js';
|
|
21
|
+
import { GooglePollenService } from './services/googlePollen.js';
|
|
21
22
|
import { GeocodingService } from './services/geocoding.js';
|
|
22
23
|
import { LocationStore } from './services/locationStore.js';
|
|
23
24
|
import { blitzortungService } from './services/blitzortung.js';
|
|
@@ -146,6 +147,12 @@ const nifcService = new NIFCService();
|
|
|
146
147
|
* queries with day_range up to 5.
|
|
147
148
|
*/
|
|
148
149
|
const firmsService = new FIRMSService();
|
|
150
|
+
/**
|
|
151
|
+
* Initialize the Google Pollen API service for global pollen data fallback.
|
|
152
|
+
* Optional keyed global pollen fallback; without GOOGLE_POLLEN_API_KEY the
|
|
153
|
+
* service is never called and European pollen via CAMS continues to work unchanged.
|
|
154
|
+
*/
|
|
155
|
+
const googlePollenService = new GooglePollenService();
|
|
149
156
|
/**
|
|
150
157
|
* Initialize the Geocoding service with multi-provider support
|
|
151
158
|
* No API key required - uses Census.gov, Nominatim, and Open-Meteo
|
|
@@ -448,7 +455,7 @@ const TOOL_DEFINITIONS = {
|
|
|
448
455
|
},
|
|
449
456
|
get_air_quality: {
|
|
450
457
|
name: 'get_air_quality',
|
|
451
|
-
description: 'Get air quality data including AQI (Air Quality Index), pollutant concentrations, and UV index for a location (global coverage). Use this when asked about "air quality", "pollution", "AQI", "UV index", "safe to exercise outside", "pollen count", "allergy day", or health-related environmental conditions. Returns current conditions and an optional forecast grouped by day (up to 7 days / 168 hours via forecast_days). Shows appropriate AQI scale (US AQI for US locations, European EAQI elsewhere) with health recommendations. Pollutants include PM2.5, PM10, ozone, NO2, SO2, and CO. For European locations, current pollen levels (alder, birch, grass, mugwort, olive, ragweed) are included automatically; pollen data is not available outside Europe. Provide the location as coordinates (latitude+longitude), a saved location_name, or a free-text city_name.',
|
|
458
|
+
description: 'Get air quality data including AQI (Air Quality Index), pollutant concentrations, and UV index for a location (global coverage). Use this when asked about "air quality", "pollution", "AQI", "UV index", "safe to exercise outside", "pollen count", "allergy day", or health-related environmental conditions. Returns current conditions and an optional forecast grouped by day (up to 7 days / 168 hours via forecast_days). Shows appropriate AQI scale (US AQI for US locations, European EAQI elsewhere) with health recommendations. Pollutants include PM2.5, PM10, ozone, NO2, SO2, and CO. For European locations, current pollen levels (alder, birch, grass, mugwort, olive, ragweed) are included automatically in grains/m³ and no API key is required; elsewhere, a grass/tree/weed Universal Pollen Index (0–5) is included when an optional GOOGLE_POLLEN_API_KEY is configured; without that key, pollen data is not available outside Europe. Provide the location as coordinates (latitude+longitude), a saved location_name, or a free-text city_name.',
|
|
452
459
|
inputSchema: {
|
|
453
460
|
type: 'object',
|
|
454
461
|
properties: {
|
|
@@ -743,7 +750,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
743
750
|
case 'search_location':
|
|
744
751
|
return await withAnalytics('search_location', async () => handleSearchLocation(args, geocodingService));
|
|
745
752
|
case 'get_air_quality':
|
|
746
|
-
return await withAnalytics('get_air_quality', async () => handleGetAirQuality(args, openMeteoService, locationStore, geocodingService));
|
|
753
|
+
return await withAnalytics('get_air_quality', async () => handleGetAirQuality(args, openMeteoService, locationStore, geocodingService, googlePollenService));
|
|
747
754
|
case 'get_marine_conditions':
|
|
748
755
|
return await withAnalytics('get_marine_conditions', async () => handleGetMarineConditions(args, noaaService, openMeteoService, locationStore, geocodingService));
|
|
749
756
|
case 'get_weather_imagery':
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for fetching Google Pollen API (`pollen.googleapis.com`) day-1
|
|
3
|
+
* forecasts — the **optional keyed global fallback** for pollen data.
|
|
4
|
+
*
|
|
5
|
+
* Open-Meteo's air-quality endpoint carries pollen only from the CAMS
|
|
6
|
+
* *European* model: real grains/m³ in Europe, all-null everywhere else. This
|
|
7
|
+
* service exists purely to fill that gap for the rest of the world when the
|
|
8
|
+
* caller has configured a `GOOGLE_POLLEN_API_KEY` — see
|
|
9
|
+
* `docs/plans/global-pollen-fallback-plan.md` D2/D3. **Europe keeps the richer
|
|
10
|
+
* keyless CAMS grains/m³ data and never contacts this service** — the
|
|
11
|
+
* air-quality handler only calls in when every CAMS species comes back null.
|
|
12
|
+
*
|
|
13
|
+
* **Security: the key lives in the URL (query string).** Error mapping below
|
|
14
|
+
* never logs or throws the request URL, and never interpolates the raw axios
|
|
15
|
+
* error message/object into a thrown message or a log call — every thrown
|
|
16
|
+
* error is a fixed, pre-written string (the `firms.ts`/`nifc.ts`
|
|
17
|
+
* fixed-message-per-bucket style), so the key can never leak through a log
|
|
18
|
+
* line or an error surfaced to a caller. Logs carry only `{ status, code }`;
|
|
19
|
+
* coordinates in log metadata go through `redactCoordinatesForLogging`.
|
|
20
|
+
*/
|
|
21
|
+
import type { GooglePollenDailyInfo } from '../types/googlePollen.js';
|
|
22
|
+
/**
|
|
23
|
+
* Thrown when the Google Pollen API rejects the configured
|
|
24
|
+
* `GOOGLE_POLLEN_API_KEY` (HTTP 400/403 with a key-rejection marker in the
|
|
25
|
+
* response body — see `mapPollenApiError`). Deliberately carries a fixed,
|
|
26
|
+
* sanitized message — never the key or the request URL — so callers (the
|
|
27
|
+
* air-quality handler) can catch this specific case and render a
|
|
28
|
+
* misconfiguration note without ever touching the rejected key again.
|
|
29
|
+
*
|
|
30
|
+
* Not `ApiError` — `ApiServiceName` (`src/errors/ApiError.ts`) is a closed
|
|
31
|
+
* union and this service deliberately stays outside it, mirroring
|
|
32
|
+
* `FIRMSKeyRejectedError`.
|
|
33
|
+
*/
|
|
34
|
+
export declare class GooglePollenKeyRejectedError extends Error {
|
|
35
|
+
constructor();
|
|
36
|
+
}
|
|
37
|
+
export interface GooglePollenServiceConfig {
|
|
38
|
+
timeout?: number;
|
|
39
|
+
/** Overrides the `GOOGLE_POLLEN_API_KEY` env var — primarily for tests. */
|
|
40
|
+
apiKey?: string;
|
|
41
|
+
}
|
|
42
|
+
export declare class GooglePollenService {
|
|
43
|
+
private client;
|
|
44
|
+
private cache;
|
|
45
|
+
private readonly apiKey;
|
|
46
|
+
constructor(config?: GooglePollenServiceConfig);
|
|
47
|
+
/**
|
|
48
|
+
* Get cache statistics
|
|
49
|
+
*/
|
|
50
|
+
getCacheStats(): import("../utils/cache.js").CacheStats;
|
|
51
|
+
/**
|
|
52
|
+
* Clear the cache
|
|
53
|
+
*/
|
|
54
|
+
clearCache(): void;
|
|
55
|
+
/**
|
|
56
|
+
* True when a non-empty Google Pollen API key is configured.
|
|
57
|
+
*/
|
|
58
|
+
isKeyAvailable(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Day-1 ("current") pollen forecast for a location.
|
|
61
|
+
*
|
|
62
|
+
* Returns `undefined` when the region has no data (uncovered region, or an
|
|
63
|
+
* empty/absent `dailyInfo`) — that outcome is cached as a null sentinel so
|
|
64
|
+
* the same location isn't re-probed for the TTL. **No retries.**
|
|
65
|
+
*
|
|
66
|
+
* @throws {GooglePollenKeyRejectedError} the configured key was rejected
|
|
67
|
+
* @throws {Error} no key configured, invalid coordinates, or any other failure
|
|
68
|
+
*/
|
|
69
|
+
getCurrentPollen(latitude: number, longitude: number): Promise<GooglePollenDailyInfo | undefined>;
|
|
70
|
+
private fetchCurrentPollen;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=googlePollen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googlePollen.d.ts","sourceRoot":"","sources":["../../src/services/googlePollen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,OAAO,KAAK,EAAE,qBAAqB,EAAwB,MAAM,0BAA0B,CAAC;AAE5F;;;;;;;;;;;GAWG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,cAGC;CACF;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA0BD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAgB;IAI9B,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,YAAY,MAAM,GAAE,yBAA8B,EAejD;IAED;;OAEG;IACH,aAAa,2CAEZ;IAED;;OAEG;IACH,UAAU,IAAI,IAAI,CAEjB;IAED;;OAEG;IACH,cAAc,IAAI,OAAO,CAExB;IAED;;;;;;;;;OASG;IACG,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CA4B5C;YAEa,kBAAkB;CAgDjC"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for fetching Google Pollen API (`pollen.googleapis.com`) day-1
|
|
3
|
+
* forecasts — the **optional keyed global fallback** for pollen data.
|
|
4
|
+
*
|
|
5
|
+
* Open-Meteo's air-quality endpoint carries pollen only from the CAMS
|
|
6
|
+
* *European* model: real grains/m³ in Europe, all-null everywhere else. This
|
|
7
|
+
* service exists purely to fill that gap for the rest of the world when the
|
|
8
|
+
* caller has configured a `GOOGLE_POLLEN_API_KEY` — see
|
|
9
|
+
* `docs/plans/global-pollen-fallback-plan.md` D2/D3. **Europe keeps the richer
|
|
10
|
+
* keyless CAMS grains/m³ data and never contacts this service** — the
|
|
11
|
+
* air-quality handler only calls in when every CAMS species comes back null.
|
|
12
|
+
*
|
|
13
|
+
* **Security: the key lives in the URL (query string).** Error mapping below
|
|
14
|
+
* never logs or throws the request URL, and never interpolates the raw axios
|
|
15
|
+
* error message/object into a thrown message or a log call — every thrown
|
|
16
|
+
* error is a fixed, pre-written string (the `firms.ts`/`nifc.ts`
|
|
17
|
+
* fixed-message-per-bucket style), so the key can never leak through a log
|
|
18
|
+
* line or an error surfaced to a caller. Logs carry only `{ status, code }`;
|
|
19
|
+
* coordinates in log metadata go through `redactCoordinatesForLogging`.
|
|
20
|
+
*/
|
|
21
|
+
import axios from 'axios';
|
|
22
|
+
import { Cache } from '../utils/cache.js';
|
|
23
|
+
import { CacheConfig } from '../config/cache.js';
|
|
24
|
+
import { GOOGLE_POLLEN_API_KEY } from '../config/api.js';
|
|
25
|
+
import { validateLatitude, validateLongitude } from '../utils/validation.js';
|
|
26
|
+
import { logger, redactCoordinatesForLogging } from '../utils/logger.js';
|
|
27
|
+
import { getUserAgent } from '../utils/version.js';
|
|
28
|
+
/**
|
|
29
|
+
* Thrown when the Google Pollen API rejects the configured
|
|
30
|
+
* `GOOGLE_POLLEN_API_KEY` (HTTP 400/403 with a key-rejection marker in the
|
|
31
|
+
* response body — see `mapPollenApiError`). Deliberately carries a fixed,
|
|
32
|
+
* sanitized message — never the key or the request URL — so callers (the
|
|
33
|
+
* air-quality handler) can catch this specific case and render a
|
|
34
|
+
* misconfiguration note without ever touching the rejected key again.
|
|
35
|
+
*
|
|
36
|
+
* Not `ApiError` — `ApiServiceName` (`src/errors/ApiError.ts`) is a closed
|
|
37
|
+
* union and this service deliberately stays outside it, mirroring
|
|
38
|
+
* `FIRMSKeyRejectedError`.
|
|
39
|
+
*/
|
|
40
|
+
export class GooglePollenKeyRejectedError extends Error {
|
|
41
|
+
constructor() {
|
|
42
|
+
super('Google Pollen API key was rejected by the service');
|
|
43
|
+
this.name = 'GooglePollenKeyRejectedError';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const POLLEN_API_URL = 'https://pollen.googleapis.com/v1/forecast:lookup';
|
|
47
|
+
// **Live-verified 2026-08-18** (upstream (f) in the design plan): a rejected
|
|
48
|
+
// key returns HTTP 400 with a body carrying both `API key not valid` and
|
|
49
|
+
// `API_KEY_INVALID`. `PERMISSION_DENIED` was not observed (it belongs to an
|
|
50
|
+
// API-not-enabled / key-restricted-away project) and is kept as a defensive
|
|
51
|
+
// third marker.
|
|
52
|
+
const KEY_REJECTION_MARKERS = ['API_KEY_INVALID', 'API key not valid', 'PERMISSION_DENIED'];
|
|
53
|
+
// **Live-verified 2026-08-18:** a region Google does not cover (open ocean,
|
|
54
|
+
// Antarctica) answers HTTP 400 `INVALID_ARGUMENT` with this message — *not*
|
|
55
|
+
// the HTTP 200 with an empty `dailyInfo` the design anticipated. That is a
|
|
56
|
+
// "no data here" answer rather than a fault, so it resolves to `undefined`
|
|
57
|
+
// and caches the null sentinel instead of throwing; otherwise an uncovered
|
|
58
|
+
// location would re-query Google on every single call, burning quota the
|
|
59
|
+
// TTL was meant to protect.
|
|
60
|
+
//
|
|
61
|
+
// Deliberately matched on this specific message, not on the status: a
|
|
62
|
+
// genuinely malformed request is *also* 400 `INVALID_ARGUMENT`, and silently
|
|
63
|
+
// caching that as "no pollen here" would mask a real bug for the whole TTL.
|
|
64
|
+
// If Google rewords the message the match simply fails and the throwing path
|
|
65
|
+
// takes over, which still ends at a silent no-section — safe degradation.
|
|
66
|
+
const LOCATION_UNAVAILABLE_MARKER = 'Information is unavailable for this location';
|
|
67
|
+
export class GooglePollenService {
|
|
68
|
+
client;
|
|
69
|
+
// Cached value distinguishes "not yet cached" (Cache.get -> undefined) from
|
|
70
|
+
// a cached "no data for this location" result (Cache.get -> null) so an
|
|
71
|
+
// uncovered region isn't re-probed for the TTL — see getCurrentPollen.
|
|
72
|
+
cache;
|
|
73
|
+
apiKey;
|
|
74
|
+
constructor(config = {}) {
|
|
75
|
+
const { timeout = CacheConfig.apiTimeoutMs, apiKey = GOOGLE_POLLEN_API_KEY } = config;
|
|
76
|
+
this.apiKey = apiKey;
|
|
77
|
+
this.cache = new Cache(CacheConfig.maxSize);
|
|
78
|
+
this.client = axios.create({
|
|
79
|
+
timeout,
|
|
80
|
+
headers: {
|
|
81
|
+
'User-Agent': getUserAgent()
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get cache statistics
|
|
87
|
+
*/
|
|
88
|
+
getCacheStats() {
|
|
89
|
+
return this.cache.getStats();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Clear the cache
|
|
93
|
+
*/
|
|
94
|
+
clearCache() {
|
|
95
|
+
this.cache.clear();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* True when a non-empty Google Pollen API key is configured.
|
|
99
|
+
*/
|
|
100
|
+
isKeyAvailable() {
|
|
101
|
+
return !!this.apiKey && this.apiKey.trim().length > 0;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Day-1 ("current") pollen forecast for a location.
|
|
105
|
+
*
|
|
106
|
+
* Returns `undefined` when the region has no data (uncovered region, or an
|
|
107
|
+
* empty/absent `dailyInfo`) — that outcome is cached as a null sentinel so
|
|
108
|
+
* the same location isn't re-probed for the TTL. **No retries.**
|
|
109
|
+
*
|
|
110
|
+
* @throws {GooglePollenKeyRejectedError} the configured key was rejected
|
|
111
|
+
* @throws {Error} no key configured, invalid coordinates, or any other failure
|
|
112
|
+
*/
|
|
113
|
+
async getCurrentPollen(latitude, longitude) {
|
|
114
|
+
validateLatitude(latitude);
|
|
115
|
+
validateLongitude(longitude);
|
|
116
|
+
if (!this.isKeyAvailable()) {
|
|
117
|
+
throw new Error('Google Pollen API key is not configured.');
|
|
118
|
+
}
|
|
119
|
+
// Rounded to 2 decimal places (~1.1km) — FIRMS precedent — plenty
|
|
120
|
+
// precise for a cache key while keeping nearby repeat queries as hits.
|
|
121
|
+
const cacheKey = Cache.generateKey('google-pollen', latitude.toFixed(2), longitude.toFixed(2));
|
|
122
|
+
if (CacheConfig.enabled) {
|
|
123
|
+
const cached = this.cache.get(cacheKey);
|
|
124
|
+
if (cached !== undefined) {
|
|
125
|
+
const redacted = redactCoordinatesForLogging(latitude, longitude);
|
|
126
|
+
logger.info('Google Pollen cache hit', { lat: redacted.lat, lon: redacted.lon });
|
|
127
|
+
return cached === null ? undefined : cached;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const dailyInfo = await this.fetchCurrentPollen(latitude, longitude);
|
|
131
|
+
if (CacheConfig.enabled) {
|
|
132
|
+
this.cache.set(cacheKey, dailyInfo ?? null, CacheConfig.ttl.googlePollen);
|
|
133
|
+
}
|
|
134
|
+
return dailyInfo;
|
|
135
|
+
}
|
|
136
|
+
async fetchCurrentPollen(latitude, longitude) {
|
|
137
|
+
// The key rides in the request params, not the logged metadata below —
|
|
138
|
+
// never log or throw this value (see module doc comment).
|
|
139
|
+
const key = this.apiKey; // isKeyAvailable() already checked by the caller
|
|
140
|
+
const redacted = redactCoordinatesForLogging(latitude, longitude);
|
|
141
|
+
logger.info('Querying Google Pollen API', { lat: redacted.lat, lon: redacted.lon });
|
|
142
|
+
try {
|
|
143
|
+
const response = await this.client.get(POLLEN_API_URL, {
|
|
144
|
+
params: {
|
|
145
|
+
key,
|
|
146
|
+
'location.latitude': latitude,
|
|
147
|
+
'location.longitude': longitude,
|
|
148
|
+
days: 1,
|
|
149
|
+
languageCode: 'en'
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
const dailyInfo = response.data?.dailyInfo;
|
|
153
|
+
if (!dailyInfo || dailyInfo.length === 0) {
|
|
154
|
+
logger.info('Google Pollen API returned no daily data for this location');
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
return dailyInfo[0];
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
// Deliberately do not pass the raw axios error object to the logger —
|
|
161
|
+
// it carries the request config (including the key in `params`). Only
|
|
162
|
+
// fixed, sanitized fields are logged.
|
|
163
|
+
const status = axios.isAxiosError(error) ? error.response?.status : undefined;
|
|
164
|
+
const code = axios.isAxiosError(error) ? error.code : undefined;
|
|
165
|
+
// An uncovered region is expected, not a fault — resolve to "no data"
|
|
166
|
+
// so the caller caches the null sentinel and stops re-probing.
|
|
167
|
+
if (isLocationUnavailable(error)) {
|
|
168
|
+
logger.info('Google Pollen has no coverage for this location', { status });
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
logger.error('Google Pollen API request failed', undefined, { status, code });
|
|
172
|
+
throw mapPollenApiError(error);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Stringify an axios error's response body for marker searching. The body may
|
|
178
|
+
* arrive as a string, or as a JSON-parsed object shape like
|
|
179
|
+
* `{ error: { status: 'INVALID_ARGUMENT', message: '…' } }` — coerce both.
|
|
180
|
+
* Never includes the request URL, so this is safe to search but must never be
|
|
181
|
+
* logged or thrown.
|
|
182
|
+
*/
|
|
183
|
+
function responseBodyText(error) {
|
|
184
|
+
if (!axios.isAxiosError(error)) {
|
|
185
|
+
return '';
|
|
186
|
+
}
|
|
187
|
+
const rawData = error.response?.data;
|
|
188
|
+
if (typeof rawData === 'object' && rawData !== null) {
|
|
189
|
+
try {
|
|
190
|
+
return JSON.stringify(rawData);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// JSON.stringify can throw on circular structures.
|
|
194
|
+
return String(rawData);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return String(rawData ?? '');
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* True for the live-verified "this location has no pollen coverage" answer —
|
|
201
|
+
* HTTP 400 whose body carries `LOCATION_UNAVAILABLE_MARKER` and *no*
|
|
202
|
+
* key-rejection marker. See that constant for why the match is on the message
|
|
203
|
+
* rather than the status.
|
|
204
|
+
*/
|
|
205
|
+
function isLocationUnavailable(error) {
|
|
206
|
+
if (!axios.isAxiosError(error) || error.response?.status !== 400) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
const bodyText = responseBodyText(error);
|
|
210
|
+
if (KEY_REJECTION_MARKERS.some(marker => bodyText.includes(marker))) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
return bodyText.includes(LOCATION_UNAVAILABLE_MARKER);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Map a Google Pollen API axios failure to a fixed, sanitized `Error` (or
|
|
217
|
+
* `GooglePollenKeyRejectedError` for a confirmed key rejection). Copies the
|
|
218
|
+
* `firms.ts` `mapAreaApiError` fixed-message-per-bucket style; never
|
|
219
|
+
* interpolates `error.message` or the raw response body into a thrown
|
|
220
|
+
* message.
|
|
221
|
+
*
|
|
222
|
+
* The key-rejection markers below are **web-verified only** (design plan
|
|
223
|
+
* upstream (f)) — to be confirmed/adjusted once T6 runs live verification
|
|
224
|
+
* against a real key.
|
|
225
|
+
*/
|
|
226
|
+
function mapPollenApiError(error) {
|
|
227
|
+
if (axios.isAxiosError(error)) {
|
|
228
|
+
if (error.code === 'ECONNABORTED') {
|
|
229
|
+
return new Error('Google Pollen API request timed out. The service may be temporarily unavailable.');
|
|
230
|
+
}
|
|
231
|
+
const status = error.response?.status;
|
|
232
|
+
if (status === 400 || status === 403) {
|
|
233
|
+
const bodyText = responseBodyText(error);
|
|
234
|
+
if (KEY_REJECTION_MARKERS.some(marker => bodyText.includes(marker))) {
|
|
235
|
+
return new GooglePollenKeyRejectedError();
|
|
236
|
+
}
|
|
237
|
+
return new Error('Invalid query parameters for Google Pollen API.');
|
|
238
|
+
}
|
|
239
|
+
if (status === 429) {
|
|
240
|
+
return new Error('Google Pollen API monthly quota exceeded. Please try again later.');
|
|
241
|
+
}
|
|
242
|
+
if (status !== undefined) {
|
|
243
|
+
return new Error('Google Pollen API returned an error response.');
|
|
244
|
+
}
|
|
245
|
+
return new Error('Failed to reach Google Pollen API. Please check your network connection.');
|
|
246
|
+
}
|
|
247
|
+
return new Error('Failed to fetch pollen data from Google Pollen API.');
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=googlePollen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googlePollen.js","sourceRoot":"","sources":["../../src/services/googlePollen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Pollen API response types
|
|
3
|
+
*
|
|
4
|
+
* Subset-only TypeScript interfaces for the Google Pollen API `v1/forecast:lookup`
|
|
5
|
+
* response. All fields are optional as a defensive measure.
|
|
6
|
+
*
|
|
7
|
+
* Important: `indexInfo` is **omitted entirely** for out-of-season pollen types
|
|
8
|
+
* (upstream design D3/C). Every use of `indexInfo` must guard against undefined.
|
|
9
|
+
*
|
|
10
|
+
* Field casing is web-verified (2026-08-18). Exact casing is on the T6
|
|
11
|
+
* live-verification to-verify list.
|
|
12
|
+
*
|
|
13
|
+
* Reference: https://developers.google.com/maps/documentation/pollen/overview
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Top-level response from the Google Pollen API
|
|
17
|
+
*/
|
|
18
|
+
export interface GooglePollenResponse {
|
|
19
|
+
dailyInfo?: GooglePollenDailyInfo[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Daily pollen information for a single date
|
|
23
|
+
*/
|
|
24
|
+
export interface GooglePollenDailyInfo {
|
|
25
|
+
date?: GooglePollenDate;
|
|
26
|
+
pollenTypeInfo?: GooglePollenTypeInfo[];
|
|
27
|
+
plantInfo?: GooglePollenPlantInfo[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Date representation matching Google's Date message format
|
|
31
|
+
*/
|
|
32
|
+
export interface GooglePollenDate {
|
|
33
|
+
year?: number;
|
|
34
|
+
month?: number;
|
|
35
|
+
day?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Pollen type information (GRASS, TREE, WEED)
|
|
39
|
+
*/
|
|
40
|
+
export interface GooglePollenTypeInfo {
|
|
41
|
+
code?: string;
|
|
42
|
+
displayName?: string;
|
|
43
|
+
inSeason?: boolean;
|
|
44
|
+
indexInfo?: GooglePollenIndexInfo;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Universal Pollen Index (UPI) information
|
|
48
|
+
*
|
|
49
|
+
* `value` is a number 0-5 indicating pollen levels.
|
|
50
|
+
* `category` is a human-readable string like "Low", "Moderate", "High", "Very High".
|
|
51
|
+
*
|
|
52
|
+
* Note: This field is omitted entirely for out-of-season pollen types.
|
|
53
|
+
* All uses must guard: `if (typeInfo.indexInfo?.value !== undefined)`
|
|
54
|
+
*/
|
|
55
|
+
export interface GooglePollenIndexInfo {
|
|
56
|
+
value?: number;
|
|
57
|
+
category?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Plant-specific pollen information
|
|
61
|
+
*/
|
|
62
|
+
export interface GooglePollenPlantInfo {
|
|
63
|
+
displayName?: string;
|
|
64
|
+
inSeason?: boolean;
|
|
65
|
+
indexInfo?: GooglePollenIndexInfo;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=googlePollen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googlePollen.d.ts","sourceRoot":"","sources":["../../src/types/googlePollen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,cAAc,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACxC,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACnC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Pollen API response types
|
|
3
|
+
*
|
|
4
|
+
* Subset-only TypeScript interfaces for the Google Pollen API `v1/forecast:lookup`
|
|
5
|
+
* response. All fields are optional as a defensive measure.
|
|
6
|
+
*
|
|
7
|
+
* Important: `indexInfo` is **omitted entirely** for out-of-season pollen types
|
|
8
|
+
* (upstream design D3/C). Every use of `indexInfo` must guard against undefined.
|
|
9
|
+
*
|
|
10
|
+
* Field casing is web-verified (2026-08-18). Exact casing is on the T6
|
|
11
|
+
* live-verification to-verify list.
|
|
12
|
+
*
|
|
13
|
+
* Reference: https://developers.google.com/maps/documentation/pollen/overview
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=googlePollen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googlePollen.js","sourceRoot":"","sources":["../../src/types/googlePollen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dangahagan/weather-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.22.0",
|
|
4
4
|
"description": "MCP server giving AI assistants 17 weather tools with zero API keys: global forecasts, current conditions, alerts, air quality, marine conditions, lightning detection, radar imagery, river levels, wildfire tracking, and historical weather back to 1940. Built entirely on free public APIs (NOAA, Open-Meteo, USGS, NIFC).",
|
|
5
5
|
"mcpName": "io.github.dgahagan/weather-mcp",
|
|
6
6
|
"main": "dist/index.js",
|