@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,31 @@
1
+ /**
2
+ * Cache configuration for weather data
3
+ *
4
+ * TTL (Time To Live) values are set based on data volatility:
5
+ * - Historical data: Never changes once recorded
6
+ * - Geographic data: Static (grid coordinates, station locations)
7
+ * - Forecasts: Updated approximately hourly
8
+ * - Current conditions: Observations typically update every 20-60 minutes
9
+ */
10
+ export declare const CacheConfig: {
11
+ readonly enabled: boolean;
12
+ readonly maxSize: number;
13
+ readonly apiTimeoutMs: number;
14
+ readonly ttl: {
15
+ readonly gridCoordinates: number;
16
+ readonly stations: number;
17
+ readonly forecast: number;
18
+ readonly currentConditions: number;
19
+ readonly alerts: number;
20
+ readonly recentHistorical: number;
21
+ readonly historicalData: number;
22
+ readonly serviceStatus: number;
23
+ };
24
+ };
25
+ /**
26
+ * Determine appropriate TTL for historical weather data based on date
27
+ * @param startDate Start date of the historical query
28
+ * @returns TTL in milliseconds
29
+ */
30
+ export declare function getHistoricalDataTTL(startDate: string | Date): number;
31
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/config/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkDH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CA8Cd,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAYrE"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Cache configuration for weather data
3
+ *
4
+ * TTL (Time To Live) values are set based on data volatility:
5
+ * - Historical data: Never changes once recorded
6
+ * - Geographic data: Static (grid coordinates, station locations)
7
+ * - Forecasts: Updated approximately hourly
8
+ * - Current conditions: Observations typically update every 20-60 minutes
9
+ */
10
+ // Time constants in milliseconds
11
+ const MINUTE = 60 * 1000;
12
+ const HOUR = 60 * MINUTE;
13
+ const DAY = 24 * HOUR;
14
+ /**
15
+ * Parse a boolean environment variable
16
+ * @param key Environment variable key
17
+ * @param defaultValue Default value if not set
18
+ * @returns Boolean value
19
+ */
20
+ function getEnvBoolean(key, defaultValue) {
21
+ const value = process.env[key];
22
+ if (value === undefined)
23
+ return defaultValue;
24
+ return value !== 'false' && value !== '0';
25
+ }
26
+ /**
27
+ * Parse a number environment variable with validation
28
+ * @param key Environment variable key
29
+ * @param defaultValue Default value if not set or invalid
30
+ * @param min Minimum allowed value (optional)
31
+ * @param max Maximum allowed value (optional)
32
+ * @returns Validated number value
33
+ */
34
+ function getEnvNumber(key, defaultValue, min, max) {
35
+ const value = process.env[key];
36
+ if (value === undefined)
37
+ return defaultValue;
38
+ const parsed = parseInt(value, 10);
39
+ if (isNaN(parsed)) {
40
+ console.warn(`Invalid ${key}: "${value}". Using default: ${defaultValue}`);
41
+ return defaultValue;
42
+ }
43
+ if (min !== undefined && parsed < min) {
44
+ console.warn(`${key} too low: ${parsed}. Using minimum: ${min}`);
45
+ return min;
46
+ }
47
+ if (max !== undefined && parsed > max) {
48
+ console.warn(`${key} too high: ${parsed}. Using maximum: ${max}`);
49
+ return max;
50
+ }
51
+ return parsed;
52
+ }
53
+ export const CacheConfig = {
54
+ // Enable/disable caching globally
55
+ enabled: getEnvBoolean('CACHE_ENABLED', true),
56
+ // Maximum number of entries in cache before LRU eviction
57
+ // Min: 100, Max: 10000, Default: 1000
58
+ maxSize: getEnvNumber('CACHE_MAX_SIZE', 1000, 100, 10000),
59
+ // API timeout configuration
60
+ // Min: 5000ms (5 seconds), Max: 120000ms (2 minutes), Default: 30000ms (30 seconds)
61
+ apiTimeoutMs: getEnvNumber('API_TIMEOUT_MS', 30000, 5000, 120000),
62
+ // TTL values for different data types
63
+ ttl: {
64
+ // Grid coordinate lookups (lat/lon -> grid mapping)
65
+ // These are geographic and never change
66
+ gridCoordinates: Infinity,
67
+ // Weather station lists
68
+ // Stations rarely change
69
+ stations: 24 * HOUR,
70
+ // 7-day forecasts
71
+ // NOAA updates forecasts approximately hourly
72
+ forecast: 2 * HOUR,
73
+ // Current weather conditions
74
+ // Observations typically update every 20-60 minutes
75
+ currentConditions: 15 * MINUTE,
76
+ // Weather alerts
77
+ // Alerts can change rapidly, cache for shorter period
78
+ alerts: 5 * MINUTE,
79
+ // Recent historical data (< 7 days old)
80
+ // Recent data may still be updated/corrected
81
+ recentHistorical: 1 * HOUR,
82
+ // Historical data (> 1 day old from current time)
83
+ // Historical data beyond 1 day is finalized and won't change
84
+ historicalData: Infinity,
85
+ // Service health check status
86
+ // Check freshness periodically
87
+ serviceStatus: 5 * MINUTE,
88
+ },
89
+ };
90
+ /**
91
+ * Determine appropriate TTL for historical weather data based on date
92
+ * @param startDate Start date of the historical query
93
+ * @returns TTL in milliseconds
94
+ */
95
+ export function getHistoricalDataTTL(startDate) {
96
+ const start = typeof startDate === 'string' ? new Date(startDate) : startDate;
97
+ const now = new Date();
98
+ const daysDiff = (now.getTime() - start.getTime()) / DAY;
99
+ if (daysDiff > 1) {
100
+ // Data is more than 1 day old - it's finalized and won't change
101
+ return CacheConfig.ttl.historicalData;
102
+ }
103
+ else {
104
+ // Recent data may still be updated
105
+ return CacheConfig.ttl.recentHistorical;
106
+ }
107
+ }
108
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/config/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Display thresholds and constants for weather data formatting
3
+ *
4
+ * These values determine when certain weather metrics are shown or highlighted
5
+ */
6
+ export declare const DisplayThresholds: {
7
+ /**
8
+ * Temperature thresholds (in Fahrenheit)
9
+ */
10
+ readonly temperature: {
11
+ /** Show heat index when temperature is above this value */
12
+ readonly showHeatIndex: 80;
13
+ /** Show wind chill when temperature is below this value */
14
+ readonly showWindChill: 50;
15
+ };
16
+ /**
17
+ * Wind thresholds
18
+ */
19
+ readonly wind: {
20
+ /** Show gusts if they are this ratio higher than sustained wind speed (1.2 = 20% higher) */
21
+ readonly gustSignificanceRatio: 1.2;
22
+ };
23
+ /**
24
+ * Visibility thresholds (in miles)
25
+ */
26
+ readonly visibility: {
27
+ /** Dense fog */
28
+ readonly denseFog: 0.25;
29
+ /** Fog */
30
+ readonly fog: 1;
31
+ /** Haze or mist */
32
+ readonly hazeMist: 3;
33
+ /** Clear visibility */
34
+ readonly clear: 10;
35
+ };
36
+ /**
37
+ * Precipitation thresholds
38
+ */
39
+ readonly precipitation: {
40
+ /** Light precipitation (inches per hour) */
41
+ readonly light: 0.1;
42
+ /** Moderate precipitation (inches per hour) */
43
+ readonly moderate: 0.3;
44
+ /** Heavy precipitation (inches per hour) */
45
+ readonly heavy: 0.5;
46
+ };
47
+ };
48
+ /**
49
+ * API-related constants
50
+ */
51
+ export declare const ApiConstants: {
52
+ /**
53
+ * Historical data threshold (in days)
54
+ * Data older than this uses archival API instead of recent observations
55
+ */
56
+ readonly historicalDataThresholdDays: 7;
57
+ /**
58
+ * Maximum date range for hourly historical data (in days)
59
+ */
60
+ readonly maxHourlyHistoricalDays: 31;
61
+ };
62
+ /**
63
+ * Formatting constants
64
+ */
65
+ export declare const FormatConstants: {
66
+ /**
67
+ * Default forecast periods to show
68
+ */
69
+ readonly defaultForecastDays: 7;
70
+ /**
71
+ * Maximum forecast days (Open-Meteo supports up to 16 days)
72
+ */
73
+ readonly maxForecastDays: 16;
74
+ /**
75
+ * Default observation limit for historical data
76
+ */
77
+ readonly defaultHistoricalLimit: 168;
78
+ /**
79
+ * Maximum observations to return
80
+ */
81
+ readonly maxHistoricalLimit: 500;
82
+ };
83
+ //# sourceMappingURL=displayThresholds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"displayThresholds.d.ts","sourceRoot":"","sources":["../../src/config/displayThresholds.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;;QAED,2DAA2D;;QAE3D,2DAA2D;;;IAI7D;;OAEG;;QAED,4FAA4F;;;IAI9F;;OAEG;;QAED,gBAAgB;;QAEhB,UAAU;;QAEV,mBAAmB;;QAEnB,uBAAuB;;;IAIzB;;OAEG;;QAED,4CAA4C;;QAE5C,+CAA+C;;QAE/C,4CAA4C;;;CAGtC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB;;;OAGG;;IAGH;;OAEG;;CAEK,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;CAEK,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Display thresholds and constants for weather data formatting
3
+ *
4
+ * These values determine when certain weather metrics are shown or highlighted
5
+ */
6
+ export const DisplayThresholds = {
7
+ /**
8
+ * Temperature thresholds (in Fahrenheit)
9
+ */
10
+ temperature: {
11
+ /** Show heat index when temperature is above this value */
12
+ showHeatIndex: 80,
13
+ /** Show wind chill when temperature is below this value */
14
+ showWindChill: 50,
15
+ },
16
+ /**
17
+ * Wind thresholds
18
+ */
19
+ wind: {
20
+ /** Show gusts if they are this ratio higher than sustained wind speed (1.2 = 20% higher) */
21
+ gustSignificanceRatio: 1.2,
22
+ },
23
+ /**
24
+ * Visibility thresholds (in miles)
25
+ */
26
+ visibility: {
27
+ /** Dense fog */
28
+ denseFog: 0.25,
29
+ /** Fog */
30
+ fog: 1.0,
31
+ /** Haze or mist */
32
+ hazeMist: 3.0,
33
+ /** Clear visibility */
34
+ clear: 10.0,
35
+ },
36
+ /**
37
+ * Precipitation thresholds
38
+ */
39
+ precipitation: {
40
+ /** Light precipitation (inches per hour) */
41
+ light: 0.1,
42
+ /** Moderate precipitation (inches per hour) */
43
+ moderate: 0.3,
44
+ /** Heavy precipitation (inches per hour) */
45
+ heavy: 0.5,
46
+ },
47
+ };
48
+ /**
49
+ * API-related constants
50
+ */
51
+ export const ApiConstants = {
52
+ /**
53
+ * Historical data threshold (in days)
54
+ * Data older than this uses archival API instead of recent observations
55
+ */
56
+ historicalDataThresholdDays: 7,
57
+ /**
58
+ * Maximum date range for hourly historical data (in days)
59
+ */
60
+ maxHourlyHistoricalDays: 31,
61
+ };
62
+ /**
63
+ * Formatting constants
64
+ */
65
+ export const FormatConstants = {
66
+ /**
67
+ * Default forecast periods to show
68
+ */
69
+ defaultForecastDays: 7,
70
+ /**
71
+ * Maximum forecast days (Open-Meteo supports up to 16 days)
72
+ */
73
+ maxForecastDays: 16,
74
+ /**
75
+ * Default observation limit for historical data
76
+ */
77
+ defaultHistoricalLimit: 168, // One week of hourly data
78
+ /**
79
+ * Maximum observations to return
80
+ */
81
+ maxHistoricalLimit: 500,
82
+ };
83
+ //# sourceMappingURL=displayThresholds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"displayThresholds.js","sourceRoot":"","sources":["../../src/config/displayThresholds.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B;;OAEG;IACH,WAAW,EAAE;QACX,2DAA2D;QAC3D,aAAa,EAAE,EAAE;QACjB,2DAA2D;QAC3D,aAAa,EAAE,EAAE;KAClB;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,4FAA4F;QAC5F,qBAAqB,EAAE,GAAG;KAC3B;IAED;;OAEG;IACH,UAAU,EAAE;QACV,gBAAgB;QAChB,QAAQ,EAAE,IAAI;QACd,UAAU;QACV,GAAG,EAAE,GAAG;QACR,mBAAmB;QACnB,QAAQ,EAAE,GAAG;QACb,uBAAuB;QACvB,KAAK,EAAE,IAAI;KACZ;IAED;;OAEG;IACH,aAAa,EAAE;QACb,4CAA4C;QAC5C,KAAK,EAAE,GAAG;QACV,+CAA+C;QAC/C,QAAQ,EAAE,GAAG;QACb,4CAA4C;QAC5C,KAAK,EAAE,GAAG;KACX;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;;;OAGG;IACH,2BAA2B,EAAE,CAAC;IAE9B;;OAEG;IACH,uBAAuB,EAAE,EAAE;CACnB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;;OAEG;IACH,mBAAmB,EAAE,CAAC;IAEtB;;OAEG;IACH,eAAe,EAAE,EAAE;IAEnB;;OAEG;IACH,sBAAsB,EAAE,GAAG,EAAE,0BAA0B;IAEvD;;OAEG;IACH,kBAAkB,EAAE,GAAG;CACf,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Tool configuration for Weather MCP Server
3
+ *
4
+ * Supports both presets and individual tool control for flexible configuration.
5
+ *
6
+ * Usage examples:
7
+ * - ENABLED_TOOLS=basic # Only basic weather tools
8
+ * - ENABLED_TOOLS=full # All tools except experimental
9
+ * - ENABLED_TOOLS=basic,+air_quality # Basic tools + air quality
10
+ * - ENABLED_TOOLS=all,-marine # All tools except marine
11
+ * - ENABLED_TOOLS=forecast,alerts,search # Specific tools only
12
+ */
13
+ /**
14
+ * Available tool names in the Weather MCP Server
15
+ */
16
+ export type ToolName = 'get_forecast' | 'get_alerts' | 'get_historical_weather' | 'check_service_status' | 'search_location' | 'get_air_quality' | 'get_marine_conditions' | 'get_weather_imagery' | 'get_lightning_activity' | 'get_river_conditions' | 'get_wildfire_info' | 'save_location' | 'list_saved_locations' | 'get_saved_location' | 'remove_saved_location';
17
+ /**
18
+ * Tool configuration singleton
19
+ */
20
+ declare class ToolConfig {
21
+ private enabledTools;
22
+ constructor();
23
+ /**
24
+ * Check if a specific tool is enabled
25
+ */
26
+ isEnabled(tool: ToolName): boolean;
27
+ /**
28
+ * Get all enabled tools
29
+ */
30
+ getEnabledTools(): ToolName[];
31
+ /**
32
+ * Get available presets
33
+ */
34
+ static getPresets(): Record<string, ToolName[]>;
35
+ /**
36
+ * Get available tool aliases
37
+ */
38
+ static getAliases(): Record<string, ToolName>;
39
+ }
40
+ export declare const toolConfig: ToolConfig;
41
+ export declare const PRESETS: Record<string, ToolName[]>;
42
+ export declare const ALIASES: Record<string, ToolName>;
43
+ export {};
44
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,YAAY,GACZ,wBAAwB,GACxB,sBAAsB,GACtB,iBAAiB,GACjB,iBAAiB,GACjB,uBAAuB,GACvB,qBAAqB,GACrB,wBAAwB,GACxB,sBAAsB,GACtB,mBAAmB,GACnB,eAAe,GACf,sBAAsB,GACtB,oBAAoB,GACpB,uBAAuB,CAAC;AAiO5B;;GAEG;AACH,cAAM,UAAU;IACd,OAAO,CAAC,YAAY,CAAgB;;IAapC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAIlC;;OAEG;IACH,eAAe,IAAI,QAAQ,EAAE;IAI7B;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAI/C;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;CAG9C;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC;AAG3C,eAAO,MAAM,OAAO,4BAAe,CAAC;AACpC,eAAO,MAAM,OAAO,0BAAe,CAAC"}
@@ -0,0 +1,269 @@
1
+ /**
2
+ * Tool configuration for Weather MCP Server
3
+ *
4
+ * Supports both presets and individual tool control for flexible configuration.
5
+ *
6
+ * Usage examples:
7
+ * - ENABLED_TOOLS=basic # Only basic weather tools
8
+ * - ENABLED_TOOLS=full # All tools except experimental
9
+ * - ENABLED_TOOLS=basic,+air_quality # Basic tools + air quality
10
+ * - ENABLED_TOOLS=all,-marine # All tools except marine
11
+ * - ENABLED_TOOLS=forecast,alerts,search # Specific tools only
12
+ */
13
+ /**
14
+ * Tool presets for easy configuration
15
+ */
16
+ const TOOL_PRESETS = {
17
+ // Essential weather tools - minimal overhead
18
+ basic: [
19
+ 'get_forecast',
20
+ 'get_alerts',
21
+ 'search_location',
22
+ 'check_service_status',
23
+ 'save_location',
24
+ 'list_saved_locations',
25
+ 'get_saved_location',
26
+ 'remove_saved_location'
27
+ ],
28
+ // Basic + historical data
29
+ standard: [
30
+ 'get_forecast',
31
+ 'get_alerts',
32
+ 'get_historical_weather',
33
+ 'search_location',
34
+ 'check_service_status',
35
+ 'save_location',
36
+ 'list_saved_locations',
37
+ 'get_saved_location',
38
+ 'remove_saved_location'
39
+ ],
40
+ // Standard + environmental data
41
+ full: [
42
+ 'get_forecast',
43
+ 'get_alerts',
44
+ 'get_historical_weather',
45
+ 'search_location',
46
+ 'check_service_status',
47
+ 'get_air_quality',
48
+ 'save_location',
49
+ 'list_saved_locations',
50
+ 'get_saved_location',
51
+ 'remove_saved_location'
52
+ ],
53
+ // All available tools
54
+ all: [
55
+ 'get_forecast',
56
+ 'get_alerts',
57
+ 'get_historical_weather',
58
+ 'check_service_status',
59
+ 'search_location',
60
+ 'get_air_quality',
61
+ 'get_marine_conditions',
62
+ 'get_weather_imagery',
63
+ 'get_lightning_activity',
64
+ 'get_river_conditions',
65
+ 'get_wildfire_info',
66
+ 'save_location',
67
+ 'list_saved_locations',
68
+ 'get_saved_location',
69
+ 'remove_saved_location'
70
+ ]
71
+ };
72
+ /**
73
+ * Tool aliases for convenience (short names)
74
+ */
75
+ const TOOL_ALIASES = {
76
+ 'forecast': 'get_forecast',
77
+ 'alerts': 'get_alerts',
78
+ 'warnings': 'get_alerts',
79
+ 'historical': 'get_historical_weather',
80
+ 'history': 'get_historical_weather',
81
+ 'status': 'check_service_status',
82
+ 'location': 'search_location',
83
+ 'search': 'search_location',
84
+ 'air_quality': 'get_air_quality',
85
+ 'aqi': 'get_air_quality',
86
+ 'marine': 'get_marine_conditions',
87
+ 'ocean': 'get_marine_conditions',
88
+ 'waves': 'get_marine_conditions',
89
+ 'imagery': 'get_weather_imagery',
90
+ 'radar': 'get_weather_imagery',
91
+ 'satellite': 'get_weather_imagery',
92
+ 'lightning': 'get_lightning_activity',
93
+ 'strikes': 'get_lightning_activity',
94
+ 'thunderstorm': 'get_lightning_activity',
95
+ 'river': 'get_river_conditions',
96
+ 'rivers': 'get_river_conditions',
97
+ 'flood': 'get_river_conditions',
98
+ 'streamflow': 'get_river_conditions',
99
+ 'wildfire': 'get_wildfire_info',
100
+ 'wildfires': 'get_wildfire_info',
101
+ 'fire': 'get_wildfire_info',
102
+ 'fires': 'get_wildfire_info',
103
+ 'smoke': 'get_wildfire_info'
104
+ };
105
+ /**
106
+ * Parse the ENABLED_TOOLS environment variable
107
+ *
108
+ * Supports:
109
+ * - Presets: "basic", "standard", "full", "all"
110
+ * - Individual tools: "forecast,current,alerts"
111
+ * - Adding to presets: "basic,+air_quality"
112
+ * - Removing from presets: "all,-marine"
113
+ * - Combinations: "standard,+air_quality,-alerts"
114
+ *
115
+ * @param envValue The ENABLED_TOOLS environment variable value
116
+ * @returns Set of enabled tool names
117
+ */
118
+ function parseEnabledTools(envValue) {
119
+ // Default to "basic" preset if not specified
120
+ if (!envValue) {
121
+ return new Set(TOOL_PRESETS.basic);
122
+ }
123
+ const parts = envValue.toLowerCase().split(',').map(s => s.trim()).filter(Boolean);
124
+ let enabledTools = new Set();
125
+ let hasBaseSet = false;
126
+ for (const part of parts) {
127
+ // Handle additions (+tool)
128
+ if (part.startsWith('+')) {
129
+ const toolName = part.slice(1);
130
+ const resolvedTool = resolveToolName(toolName);
131
+ if (resolvedTool) {
132
+ enabledTools.add(resolvedTool);
133
+ }
134
+ else {
135
+ console.warn(`Unknown tool to add: "${toolName}"`);
136
+ }
137
+ continue;
138
+ }
139
+ // Handle removals (-tool)
140
+ if (part.startsWith('-')) {
141
+ const toolName = part.slice(1);
142
+ const resolvedTool = resolveToolName(toolName);
143
+ if (resolvedTool) {
144
+ enabledTools.delete(resolvedTool);
145
+ }
146
+ else {
147
+ console.warn(`Unknown tool to remove: "${toolName}"`);
148
+ }
149
+ continue;
150
+ }
151
+ // Handle presets
152
+ if (part in TOOL_PRESETS) {
153
+ if (!hasBaseSet) {
154
+ // First preset replaces the default
155
+ enabledTools = new Set(TOOL_PRESETS[part]);
156
+ hasBaseSet = true;
157
+ }
158
+ else {
159
+ // Additional presets merge with existing
160
+ for (const tool of TOOL_PRESETS[part]) {
161
+ enabledTools.add(tool);
162
+ }
163
+ }
164
+ continue;
165
+ }
166
+ // Handle individual tools
167
+ const resolvedTool = resolveToolName(part);
168
+ if (resolvedTool) {
169
+ if (!hasBaseSet) {
170
+ // First individual tool creates a new set
171
+ enabledTools = new Set([resolvedTool]);
172
+ hasBaseSet = true;
173
+ }
174
+ else {
175
+ enabledTools.add(resolvedTool);
176
+ }
177
+ }
178
+ else {
179
+ console.warn(`Unknown tool or preset: "${part}"`);
180
+ }
181
+ }
182
+ return enabledTools;
183
+ }
184
+ /**
185
+ * Resolve a tool name or alias to the canonical tool name
186
+ * @param name Tool name or alias
187
+ * @returns Canonical tool name or undefined if not found
188
+ */
189
+ function resolveToolName(name) {
190
+ const normalized = name.toLowerCase();
191
+ // Check if it's already a canonical name
192
+ if (isToolName(normalized)) {
193
+ return normalized;
194
+ }
195
+ // Check aliases
196
+ if (normalized in TOOL_ALIASES) {
197
+ return TOOL_ALIASES[normalized];
198
+ }
199
+ return undefined;
200
+ }
201
+ /**
202
+ * Type guard to check if a string is a valid ToolName
203
+ */
204
+ function isToolName(name) {
205
+ const validTools = [
206
+ 'get_forecast',
207
+ 'get_alerts',
208
+ 'get_historical_weather',
209
+ 'check_service_status',
210
+ 'search_location',
211
+ 'get_air_quality',
212
+ 'get_marine_conditions',
213
+ 'get_weather_imagery',
214
+ 'get_lightning_activity',
215
+ 'get_river_conditions',
216
+ 'get_wildfire_info',
217
+ 'save_location',
218
+ 'list_saved_locations',
219
+ 'get_saved_location',
220
+ 'remove_saved_location'
221
+ ];
222
+ return validTools.includes(name);
223
+ }
224
+ /**
225
+ * Tool configuration singleton
226
+ */
227
+ class ToolConfig {
228
+ enabledTools;
229
+ constructor() {
230
+ this.enabledTools = parseEnabledTools(process.env.ENABLED_TOOLS);
231
+ // Log enabled tools for debugging
232
+ if (this.enabledTools.size > 0) {
233
+ console.error(`[ToolConfig] Enabled tools (${this.enabledTools.size}): ${Array.from(this.enabledTools).join(', ')}`);
234
+ }
235
+ else {
236
+ console.error('[ToolConfig] Warning: No tools enabled!');
237
+ }
238
+ }
239
+ /**
240
+ * Check if a specific tool is enabled
241
+ */
242
+ isEnabled(tool) {
243
+ return this.enabledTools.has(tool);
244
+ }
245
+ /**
246
+ * Get all enabled tools
247
+ */
248
+ getEnabledTools() {
249
+ return Array.from(this.enabledTools);
250
+ }
251
+ /**
252
+ * Get available presets
253
+ */
254
+ static getPresets() {
255
+ return { ...TOOL_PRESETS };
256
+ }
257
+ /**
258
+ * Get available tool aliases
259
+ */
260
+ static getAliases() {
261
+ return { ...TOOL_ALIASES };
262
+ }
263
+ }
264
+ // Export singleton instance
265
+ export const toolConfig = new ToolConfig();
266
+ // Export preset definitions for documentation
267
+ export const PRESETS = TOOL_PRESETS;
268
+ export const ALIASES = TOOL_ALIASES;
269
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"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"}