@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.
Files changed (235) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1319 -0
  3. package/dist/analytics/anonymizer.d.ts +37 -0
  4. package/dist/analytics/anonymizer.d.ts.map +1 -0
  5. package/dist/analytics/anonymizer.js +112 -0
  6. package/dist/analytics/anonymizer.js.map +1 -0
  7. package/dist/analytics/collector.d.ts +72 -0
  8. package/dist/analytics/collector.d.ts.map +1 -0
  9. package/dist/analytics/collector.js +282 -0
  10. package/dist/analytics/collector.js.map +1 -0
  11. package/dist/analytics/config.d.ts +15 -0
  12. package/dist/analytics/config.d.ts.map +1 -0
  13. package/dist/analytics/config.js +172 -0
  14. package/dist/analytics/config.js.map +1 -0
  15. package/dist/analytics/index.d.ts +8 -0
  16. package/dist/analytics/index.d.ts.map +1 -0
  17. package/dist/analytics/index.js +7 -0
  18. package/dist/analytics/index.js.map +1 -0
  19. package/dist/analytics/middleware.d.ts +33 -0
  20. package/dist/analytics/middleware.d.ts.map +1 -0
  21. package/dist/analytics/middleware.js +99 -0
  22. package/dist/analytics/middleware.js.map +1 -0
  23. package/dist/analytics/transport.d.ts +11 -0
  24. package/dist/analytics/transport.d.ts.map +1 -0
  25. package/dist/analytics/transport.js +92 -0
  26. package/dist/analytics/transport.js.map +1 -0
  27. package/dist/analytics/types.d.ts +74 -0
  28. package/dist/analytics/types.d.ts.map +1 -0
  29. package/dist/analytics/types.js +6 -0
  30. package/dist/analytics/types.js.map +1 -0
  31. package/dist/config/api.d.ts +30 -0
  32. package/dist/config/api.d.ts.map +1 -0
  33. package/dist/config/api.js +32 -0
  34. package/dist/config/api.js.map +1 -0
  35. package/dist/config/cache.d.ts +31 -0
  36. package/dist/config/cache.d.ts.map +1 -0
  37. package/dist/config/cache.js +108 -0
  38. package/dist/config/cache.js.map +1 -0
  39. package/dist/config/displayThresholds.d.ts +83 -0
  40. package/dist/config/displayThresholds.d.ts.map +1 -0
  41. package/dist/config/displayThresholds.js +83 -0
  42. package/dist/config/displayThresholds.js.map +1 -0
  43. package/dist/config/tools.d.ts +44 -0
  44. package/dist/config/tools.d.ts.map +1 -0
  45. package/dist/config/tools.js +269 -0
  46. package/dist/config/tools.js.map +1 -0
  47. package/dist/errors/ApiError.d.ts +62 -0
  48. package/dist/errors/ApiError.d.ts.map +1 -0
  49. package/dist/errors/ApiError.js +171 -0
  50. package/dist/errors/ApiError.js.map +1 -0
  51. package/dist/handlers/airQualityHandler.d.ts +11 -0
  52. package/dist/handlers/airQualityHandler.d.ts.map +1 -0
  53. package/dist/handlers/airQualityHandler.js +154 -0
  54. package/dist/handlers/airQualityHandler.js.map +1 -0
  55. package/dist/handlers/alertsHandler.d.ts +11 -0
  56. package/dist/handlers/alertsHandler.d.ts.map +1 -0
  57. package/dist/handlers/alertsHandler.js +98 -0
  58. package/dist/handlers/alertsHandler.js.map +1 -0
  59. package/dist/handlers/currentConditionsHandler.d.ts +13 -0
  60. package/dist/handlers/currentConditionsHandler.d.ts.map +1 -0
  61. package/dist/handlers/currentConditionsHandler.js +296 -0
  62. package/dist/handlers/currentConditionsHandler.js.map +1 -0
  63. package/dist/handlers/forecastHandler.d.ts +16 -0
  64. package/dist/handlers/forecastHandler.d.ts.map +1 -0
  65. package/dist/handlers/forecastHandler.js +454 -0
  66. package/dist/handlers/forecastHandler.js.map +1 -0
  67. package/dist/handlers/historicalWeatherHandler.d.ts +12 -0
  68. package/dist/handlers/historicalWeatherHandler.d.ts.map +1 -0
  69. package/dist/handlers/historicalWeatherHandler.js +188 -0
  70. package/dist/handlers/historicalWeatherHandler.js.map +1 -0
  71. package/dist/handlers/lightningHandler.d.ts +14 -0
  72. package/dist/handlers/lightningHandler.d.ts.map +1 -0
  73. package/dist/handlers/lightningHandler.js +258 -0
  74. package/dist/handlers/lightningHandler.js.map +1 -0
  75. package/dist/handlers/locationHandler.d.ts +12 -0
  76. package/dist/handlers/locationHandler.d.ts.map +1 -0
  77. package/dist/handlers/locationHandler.js +149 -0
  78. package/dist/handlers/locationHandler.js.map +1 -0
  79. package/dist/handlers/marineConditionsHandler.d.ts +13 -0
  80. package/dist/handlers/marineConditionsHandler.d.ts.map +1 -0
  81. package/dist/handlers/marineConditionsHandler.js +270 -0
  82. package/dist/handlers/marineConditionsHandler.js.map +1 -0
  83. package/dist/handlers/riverConditionsHandler.d.ts +11 -0
  84. package/dist/handlers/riverConditionsHandler.d.ts.map +1 -0
  85. package/dist/handlers/riverConditionsHandler.js +176 -0
  86. package/dist/handlers/riverConditionsHandler.js.map +1 -0
  87. package/dist/handlers/savedLocationsHandler.d.ts +50 -0
  88. package/dist/handlers/savedLocationsHandler.d.ts.map +1 -0
  89. package/dist/handlers/savedLocationsHandler.js +397 -0
  90. package/dist/handlers/savedLocationsHandler.js.map +1 -0
  91. package/dist/handlers/statusHandler.d.ts +12 -0
  92. package/dist/handlers/statusHandler.d.ts.map +1 -0
  93. package/dist/handlers/statusHandler.js +115 -0
  94. package/dist/handlers/statusHandler.js.map +1 -0
  95. package/dist/handlers/weatherImageryHandler.d.ts +14 -0
  96. package/dist/handlers/weatherImageryHandler.d.ts.map +1 -0
  97. package/dist/handlers/weatherImageryHandler.js +143 -0
  98. package/dist/handlers/weatherImageryHandler.js.map +1 -0
  99. package/dist/handlers/wildfireHandler.d.ts +11 -0
  100. package/dist/handlers/wildfireHandler.d.ts.map +1 -0
  101. package/dist/handlers/wildfireHandler.js +186 -0
  102. package/dist/handlers/wildfireHandler.js.map +1 -0
  103. package/dist/index.d.ts +7 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +735 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/services/blitzortung.d.ts +67 -0
  108. package/dist/services/blitzortung.d.ts.map +1 -0
  109. package/dist/services/blitzortung.js +475 -0
  110. package/dist/services/blitzortung.js.map +1 -0
  111. package/dist/services/geocoding.d.ts +57 -0
  112. package/dist/services/geocoding.d.ts.map +1 -0
  113. package/dist/services/geocoding.js +393 -0
  114. package/dist/services/geocoding.js.map +1 -0
  115. package/dist/services/locationStore.d.ts +62 -0
  116. package/dist/services/locationStore.d.ts.map +1 -0
  117. package/dist/services/locationStore.js +201 -0
  118. package/dist/services/locationStore.js.map +1 -0
  119. package/dist/services/ncei.d.ts +61 -0
  120. package/dist/services/ncei.d.ts.map +1 -0
  121. package/dist/services/ncei.js +126 -0
  122. package/dist/services/ncei.js.map +1 -0
  123. package/dist/services/nifc.d.ts +44 -0
  124. package/dist/services/nifc.d.ts.map +1 -0
  125. package/dist/services/nifc.js +159 -0
  126. package/dist/services/nifc.js.map +1 -0
  127. package/dist/services/noaa.d.ts +161 -0
  128. package/dist/services/noaa.d.ts.map +1 -0
  129. package/dist/services/noaa.js +681 -0
  130. package/dist/services/noaa.js.map +1 -0
  131. package/dist/services/nominatim.d.ts +62 -0
  132. package/dist/services/nominatim.d.ts.map +1 -0
  133. package/dist/services/nominatim.js +254 -0
  134. package/dist/services/nominatim.js.map +1 -0
  135. package/dist/services/openmeteo.d.ts +189 -0
  136. package/dist/services/openmeteo.d.ts.map +1 -0
  137. package/dist/services/openmeteo.js +936 -0
  138. package/dist/services/openmeteo.js.map +1 -0
  139. package/dist/services/rainviewer.d.ts +37 -0
  140. package/dist/services/rainviewer.d.ts.map +1 -0
  141. package/dist/services/rainviewer.js +115 -0
  142. package/dist/services/rainviewer.js.map +1 -0
  143. package/dist/types/imagery.d.ts +82 -0
  144. package/dist/types/imagery.d.ts.map +1 -0
  145. package/dist/types/imagery.js +6 -0
  146. package/dist/types/imagery.js.map +1 -0
  147. package/dist/types/lightning.d.ts +89 -0
  148. package/dist/types/lightning.d.ts.map +1 -0
  149. package/dist/types/lightning.js +6 -0
  150. package/dist/types/lightning.js.map +1 -0
  151. package/dist/types/noaa.d.ts +535 -0
  152. package/dist/types/noaa.d.ts.map +1 -0
  153. package/dist/types/noaa.js +5 -0
  154. package/dist/types/noaa.js.map +1 -0
  155. package/dist/types/nominatim.d.ts +72 -0
  156. package/dist/types/nominatim.d.ts.map +1 -0
  157. package/dist/types/nominatim.js +6 -0
  158. package/dist/types/nominatim.js.map +1 -0
  159. package/dist/types/openmeteo.d.ts +583 -0
  160. package/dist/types/openmeteo.d.ts.map +1 -0
  161. package/dist/types/openmeteo.js +6 -0
  162. package/dist/types/openmeteo.js.map +1 -0
  163. package/dist/types/savedLocations.d.ts +58 -0
  164. package/dist/types/savedLocations.d.ts.map +1 -0
  165. package/dist/types/savedLocations.js +5 -0
  166. package/dist/types/savedLocations.js.map +1 -0
  167. package/dist/types/wildfire.d.ts +83 -0
  168. package/dist/types/wildfire.d.ts.map +1 -0
  169. package/dist/types/wildfire.js +5 -0
  170. package/dist/types/wildfire.js.map +1 -0
  171. package/dist/utils/airQuality.d.ts +54 -0
  172. package/dist/utils/airQuality.d.ts.map +1 -0
  173. package/dist/utils/airQuality.js +251 -0
  174. package/dist/utils/airQuality.js.map +1 -0
  175. package/dist/utils/cache.d.ts +69 -0
  176. package/dist/utils/cache.d.ts.map +1 -0
  177. package/dist/utils/cache.js +164 -0
  178. package/dist/utils/cache.js.map +1 -0
  179. package/dist/utils/distance.d.ts +25 -0
  180. package/dist/utils/distance.d.ts.map +1 -0
  181. package/dist/utils/distance.js +40 -0
  182. package/dist/utils/distance.js.map +1 -0
  183. package/dist/utils/fireWeather.d.ts +76 -0
  184. package/dist/utils/fireWeather.d.ts.map +1 -0
  185. package/dist/utils/fireWeather.js +243 -0
  186. package/dist/utils/fireWeather.js.map +1 -0
  187. package/dist/utils/geography.d.ts +79 -0
  188. package/dist/utils/geography.d.ts.map +1 -0
  189. package/dist/utils/geography.js +266 -0
  190. package/dist/utils/geography.js.map +1 -0
  191. package/dist/utils/geohash.d.ts +62 -0
  192. package/dist/utils/geohash.d.ts.map +1 -0
  193. package/dist/utils/geohash.js +146 -0
  194. package/dist/utils/geohash.js.map +1 -0
  195. package/dist/utils/locationResolver.d.ts +34 -0
  196. package/dist/utils/locationResolver.d.ts.map +1 -0
  197. package/dist/utils/locationResolver.js +120 -0
  198. package/dist/utils/locationResolver.js.map +1 -0
  199. package/dist/utils/logger.d.ts +75 -0
  200. package/dist/utils/logger.d.ts.map +1 -0
  201. package/dist/utils/logger.js +153 -0
  202. package/dist/utils/logger.js.map +1 -0
  203. package/dist/utils/marine.d.ts +59 -0
  204. package/dist/utils/marine.d.ts.map +1 -0
  205. package/dist/utils/marine.js +215 -0
  206. package/dist/utils/marine.js.map +1 -0
  207. package/dist/utils/normals.d.ts +86 -0
  208. package/dist/utils/normals.d.ts.map +1 -0
  209. package/dist/utils/normals.js +223 -0
  210. package/dist/utils/normals.js.map +1 -0
  211. package/dist/utils/snow.d.ts +45 -0
  212. package/dist/utils/snow.d.ts.map +1 -0
  213. package/dist/utils/snow.js +144 -0
  214. package/dist/utils/snow.js.map +1 -0
  215. package/dist/utils/temperatureConversion.d.ts +12 -0
  216. package/dist/utils/temperatureConversion.d.ts.map +1 -0
  217. package/dist/utils/temperatureConversion.js +17 -0
  218. package/dist/utils/temperatureConversion.js.map +1 -0
  219. package/dist/utils/timezone.d.ts +56 -0
  220. package/dist/utils/timezone.d.ts.map +1 -0
  221. package/dist/utils/timezone.js +167 -0
  222. package/dist/utils/timezone.js.map +1 -0
  223. package/dist/utils/units.d.ts +69 -0
  224. package/dist/utils/units.d.ts.map +1 -0
  225. package/dist/utils/units.js +158 -0
  226. package/dist/utils/units.js.map +1 -0
  227. package/dist/utils/validation.d.ts +89 -0
  228. package/dist/utils/validation.d.ts.map +1 -0
  229. package/dist/utils/validation.js +177 -0
  230. package/dist/utils/validation.js.map +1 -0
  231. package/dist/utils/version.d.ts +15 -0
  232. package/dist/utils/version.d.ts.map +1 -0
  233. package/dist/utils/version.js +24 -0
  234. package/dist/utils/version.js.map +1 -0
  235. 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":"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"}
@@ -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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"}