@jablum/weather-mcp 1.7.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/LICENSE +21 -0
- package/README.md +1319 -0
- package/dist/analytics/anonymizer.d.ts +37 -0
- package/dist/analytics/anonymizer.d.ts.map +1 -0
- package/dist/analytics/anonymizer.js +112 -0
- package/dist/analytics/anonymizer.js.map +1 -0
- package/dist/analytics/collector.d.ts +72 -0
- package/dist/analytics/collector.d.ts.map +1 -0
- package/dist/analytics/collector.js +282 -0
- package/dist/analytics/collector.js.map +1 -0
- package/dist/analytics/config.d.ts +15 -0
- package/dist/analytics/config.d.ts.map +1 -0
- package/dist/analytics/config.js +172 -0
- package/dist/analytics/config.js.map +1 -0
- package/dist/analytics/index.d.ts +8 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +7 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/middleware.d.ts +33 -0
- package/dist/analytics/middleware.d.ts.map +1 -0
- package/dist/analytics/middleware.js +99 -0
- package/dist/analytics/middleware.js.map +1 -0
- package/dist/analytics/transport.d.ts +11 -0
- package/dist/analytics/transport.d.ts.map +1 -0
- package/dist/analytics/transport.js +92 -0
- package/dist/analytics/transport.js.map +1 -0
- package/dist/analytics/types.d.ts +74 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +6 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/config/api.d.ts +30 -0
- package/dist/config/api.d.ts.map +1 -0
- package/dist/config/api.js +32 -0
- package/dist/config/api.js.map +1 -0
- package/dist/config/cache.d.ts +31 -0
- package/dist/config/cache.d.ts.map +1 -0
- package/dist/config/cache.js +108 -0
- package/dist/config/cache.js.map +1 -0
- package/dist/config/displayThresholds.d.ts +83 -0
- package/dist/config/displayThresholds.d.ts.map +1 -0
- package/dist/config/displayThresholds.js +83 -0
- package/dist/config/displayThresholds.js.map +1 -0
- package/dist/config/tools.d.ts +44 -0
- package/dist/config/tools.d.ts.map +1 -0
- package/dist/config/tools.js +269 -0
- package/dist/config/tools.js.map +1 -0
- package/dist/errors/ApiError.d.ts +62 -0
- package/dist/errors/ApiError.d.ts.map +1 -0
- package/dist/errors/ApiError.js +171 -0
- package/dist/errors/ApiError.js.map +1 -0
- package/dist/handlers/airQualityHandler.d.ts +11 -0
- package/dist/handlers/airQualityHandler.d.ts.map +1 -0
- package/dist/handlers/airQualityHandler.js +154 -0
- package/dist/handlers/airQualityHandler.js.map +1 -0
- package/dist/handlers/alertsHandler.d.ts +11 -0
- package/dist/handlers/alertsHandler.d.ts.map +1 -0
- package/dist/handlers/alertsHandler.js +98 -0
- package/dist/handlers/alertsHandler.js.map +1 -0
- package/dist/handlers/currentConditionsHandler.d.ts +13 -0
- package/dist/handlers/currentConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/currentConditionsHandler.js +296 -0
- package/dist/handlers/currentConditionsHandler.js.map +1 -0
- package/dist/handlers/forecastHandler.d.ts +16 -0
- package/dist/handlers/forecastHandler.d.ts.map +1 -0
- package/dist/handlers/forecastHandler.js +454 -0
- package/dist/handlers/forecastHandler.js.map +1 -0
- package/dist/handlers/historicalWeatherHandler.d.ts +12 -0
- package/dist/handlers/historicalWeatherHandler.d.ts.map +1 -0
- package/dist/handlers/historicalWeatherHandler.js +188 -0
- package/dist/handlers/historicalWeatherHandler.js.map +1 -0
- package/dist/handlers/lightningHandler.d.ts +14 -0
- package/dist/handlers/lightningHandler.d.ts.map +1 -0
- package/dist/handlers/lightningHandler.js +258 -0
- package/dist/handlers/lightningHandler.js.map +1 -0
- package/dist/handlers/locationHandler.d.ts +12 -0
- package/dist/handlers/locationHandler.d.ts.map +1 -0
- package/dist/handlers/locationHandler.js +149 -0
- package/dist/handlers/locationHandler.js.map +1 -0
- package/dist/handlers/marineConditionsHandler.d.ts +13 -0
- package/dist/handlers/marineConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/marineConditionsHandler.js +270 -0
- package/dist/handlers/marineConditionsHandler.js.map +1 -0
- package/dist/handlers/riverConditionsHandler.d.ts +11 -0
- package/dist/handlers/riverConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/riverConditionsHandler.js +176 -0
- package/dist/handlers/riverConditionsHandler.js.map +1 -0
- package/dist/handlers/savedLocationsHandler.d.ts +50 -0
- package/dist/handlers/savedLocationsHandler.d.ts.map +1 -0
- package/dist/handlers/savedLocationsHandler.js +397 -0
- package/dist/handlers/savedLocationsHandler.js.map +1 -0
- package/dist/handlers/statusHandler.d.ts +12 -0
- package/dist/handlers/statusHandler.d.ts.map +1 -0
- package/dist/handlers/statusHandler.js +115 -0
- package/dist/handlers/statusHandler.js.map +1 -0
- package/dist/handlers/weatherImageryHandler.d.ts +14 -0
- package/dist/handlers/weatherImageryHandler.d.ts.map +1 -0
- package/dist/handlers/weatherImageryHandler.js +143 -0
- package/dist/handlers/weatherImageryHandler.js.map +1 -0
- package/dist/handlers/wildfireHandler.d.ts +11 -0
- package/dist/handlers/wildfireHandler.d.ts.map +1 -0
- package/dist/handlers/wildfireHandler.js +186 -0
- package/dist/handlers/wildfireHandler.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +735 -0
- package/dist/index.js.map +1 -0
- package/dist/services/blitzortung.d.ts +67 -0
- package/dist/services/blitzortung.d.ts.map +1 -0
- package/dist/services/blitzortung.js +475 -0
- package/dist/services/blitzortung.js.map +1 -0
- package/dist/services/geocoding.d.ts +57 -0
- package/dist/services/geocoding.d.ts.map +1 -0
- package/dist/services/geocoding.js +393 -0
- package/dist/services/geocoding.js.map +1 -0
- package/dist/services/locationStore.d.ts +62 -0
- package/dist/services/locationStore.d.ts.map +1 -0
- package/dist/services/locationStore.js +201 -0
- package/dist/services/locationStore.js.map +1 -0
- package/dist/services/ncei.d.ts +61 -0
- package/dist/services/ncei.d.ts.map +1 -0
- package/dist/services/ncei.js +126 -0
- package/dist/services/ncei.js.map +1 -0
- package/dist/services/nifc.d.ts +44 -0
- package/dist/services/nifc.d.ts.map +1 -0
- package/dist/services/nifc.js +159 -0
- package/dist/services/nifc.js.map +1 -0
- package/dist/services/noaa.d.ts +161 -0
- package/dist/services/noaa.d.ts.map +1 -0
- package/dist/services/noaa.js +681 -0
- package/dist/services/noaa.js.map +1 -0
- package/dist/services/nominatim.d.ts +62 -0
- package/dist/services/nominatim.d.ts.map +1 -0
- package/dist/services/nominatim.js +254 -0
- package/dist/services/nominatim.js.map +1 -0
- package/dist/services/openmeteo.d.ts +189 -0
- package/dist/services/openmeteo.d.ts.map +1 -0
- package/dist/services/openmeteo.js +936 -0
- package/dist/services/openmeteo.js.map +1 -0
- package/dist/services/rainviewer.d.ts +37 -0
- package/dist/services/rainviewer.d.ts.map +1 -0
- package/dist/services/rainviewer.js +115 -0
- package/dist/services/rainviewer.js.map +1 -0
- package/dist/types/imagery.d.ts +82 -0
- package/dist/types/imagery.d.ts.map +1 -0
- package/dist/types/imagery.js +6 -0
- package/dist/types/imagery.js.map +1 -0
- package/dist/types/lightning.d.ts +89 -0
- package/dist/types/lightning.d.ts.map +1 -0
- package/dist/types/lightning.js +6 -0
- package/dist/types/lightning.js.map +1 -0
- package/dist/types/noaa.d.ts +535 -0
- package/dist/types/noaa.d.ts.map +1 -0
- package/dist/types/noaa.js +5 -0
- package/dist/types/noaa.js.map +1 -0
- package/dist/types/nominatim.d.ts +72 -0
- package/dist/types/nominatim.d.ts.map +1 -0
- package/dist/types/nominatim.js +6 -0
- package/dist/types/nominatim.js.map +1 -0
- package/dist/types/openmeteo.d.ts +583 -0
- package/dist/types/openmeteo.d.ts.map +1 -0
- package/dist/types/openmeteo.js +6 -0
- package/dist/types/openmeteo.js.map +1 -0
- package/dist/types/savedLocations.d.ts +58 -0
- package/dist/types/savedLocations.d.ts.map +1 -0
- package/dist/types/savedLocations.js +5 -0
- package/dist/types/savedLocations.js.map +1 -0
- package/dist/types/wildfire.d.ts +83 -0
- package/dist/types/wildfire.d.ts.map +1 -0
- package/dist/types/wildfire.js +5 -0
- package/dist/types/wildfire.js.map +1 -0
- package/dist/utils/airQuality.d.ts +54 -0
- package/dist/utils/airQuality.d.ts.map +1 -0
- package/dist/utils/airQuality.js +251 -0
- package/dist/utils/airQuality.js.map +1 -0
- package/dist/utils/cache.d.ts +69 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +164 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/distance.d.ts +25 -0
- package/dist/utils/distance.d.ts.map +1 -0
- package/dist/utils/distance.js +40 -0
- package/dist/utils/distance.js.map +1 -0
- package/dist/utils/fireWeather.d.ts +76 -0
- package/dist/utils/fireWeather.d.ts.map +1 -0
- package/dist/utils/fireWeather.js +243 -0
- package/dist/utils/fireWeather.js.map +1 -0
- package/dist/utils/geography.d.ts +79 -0
- package/dist/utils/geography.d.ts.map +1 -0
- package/dist/utils/geography.js +266 -0
- package/dist/utils/geography.js.map +1 -0
- package/dist/utils/geohash.d.ts +62 -0
- package/dist/utils/geohash.d.ts.map +1 -0
- package/dist/utils/geohash.js +146 -0
- package/dist/utils/geohash.js.map +1 -0
- package/dist/utils/locationResolver.d.ts +34 -0
- package/dist/utils/locationResolver.d.ts.map +1 -0
- package/dist/utils/locationResolver.js +120 -0
- package/dist/utils/locationResolver.js.map +1 -0
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +153 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/marine.d.ts +59 -0
- package/dist/utils/marine.d.ts.map +1 -0
- package/dist/utils/marine.js +215 -0
- package/dist/utils/marine.js.map +1 -0
- package/dist/utils/normals.d.ts +86 -0
- package/dist/utils/normals.d.ts.map +1 -0
- package/dist/utils/normals.js +223 -0
- package/dist/utils/normals.js.map +1 -0
- package/dist/utils/snow.d.ts +45 -0
- package/dist/utils/snow.d.ts.map +1 -0
- package/dist/utils/snow.js +144 -0
- package/dist/utils/snow.js.map +1 -0
- package/dist/utils/temperatureConversion.d.ts +12 -0
- package/dist/utils/temperatureConversion.d.ts.map +1 -0
- package/dist/utils/temperatureConversion.js +17 -0
- package/dist/utils/temperatureConversion.js.map +1 -0
- package/dist/utils/timezone.d.ts +56 -0
- package/dist/utils/timezone.d.ts.map +1 -0
- package/dist/utils/timezone.js +167 -0
- package/dist/utils/timezone.js.map +1 -0
- package/dist/utils/units.d.ts +69 -0
- package/dist/utils/units.d.ts.map +1 -0
- package/dist/utils/units.js +158 -0
- package/dist/utils/units.js.map +1 -0
- package/dist/utils/validation.d.ts +89 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +177 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/version.d.ts +15 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +24 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noaa.js","sourceRoot":"","sources":["../../src/services/noaa.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for interacting with the Nominatim Geocoding API
|
|
3
|
+
* Documentation: https://nominatim.org/release-docs/latest/api/Search/
|
|
4
|
+
*
|
|
5
|
+
* Nominatim is the geocoding service powering OpenStreetMap.
|
|
6
|
+
* It provides better coverage for small towns and villages compared to GeoNames.
|
|
7
|
+
*
|
|
8
|
+
* Usage Policy: https://operations.osmfoundation.org/policies/nominatim/
|
|
9
|
+
* - Maximum 1 request per second
|
|
10
|
+
* - Requires User-Agent header
|
|
11
|
+
* - No bulk geocoding
|
|
12
|
+
*/
|
|
13
|
+
import type { MappedGeocodingResponse } from '../types/nominatim.js';
|
|
14
|
+
export interface NominatimServiceConfig {
|
|
15
|
+
baseURL?: string;
|
|
16
|
+
timeout?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class NominatimService {
|
|
19
|
+
private client;
|
|
20
|
+
private cache;
|
|
21
|
+
private lastRequestTime;
|
|
22
|
+
private readonly MIN_REQUEST_INTERVAL_MS;
|
|
23
|
+
constructor(config?: NominatimServiceConfig);
|
|
24
|
+
/**
|
|
25
|
+
* Handle API errors with helpful status information
|
|
26
|
+
* @private
|
|
27
|
+
*/
|
|
28
|
+
private handleError;
|
|
29
|
+
/**
|
|
30
|
+
* Enforce rate limiting (1 request per second as per Nominatim usage policy)
|
|
31
|
+
* @private
|
|
32
|
+
*/
|
|
33
|
+
private enforceRateLimit;
|
|
34
|
+
/**
|
|
35
|
+
* Map Nominatim location to GeocodingLocation format for compatibility
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
private mapLocation;
|
|
39
|
+
/**
|
|
40
|
+
* Map OSM place types to GeoNames-style feature codes
|
|
41
|
+
* @private
|
|
42
|
+
*/
|
|
43
|
+
private mapFeatureCode;
|
|
44
|
+
/**
|
|
45
|
+
* Search for locations by name using Nominatim
|
|
46
|
+
*
|
|
47
|
+
* @param query - Location name to search for (e.g., "Paris", "New York, NY", "Tokyo")
|
|
48
|
+
* @param limit - Maximum number of results to return (default: 5, max: 50)
|
|
49
|
+
* @param language - Language for results (default: 'en')
|
|
50
|
+
* @returns Geocoding results with coordinates and metadata
|
|
51
|
+
*/
|
|
52
|
+
searchLocation(query: string, limit?: number, language?: string): Promise<MappedGeocodingResponse>;
|
|
53
|
+
/**
|
|
54
|
+
* Get cache statistics
|
|
55
|
+
*/
|
|
56
|
+
getCacheStats(): import("../utils/cache.js").CacheStats;
|
|
57
|
+
/**
|
|
58
|
+
* Clear the cache
|
|
59
|
+
*/
|
|
60
|
+
clearCache(): void;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=nominatim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nominatim.d.ts","sourceRoot":"","sources":["../../src/services/nominatim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAGV,uBAAuB,EAExB,MAAM,uBAAuB,CAAC;AAY/B,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAQ;gBAEpC,MAAM,GAAE,sBAA2B;IAwB/C;;;OAGG;YACW,WAAW;IAsFzB;;;OAGG;YACW,gBAAgB;IAgB9B;;;OAGG;IACH,OAAO,CAAC,WAAW;IAgCnB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;;;;;OAOG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAU,EACjB,QAAQ,GAAE,MAAa,GACtB,OAAO,CAAC,uBAAuB,CAAC;IA+FnC;;OAEG;IACH,aAAa;IAIb;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for interacting with the Nominatim Geocoding API
|
|
3
|
+
* Documentation: https://nominatim.org/release-docs/latest/api/Search/
|
|
4
|
+
*
|
|
5
|
+
* Nominatim is the geocoding service powering OpenStreetMap.
|
|
6
|
+
* It provides better coverage for small towns and villages compared to GeoNames.
|
|
7
|
+
*
|
|
8
|
+
* Usage Policy: https://operations.osmfoundation.org/policies/nominatim/
|
|
9
|
+
* - Maximum 1 request per second
|
|
10
|
+
* - Requires User-Agent header
|
|
11
|
+
* - No bulk geocoding
|
|
12
|
+
*/
|
|
13
|
+
import axios from 'axios';
|
|
14
|
+
import { Cache } from '../utils/cache.js';
|
|
15
|
+
import { CacheConfig } from '../config/cache.js';
|
|
16
|
+
import { logger } from '../utils/logger.js';
|
|
17
|
+
import { getUserAgent } from '../utils/version.js';
|
|
18
|
+
import { RateLimitError, ServiceUnavailableError, InvalidLocationError, ApiError } from '../errors/ApiError.js';
|
|
19
|
+
export class NominatimService {
|
|
20
|
+
client;
|
|
21
|
+
cache;
|
|
22
|
+
lastRequestTime = 0;
|
|
23
|
+
MIN_REQUEST_INTERVAL_MS = 1000; // 1 request per second (Nominatim policy)
|
|
24
|
+
constructor(config = {}) {
|
|
25
|
+
const { baseURL = 'https://nominatim.openstreetmap.org', timeout = CacheConfig.apiTimeoutMs } = config;
|
|
26
|
+
this.cache = new Cache(CacheConfig.maxSize);
|
|
27
|
+
this.client = axios.create({
|
|
28
|
+
baseURL,
|
|
29
|
+
timeout,
|
|
30
|
+
headers: {
|
|
31
|
+
'Accept': 'application/json',
|
|
32
|
+
'User-Agent': getUserAgent()
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
// Add response interceptor for error handling
|
|
36
|
+
this.client.interceptors.response.use((response) => response, (error) => this.handleError(error));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Handle API errors with helpful status information
|
|
40
|
+
* @private
|
|
41
|
+
*/
|
|
42
|
+
async handleError(error) {
|
|
43
|
+
if (error.response) {
|
|
44
|
+
const status = error.response.status;
|
|
45
|
+
const data = error.response.data;
|
|
46
|
+
// Bad request
|
|
47
|
+
if (status === 400) {
|
|
48
|
+
logger.warn('Invalid request parameters', {
|
|
49
|
+
service: 'Nominatim',
|
|
50
|
+
error: data.error,
|
|
51
|
+
securityEvent: true
|
|
52
|
+
});
|
|
53
|
+
throw new InvalidLocationError('Nominatim', `${data.error || 'Invalid request parameters'}\n\n` +
|
|
54
|
+
'Please verify:\n' +
|
|
55
|
+
'- Search query is at least 2 characters\n' +
|
|
56
|
+
'- Query contains valid location information');
|
|
57
|
+
}
|
|
58
|
+
// Rate limit error
|
|
59
|
+
if (status === 429) {
|
|
60
|
+
logger.warn('Rate limit exceeded', {
|
|
61
|
+
service: 'Nominatim',
|
|
62
|
+
securityEvent: true
|
|
63
|
+
});
|
|
64
|
+
throw new RateLimitError('Nominatim');
|
|
65
|
+
}
|
|
66
|
+
// Forbidden - usually indicates missing User-Agent or abuse
|
|
67
|
+
if (status === 403) {
|
|
68
|
+
logger.error('Nominatim access forbidden', undefined, {
|
|
69
|
+
service: 'Nominatim',
|
|
70
|
+
status: 403
|
|
71
|
+
});
|
|
72
|
+
throw new ApiError('Nominatim API access denied', 403, 'Nominatim', 'Access forbidden. This may indicate a policy violation.', ['https://operations.osmfoundation.org/policies/nominatim/']);
|
|
73
|
+
}
|
|
74
|
+
// Server errors
|
|
75
|
+
if (status >= 500) {
|
|
76
|
+
throw new ServiceUnavailableError('Nominatim', error);
|
|
77
|
+
}
|
|
78
|
+
// Other errors
|
|
79
|
+
throw new ApiError(`Nominatim API error (${status})`, status, 'Nominatim', data.error || 'Request failed', [
|
|
80
|
+
'https://nominatim.org/release-docs/latest/api/Search/',
|
|
81
|
+
'https://wiki.openstreetmap.org/wiki/Nominatim'
|
|
82
|
+
]);
|
|
83
|
+
}
|
|
84
|
+
// Network errors
|
|
85
|
+
if (error.code === 'ECONNABORTED') {
|
|
86
|
+
throw new ServiceUnavailableError('Nominatim', error);
|
|
87
|
+
}
|
|
88
|
+
if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {
|
|
89
|
+
throw new ServiceUnavailableError('Nominatim', error);
|
|
90
|
+
}
|
|
91
|
+
// Generic error
|
|
92
|
+
throw new ApiError(`Nominatim API request failed: ${error.message}`, 500, 'Nominatim', `Request failed: ${error.message}`, [
|
|
93
|
+
'https://nominatim.org/release-docs/latest/api/Search/',
|
|
94
|
+
'https://wiki.openstreetmap.org/wiki/Nominatim'
|
|
95
|
+
], true);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Enforce rate limiting (1 request per second as per Nominatim usage policy)
|
|
99
|
+
* @private
|
|
100
|
+
*/
|
|
101
|
+
async enforceRateLimit() {
|
|
102
|
+
const now = Date.now();
|
|
103
|
+
const timeSinceLastRequest = now - this.lastRequestTime;
|
|
104
|
+
if (timeSinceLastRequest < this.MIN_REQUEST_INTERVAL_MS) {
|
|
105
|
+
const waitTime = this.MIN_REQUEST_INTERVAL_MS - timeSinceLastRequest;
|
|
106
|
+
logger.info('Rate limiting: waiting before next request', {
|
|
107
|
+
service: 'Nominatim',
|
|
108
|
+
waitTimeMs: waitTime
|
|
109
|
+
});
|
|
110
|
+
await new Promise(resolve => setTimeout(resolve, waitTime));
|
|
111
|
+
}
|
|
112
|
+
this.lastRequestTime = Date.now();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Map Nominatim location to GeocodingLocation format for compatibility
|
|
116
|
+
* @private
|
|
117
|
+
*/
|
|
118
|
+
mapLocation(location) {
|
|
119
|
+
// Determine the best "name" for the location
|
|
120
|
+
let name = location.display_name.split(',')[0].trim();
|
|
121
|
+
// If we have address details, use the most specific place name
|
|
122
|
+
if (location.address) {
|
|
123
|
+
name = location.address.village
|
|
124
|
+
|| location.address.town
|
|
125
|
+
|| location.address.city
|
|
126
|
+
|| location.address.municipality
|
|
127
|
+
|| location.address.suburb
|
|
128
|
+
|| name;
|
|
129
|
+
}
|
|
130
|
+
// Map Nominatim OSM type to GeoNames-style feature code
|
|
131
|
+
const featureCode = this.mapFeatureCode(location.type);
|
|
132
|
+
return {
|
|
133
|
+
id: location.place_id,
|
|
134
|
+
name,
|
|
135
|
+
latitude: parseFloat(location.lat),
|
|
136
|
+
longitude: parseFloat(location.lon),
|
|
137
|
+
feature_code: featureCode,
|
|
138
|
+
country_code: location.address?.country_code?.toUpperCase(),
|
|
139
|
+
country: location.address?.country,
|
|
140
|
+
admin1: location.address?.state,
|
|
141
|
+
admin2: location.address?.county,
|
|
142
|
+
admin3: location.address?.suburb,
|
|
143
|
+
admin4: location.address?.village || location.address?.town
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Map OSM place types to GeoNames-style feature codes
|
|
148
|
+
* @private
|
|
149
|
+
*/
|
|
150
|
+
mapFeatureCode(osmType) {
|
|
151
|
+
if (!osmType)
|
|
152
|
+
return undefined;
|
|
153
|
+
const typeMap = {
|
|
154
|
+
'city': 'PPLC',
|
|
155
|
+
'town': 'PPL',
|
|
156
|
+
'village': 'PPL',
|
|
157
|
+
'hamlet': 'PPL',
|
|
158
|
+
'suburb': 'PPLX',
|
|
159
|
+
'administrative': 'ADM1',
|
|
160
|
+
'island': 'ISL',
|
|
161
|
+
'mountain': 'MT',
|
|
162
|
+
'lake': 'LAKE',
|
|
163
|
+
'airport': 'AIRP',
|
|
164
|
+
'park': 'PRK'
|
|
165
|
+
};
|
|
166
|
+
return typeMap[osmType] || 'PPL'; // Default to populated place
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Search for locations by name using Nominatim
|
|
170
|
+
*
|
|
171
|
+
* @param query - Location name to search for (e.g., "Paris", "New York, NY", "Tokyo")
|
|
172
|
+
* @param limit - Maximum number of results to return (default: 5, max: 50)
|
|
173
|
+
* @param language - Language for results (default: 'en')
|
|
174
|
+
* @returns Geocoding results with coordinates and metadata
|
|
175
|
+
*/
|
|
176
|
+
async searchLocation(query, limit = 5, language = 'en') {
|
|
177
|
+
if (!query || query.trim().length === 0) {
|
|
178
|
+
throw new InvalidLocationError('Nominatim', 'Search query cannot be empty');
|
|
179
|
+
}
|
|
180
|
+
if (query.trim().length === 1) {
|
|
181
|
+
throw new InvalidLocationError('Nominatim', 'Search query must be at least 2 characters long');
|
|
182
|
+
}
|
|
183
|
+
// Validate limit (Nominatim recommends max 50)
|
|
184
|
+
if (limit < 1 || limit > 50) {
|
|
185
|
+
throw new InvalidLocationError('Nominatim', 'Limit must be between 1 and 50');
|
|
186
|
+
}
|
|
187
|
+
// Check cache first
|
|
188
|
+
if (CacheConfig.enabled) {
|
|
189
|
+
const cacheKey = Cache.generateKey('nominatim-geocoding', query, limit, language);
|
|
190
|
+
const cached = this.cache.get(cacheKey);
|
|
191
|
+
if (cached) {
|
|
192
|
+
logger.info('Nominatim cache hit', { query });
|
|
193
|
+
return cached;
|
|
194
|
+
}
|
|
195
|
+
// Enforce rate limiting before making request
|
|
196
|
+
await this.enforceRateLimit();
|
|
197
|
+
const startTime = Date.now();
|
|
198
|
+
const params = {
|
|
199
|
+
q: query.trim(),
|
|
200
|
+
format: 'json',
|
|
201
|
+
limit,
|
|
202
|
+
addressdetails: 1,
|
|
203
|
+
'accept-language': language
|
|
204
|
+
};
|
|
205
|
+
logger.info('Nominatim API request', { query, limit });
|
|
206
|
+
const response = await this.client.get('/search', { params });
|
|
207
|
+
const generationTime = Date.now() - startTime;
|
|
208
|
+
// Map Nominatim results to GeocodingResponse format
|
|
209
|
+
const mappedResults = response.data.map((loc) => this.mapLocation(loc));
|
|
210
|
+
const result = {
|
|
211
|
+
results: mappedResults,
|
|
212
|
+
generationtime_ms: generationTime
|
|
213
|
+
};
|
|
214
|
+
// Cache for 30 days (locations don't change frequently)
|
|
215
|
+
this.cache.set(cacheKey, result, 30 * 24 * 60 * 60 * 1000);
|
|
216
|
+
logger.info('Nominatim search completed', {
|
|
217
|
+
query,
|
|
218
|
+
resultCount: mappedResults.length,
|
|
219
|
+
generationTimeMs: generationTime
|
|
220
|
+
});
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
// No caching - still enforce rate limiting
|
|
224
|
+
await this.enforceRateLimit();
|
|
225
|
+
const startTime = Date.now();
|
|
226
|
+
const params = {
|
|
227
|
+
q: query.trim(),
|
|
228
|
+
format: 'json',
|
|
229
|
+
limit,
|
|
230
|
+
addressdetails: 1,
|
|
231
|
+
'accept-language': language
|
|
232
|
+
};
|
|
233
|
+
const response = await this.client.get('/search', { params });
|
|
234
|
+
const generationTime = Date.now() - startTime;
|
|
235
|
+
const mappedResults = response.data.map((loc) => this.mapLocation(loc));
|
|
236
|
+
return {
|
|
237
|
+
results: mappedResults,
|
|
238
|
+
generationtime_ms: generationTime
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get cache statistics
|
|
243
|
+
*/
|
|
244
|
+
getCacheStats() {
|
|
245
|
+
return this.cache.getStats();
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Clear the cache
|
|
249
|
+
*/
|
|
250
|
+
clearCache() {
|
|
251
|
+
this.cache.clear();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=nominatim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nominatim.js","sourceRoot":"","sources":["../../src/services/nominatim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAOxE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAO/B,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAgB;IACtB,KAAK,CAAQ;IACb,eAAe,GAAW,CAAC,CAAC;IACnB,uBAAuB,GAAG,IAAI,CAAC,CAAC,0CAA0C;IAE3F,YAAY,SAAiC,EAAE;QAC7C,MAAM,EACJ,OAAO,GAAG,qCAAqC,EAC/C,OAAO,GAAG,WAAW,CAAC,YAAY,EACnC,GAAG,MAAM,CAAC;QAEX,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO;YACP,OAAO;YACP,OAAO,EAAE;gBACP,QAAQ,EAAE,kBAAkB;gBAC5B,YAAY,EAAE,YAAY,EAAE;aAC7B;SACF,CAAC,CAAC;QAEH,8CAA8C;QAC9C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACnC,CAAC,QAAuB,EAAE,EAAE,CAAC,QAAQ,EACrC,CAAC,KAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAC/C,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,WAAW,CAAC,KAAiB;QACzC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAA8B,CAAC;YAE3D,cAAc;YACd,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;oBACxC,OAAO,EAAE,WAAW;oBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,aAAa,EAAE,IAAI;iBACpB,CAAC,CAAC;gBACH,MAAM,IAAI,oBAAoB,CAC5B,WAAW,EACX,GAAG,IAAI,CAAC,KAAK,IAAI,4BAA4B,MAAM;oBACnD,kBAAkB;oBAClB,2CAA2C;oBAC3C,6CAA6C,CAC9C,CAAC;YACJ,CAAC;YAED,mBAAmB;YACnB,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;oBACjC,OAAO,EAAE,WAAW;oBACpB,aAAa,EAAE,IAAI;iBACpB,CAAC,CAAC;gBACH,MAAM,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;YACxC,CAAC;YAED,4DAA4D;YAC5D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,SAAS,EAAE;oBACpD,OAAO,EAAE,WAAW;oBACpB,MAAM,EAAE,GAAG;iBACZ,CAAC,CAAC;gBACH,MAAM,IAAI,QAAQ,CAChB,6BAA6B,EAC7B,GAAG,EACH,WAAW,EACX,yDAAyD,EACzD,CAAC,0DAA0D,CAAC,CAC7D,CAAC;YACJ,CAAC;YAED,gBAAgB;YAChB,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBAClB,MAAM,IAAI,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;YAED,eAAe;YACf,MAAM,IAAI,QAAQ,CAChB,wBAAwB,MAAM,GAAG,EACjC,MAAM,EACN,WAAW,EACX,IAAI,CAAC,KAAK,IAAI,gBAAgB,EAC9B;gBACE,uDAAuD;gBACvD,+CAA+C;aAChD,CACF,CAAC;QACJ,CAAC;QAED,iBAAiB;QACjB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,IAAI,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAChE,MAAM,IAAI,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QAED,gBAAgB;QAChB,MAAM,IAAI,QAAQ,CAChB,iCAAiC,KAAK,CAAC,OAAO,EAAE,EAChD,GAAG,EACH,WAAW,EACX,mBAAmB,KAAK,CAAC,OAAO,EAAE,EAClC;YACE,uDAAuD;YACvD,+CAA+C;SAChD,EACD,IAAI,CACL,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,gBAAgB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC;QAExD,IAAI,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,GAAG,oBAAoB,CAAC;YACrE,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE;gBACxD,OAAO,EAAE,WAAW;gBACpB,UAAU,EAAE,QAAQ;aACrB,CAAC,CAAC;YACH,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,QAA2B;QAC7C,6CAA6C;QAC7C,IAAI,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtD,+DAA+D;QAC/D,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO;mBAC1B,QAAQ,CAAC,OAAO,CAAC,IAAI;mBACrB,QAAQ,CAAC,OAAO,CAAC,IAAI;mBACrB,QAAQ,CAAC,OAAO,CAAC,YAAY;mBAC7B,QAAQ,CAAC,OAAO,CAAC,MAAM;mBACvB,IAAI,CAAC;QACZ,CAAC;QAED,wDAAwD;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvD,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,QAAQ;YACrB,IAAI;YACJ,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;YAClC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;YACnC,YAAY,EAAE,WAAW;YACzB,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE;YAC3D,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO;YAClC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK;YAC/B,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM;YAChC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,MAAM;YAChC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI;SAC5D,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,OAA2B;QAChD,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,MAAM,OAAO,GAA8B;YACzC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,MAAM;YAChB,gBAAgB,EAAE,MAAM;YACxB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,6BAA6B;IACjE,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,cAAc,CAClB,KAAa,EACb,QAAgB,CAAC,EACjB,WAAmB,IAAI;QAEvB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,oBAAoB,CAC5B,WAAW,EACX,8BAA8B,CAC/B,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,oBAAoB,CAC5B,WAAW,EACX,iDAAiD,CAClD,CAAC;QACJ,CAAC;QAED,+CAA+C;QAC/C,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,oBAAoB,CAC5B,WAAW,EACX,gCAAgC,CACjC,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC9C,OAAO,MAAiC,CAAC;YAC3C,CAAC;YAED,8CAA8C;YAC9C,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG;gBACb,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE;gBACf,MAAM,EAAE,MAAM;gBACd,KAAK;gBACL,cAAc,EAAE,CAAC;gBACjB,iBAAiB,EAAE,QAAQ;aAC5B,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAsB,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACnF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAE9C,oDAAoD;YACpD,MAAM,aAAa,GAA8B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAsB,EAAE,EAAE,CAC5F,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CACtB,CAAC;YAEF,MAAM,MAAM,GAA4B;gBACtC,OAAO,EAAE,aAAa;gBACtB,iBAAiB,EAAE,cAAc;aAClC,CAAC;YAEF,wDAAwD;YACxD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAE3D,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;gBACxC,KAAK;gBACL,WAAW,EAAE,aAAa,CAAC,MAAM;gBACjC,gBAAgB,EAAE,cAAc;aACjC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,2CAA2C;QAC3C,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG;YACb,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE;YACf,MAAM,EAAE,MAAM;YACd,KAAK;YACL,cAAc,EAAE,CAAC;YACjB,iBAAiB,EAAE,QAAQ;SAC5B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAsB,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACnF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE9C,MAAM,aAAa,GAA8B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAsB,EAAE,EAAE,CAC5F,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CACtB,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,aAAa;YACtB,iBAAiB,EAAE,cAAc;SAClC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for interacting with the Open-Meteo APIs
|
|
3
|
+
* Documentation:
|
|
4
|
+
* - Historical Weather: https://open-meteo.com/en/docs/historical-weather-api
|
|
5
|
+
* - Forecast: https://open-meteo.com/en/docs
|
|
6
|
+
* - Geocoding: https://open-meteo.com/en/docs/geocoding-api
|
|
7
|
+
* - Air Quality: https://open-meteo.com/en/docs/air-quality-api
|
|
8
|
+
* - Marine: https://open-meteo.com/en/docs/marine-weather-api
|
|
9
|
+
*/
|
|
10
|
+
import type { OpenMeteoHistoricalResponse, GeocodingResponse, OpenMeteoForecastResponse, OpenMeteoAirQualityResponse, OpenMeteoMarineResponse, ClimateNormals } from '../types/openmeteo.js';
|
|
11
|
+
export interface OpenMeteoServiceConfig {
|
|
12
|
+
baseURL?: string;
|
|
13
|
+
geocodingURL?: string;
|
|
14
|
+
forecastURL?: string;
|
|
15
|
+
airQualityURL?: string;
|
|
16
|
+
marineURL?: string;
|
|
17
|
+
timeout?: number;
|
|
18
|
+
maxRetries?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare class OpenMeteoService {
|
|
21
|
+
private client;
|
|
22
|
+
private geocodingClient;
|
|
23
|
+
private forecastClient;
|
|
24
|
+
private airQualityClient;
|
|
25
|
+
private marineClient;
|
|
26
|
+
private maxRetries;
|
|
27
|
+
private cache;
|
|
28
|
+
constructor(config?: OpenMeteoServiceConfig);
|
|
29
|
+
/**
|
|
30
|
+
* Handle API errors with helpful status information
|
|
31
|
+
*/
|
|
32
|
+
private handleError;
|
|
33
|
+
/**
|
|
34
|
+
* Make request with retry logic
|
|
35
|
+
*/
|
|
36
|
+
private makeRequest;
|
|
37
|
+
/**
|
|
38
|
+
* Get cache statistics
|
|
39
|
+
*/
|
|
40
|
+
getCacheStats(): import("../utils/cache.js").CacheStats;
|
|
41
|
+
/**
|
|
42
|
+
* Clear the cache
|
|
43
|
+
*/
|
|
44
|
+
clearCache(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Check if the Open-Meteo API is operational
|
|
47
|
+
* Performs a lightweight health check by requesting a simple query
|
|
48
|
+
* @returns Object with status information
|
|
49
|
+
*/
|
|
50
|
+
checkServiceStatus(): Promise<{
|
|
51
|
+
operational: boolean;
|
|
52
|
+
message: string;
|
|
53
|
+
statusPage: string;
|
|
54
|
+
timestamp: string;
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* Get historical weather data for a location
|
|
58
|
+
*
|
|
59
|
+
* @param latitude - Latitude coordinate (-90 to 90)
|
|
60
|
+
* @param longitude - Longitude coordinate (-180 to 180)
|
|
61
|
+
* @param startDate - Start date in ISO format (YYYY-MM-DD)
|
|
62
|
+
* @param endDate - End date in ISO format (YYYY-MM-DD)
|
|
63
|
+
* @param useHourly - Whether to request hourly data (default: true)
|
|
64
|
+
* @returns Historical weather data
|
|
65
|
+
*/
|
|
66
|
+
getHistoricalWeather(latitude: number, longitude: number, startDate: string, endDate: string, useHourly?: boolean): Promise<OpenMeteoHistoricalResponse>;
|
|
67
|
+
/**
|
|
68
|
+
* Build request parameters for historical weather data
|
|
69
|
+
* @private
|
|
70
|
+
*/
|
|
71
|
+
private buildHistoricalParams;
|
|
72
|
+
/**
|
|
73
|
+
* Validate that the response contains the expected data
|
|
74
|
+
* @private
|
|
75
|
+
*/
|
|
76
|
+
private validateResponse;
|
|
77
|
+
/**
|
|
78
|
+
* Get weather description from WMO weather code
|
|
79
|
+
* WMO Weather interpretation codes (WW): https://open-meteo.com/en/docs
|
|
80
|
+
*/
|
|
81
|
+
getWeatherDescription(code: number): string;
|
|
82
|
+
/**
|
|
83
|
+
* Search for locations by name using the Open-Meteo Geocoding API
|
|
84
|
+
*
|
|
85
|
+
* @param query - Location name to search for (e.g., "Paris", "New York, NY", "Tokyo")
|
|
86
|
+
* @param limit - Maximum number of results to return (default: 5, max: 100)
|
|
87
|
+
* @param language - Language for results (default: 'en')
|
|
88
|
+
* @returns Geocoding results with coordinates and metadata
|
|
89
|
+
*/
|
|
90
|
+
searchLocation(query: string, limit?: number, language?: string): Promise<GeocodingResponse>;
|
|
91
|
+
/**
|
|
92
|
+
* Get weather forecast from Open-Meteo Forecast API
|
|
93
|
+
*
|
|
94
|
+
* @param latitude - Latitude coordinate (-90 to 90)
|
|
95
|
+
* @param longitude - Longitude coordinate (-180 to 180)
|
|
96
|
+
* @param days - Number of forecast days (1-16, default: 7)
|
|
97
|
+
* @param hourly - Whether to include hourly data (default: false)
|
|
98
|
+
* @returns Weather forecast data
|
|
99
|
+
*/
|
|
100
|
+
getForecast(latitude: number, longitude: number, days?: number, hourly?: boolean): Promise<OpenMeteoForecastResponse>;
|
|
101
|
+
/**
|
|
102
|
+
* Build request parameters for forecast data
|
|
103
|
+
* @private
|
|
104
|
+
*/
|
|
105
|
+
private buildForecastParams;
|
|
106
|
+
/**
|
|
107
|
+
* Make request to forecast API with retry logic
|
|
108
|
+
* @private
|
|
109
|
+
*/
|
|
110
|
+
private makeRequestToForecast;
|
|
111
|
+
/**
|
|
112
|
+
* Validate that the forecast response contains the expected data
|
|
113
|
+
* @private
|
|
114
|
+
*/
|
|
115
|
+
private validateForecastResponse;
|
|
116
|
+
/**
|
|
117
|
+
* Get air quality data from Open-Meteo Air Quality API
|
|
118
|
+
*
|
|
119
|
+
* @param latitude - Latitude coordinate (-90 to 90)
|
|
120
|
+
* @param longitude - Longitude coordinate (-180 to 180)
|
|
121
|
+
* @param forecast - Whether to include hourly forecast (default: false, returns current only)
|
|
122
|
+
* @param forecastDays - Number of forecast days (1-7, default: 5)
|
|
123
|
+
* @returns Air quality data including AQI, pollutants, and UV index
|
|
124
|
+
*/
|
|
125
|
+
getAirQuality(latitude: number, longitude: number, forecast?: boolean, forecastDays?: number): Promise<OpenMeteoAirQualityResponse>;
|
|
126
|
+
/**
|
|
127
|
+
* Build request parameters for air quality data
|
|
128
|
+
* @private
|
|
129
|
+
*/
|
|
130
|
+
private buildAirQualityParams;
|
|
131
|
+
/**
|
|
132
|
+
* Make request to air quality API with retry logic
|
|
133
|
+
* @private
|
|
134
|
+
*/
|
|
135
|
+
private makeRequestToAirQuality;
|
|
136
|
+
/**
|
|
137
|
+
* Validate that the air quality response contains the expected data
|
|
138
|
+
* @private
|
|
139
|
+
*/
|
|
140
|
+
private validateAirQualityResponse;
|
|
141
|
+
/**
|
|
142
|
+
* Get marine conditions data from Open-Meteo Marine API
|
|
143
|
+
*
|
|
144
|
+
* @param latitude - Latitude coordinate (-90 to 90)
|
|
145
|
+
* @param longitude - Longitude coordinate (-180 to 180)
|
|
146
|
+
* @param forecast - Whether to include hourly forecast (default: false, returns current only)
|
|
147
|
+
* @param forecastDays - Number of forecast days (1-7, default: 5)
|
|
148
|
+
* @returns Marine conditions including waves, swell, and currents
|
|
149
|
+
*/
|
|
150
|
+
getMarine(latitude: number, longitude: number, forecast?: boolean, forecastDays?: number): Promise<OpenMeteoMarineResponse>;
|
|
151
|
+
/**
|
|
152
|
+
* Build request parameters for marine data
|
|
153
|
+
* @private
|
|
154
|
+
*/
|
|
155
|
+
private buildMarineParams;
|
|
156
|
+
/**
|
|
157
|
+
* Make request to marine API with retry logic
|
|
158
|
+
* @private
|
|
159
|
+
*/
|
|
160
|
+
private makeRequestToMarine;
|
|
161
|
+
/**
|
|
162
|
+
* Validate that the marine response contains the expected data
|
|
163
|
+
* @private
|
|
164
|
+
*/
|
|
165
|
+
private validateMarineResponse;
|
|
166
|
+
/**
|
|
167
|
+
* Compute climate normals (30-year averages) for a specific date
|
|
168
|
+
*
|
|
169
|
+
* Fetches 30 years of historical data (1991-2020) and computes averages
|
|
170
|
+
* for the specified month/day. Results are cached indefinitely since
|
|
171
|
+
* climate normals don't change.
|
|
172
|
+
*
|
|
173
|
+
* @param latitude - Latitude (-90 to 90)
|
|
174
|
+
* @param longitude - Longitude (-180 to 180)
|
|
175
|
+
* @param month - Month (1-12)
|
|
176
|
+
* @param day - Day of month (1-31)
|
|
177
|
+
* @returns Climate normals (30-year averages) in Fahrenheit and inches
|
|
178
|
+
* @throws {InvalidLocationError} If coordinates are invalid
|
|
179
|
+
* @throws {DataNotFoundError} If no historical data available
|
|
180
|
+
* @throws {ServiceUnavailableError} If Open-Meteo API is unavailable
|
|
181
|
+
*/
|
|
182
|
+
getClimateNormals(latitude: number, longitude: number, month: number, day: number): Promise<ClimateNormals>;
|
|
183
|
+
/**
|
|
184
|
+
* Get the last day of a given month
|
|
185
|
+
* @private
|
|
186
|
+
*/
|
|
187
|
+
private getLastDayOfMonth;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=openmeteo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openmeteo.d.ts","sourceRoot":"","sources":["../../src/services/openmeteo.ts"],"names":[],"mappings":"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"}
|