@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,25 @@
1
+ /**
2
+ * Utility functions for calculating distances between coordinates
3
+ */
4
+ /**
5
+ * Calculate the great-circle distance between two points on Earth using the Haversine formula
6
+ * @param lat1 Latitude of first point in degrees
7
+ * @param lon1 Longitude of first point in degrees
8
+ * @param lat2 Latitude of second point in degrees
9
+ * @param lon2 Longitude of second point in degrees
10
+ * @returns Distance in kilometers
11
+ */
12
+ export declare function calculateDistance(lat1: number, lon1: number, lat2: number, lon2: number): number;
13
+ /**
14
+ * Convert kilometers to miles
15
+ * @param km Distance in kilometers
16
+ * @returns Distance in miles
17
+ */
18
+ export declare function kmToMiles(km: number): number;
19
+ /**
20
+ * Convert miles to kilometers
21
+ * @param miles Distance in miles
22
+ * @returns Distance in kilometers
23
+ */
24
+ export declare function milesToKm(miles: number): number;
25
+ //# sourceMappingURL=distance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distance.d.ts","sourceRoot":"","sources":["../../src/utils/distance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,CAcR;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Utility functions for calculating distances between coordinates
3
+ */
4
+ /**
5
+ * Calculate the great-circle distance between two points on Earth using the Haversine formula
6
+ * @param lat1 Latitude of first point in degrees
7
+ * @param lon1 Longitude of first point in degrees
8
+ * @param lat2 Latitude of second point in degrees
9
+ * @param lon2 Longitude of second point in degrees
10
+ * @returns Distance in kilometers
11
+ */
12
+ export function calculateDistance(lat1, lon1, lat2, lon2) {
13
+ const R = 6371; // Earth's radius in km
14
+ const dLat = ((lat2 - lat1) * Math.PI) / 180;
15
+ const dLon = ((lon2 - lon1) * Math.PI) / 180;
16
+ const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
17
+ Math.cos((lat1 * Math.PI) / 180) *
18
+ Math.cos((lat2 * Math.PI) / 180) *
19
+ Math.sin(dLon / 2) *
20
+ Math.sin(dLon / 2);
21
+ const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
22
+ return R * c;
23
+ }
24
+ /**
25
+ * Convert kilometers to miles
26
+ * @param km Distance in kilometers
27
+ * @returns Distance in miles
28
+ */
29
+ export function kmToMiles(km) {
30
+ return km * 0.621371;
31
+ }
32
+ /**
33
+ * Convert miles to kilometers
34
+ * @param miles Distance in miles
35
+ * @returns Distance in kilometers
36
+ */
37
+ export function milesToKm(miles) {
38
+ return miles / 0.621371;
39
+ }
40
+ //# sourceMappingURL=distance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distance.js","sourceRoot":"","sources":["../../src/utils/distance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY;IAEZ,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,uBAAuB;IACvC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAE7C,MAAM,CAAC,GACL,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAEvB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,OAAO,EAAE,GAAG,QAAQ,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,KAAK,GAAG,QAAQ,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Fire weather utility functions for interpreting fire danger indices
3
+ */
4
+ /**
5
+ * Haines Index category information
6
+ * The Haines Index measures atmospheric stability and dryness that affect fire growth potential
7
+ * Scale: 2-6 (Low, Moderate, High fire growth potential)
8
+ */
9
+ export interface HainesCategory {
10
+ level: string;
11
+ description: string;
12
+ fireGrowthPotential: string;
13
+ color: string;
14
+ }
15
+ /**
16
+ * Get Haines Index category
17
+ * Haines Index: 2-6 scale measuring atmospheric contribution to fire growth
18
+ * - Low elevation (< 3,000 ft): 2-3 = Low, 4 = Moderate, 5-6 = High
19
+ * - Mid elevation (3,000-10,000 ft): Same scale
20
+ * - High elevation (> 10,000 ft): Same scale
21
+ */
22
+ export declare function getHainesCategory(hainesValue: number): HainesCategory;
23
+ /**
24
+ * Get grassland fire danger category
25
+ * Scale: 1-4 (Low, Moderate, High, Very High)
26
+ */
27
+ export declare function getGrasslandFireDangerCategory(value: number): {
28
+ level: string;
29
+ description: string;
30
+ color: string;
31
+ };
32
+ /**
33
+ * Get red flag threat index category
34
+ * Indicates potential for Red Flag Warning conditions
35
+ */
36
+ export declare function getRedFlagCategory(value: number): {
37
+ level: string;
38
+ description: string;
39
+ color: string;
40
+ };
41
+ /**
42
+ * Get current fire weather value from gridpoint data series
43
+ * Returns the value for the current time period
44
+ */
45
+ export declare function getCurrentFireWeatherValue(dataSeries: {
46
+ values: Array<{
47
+ validTime: string;
48
+ value: number;
49
+ }>;
50
+ } | undefined): number | null;
51
+ /**
52
+ * Format mixing height value
53
+ * Mixing height indicates how high smoke and pollutants can rise
54
+ * Higher is generally better for smoke dispersion
55
+ */
56
+ export declare function formatMixingHeight(heightFt: number | null): string;
57
+ /**
58
+ * Interpret transport wind speed for fire behavior
59
+ * Transport winds carry smoke and can influence fire spread
60
+ */
61
+ export declare function interpretTransportWind(speedMph: number | null): string;
62
+ /**
63
+ * Fire weather context information for when indices aren't available
64
+ */
65
+ export interface FireWeatherContext {
66
+ hasIndices: boolean;
67
+ reason: string;
68
+ seasonalRisk: 'Low' | 'Moderate' | 'Elevated' | 'High';
69
+ explanatoryText: string;
70
+ }
71
+ /**
72
+ * Determine fire weather context and why indices may not be available
73
+ * Provides user-friendly explanations for missing fire weather data
74
+ */
75
+ export declare function getFireWeatherContext(latitude: number, longitude: number, timestamp: string, hainesValue: number | null, grasslandValue: number | null, redFlagValue: number | null, humidity?: number | null): FireWeatherContext;
76
+ //# sourceMappingURL=fireWeather.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fireWeather.d.ts","sourceRoot":"","sources":["../../src/utils/fireWeather.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CA8BrE;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CA0BA;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CA0BA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQzI;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAclE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CActE;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IACvD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,kBAAkB,CAsEpB"}
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Fire weather utility functions for interpreting fire danger indices
3
+ */
4
+ /**
5
+ * Get Haines Index category
6
+ * Haines Index: 2-6 scale measuring atmospheric contribution to fire growth
7
+ * - Low elevation (< 3,000 ft): 2-3 = Low, 4 = Moderate, 5-6 = High
8
+ * - Mid elevation (3,000-10,000 ft): Same scale
9
+ * - High elevation (> 10,000 ft): Same scale
10
+ */
11
+ export function getHainesCategory(hainesValue) {
12
+ if (hainesValue <= 3) {
13
+ return {
14
+ level: 'Low',
15
+ description: 'Low fire growth potential',
16
+ fireGrowthPotential: 'Very low likelihood of large plume-dominated fire growth. Fires should remain relatively easy to control.',
17
+ color: 'Green'
18
+ };
19
+ }
20
+ else if (hainesValue === 4) {
21
+ return {
22
+ level: 'Moderate',
23
+ description: 'Moderate fire growth potential',
24
+ fireGrowthPotential: 'Moderate likelihood of plume-dominated fire growth. Fires may develop rapidly and become difficult to control.',
25
+ color: 'Yellow'
26
+ };
27
+ }
28
+ else if (hainesValue === 5) {
29
+ return {
30
+ level: 'High',
31
+ description: 'High fire growth potential',
32
+ fireGrowthPotential: 'High likelihood of plume-dominated fire growth. Fires may exhibit extreme behavior and become very difficult to control.',
33
+ color: 'Orange'
34
+ };
35
+ }
36
+ else {
37
+ return {
38
+ level: 'Very High',
39
+ description: 'Very high fire growth potential',
40
+ fireGrowthPotential: 'Very high likelihood of extreme fire behavior. Fires will likely exhibit blow-up characteristics and be extremely difficult to control.',
41
+ color: 'Red'
42
+ };
43
+ }
44
+ }
45
+ /**
46
+ * Get grassland fire danger category
47
+ * Scale: 1-4 (Low, Moderate, High, Very High)
48
+ */
49
+ export function getGrasslandFireDangerCategory(value) {
50
+ if (value <= 1) {
51
+ return {
52
+ level: 'Low',
53
+ description: 'Low fire danger in grassland/rangeland fuels',
54
+ color: 'Green'
55
+ };
56
+ }
57
+ else if (value === 2) {
58
+ return {
59
+ level: 'Moderate',
60
+ description: 'Moderate fire danger in grassland/rangeland fuels',
61
+ color: 'Yellow'
62
+ };
63
+ }
64
+ else if (value === 3) {
65
+ return {
66
+ level: 'High',
67
+ description: 'High fire danger in grassland/rangeland fuels',
68
+ color: 'Orange'
69
+ };
70
+ }
71
+ else {
72
+ return {
73
+ level: 'Very High',
74
+ description: 'Very high fire danger in grassland/rangeland fuels',
75
+ color: 'Red'
76
+ };
77
+ }
78
+ }
79
+ /**
80
+ * Get red flag threat index category
81
+ * Indicates potential for Red Flag Warning conditions
82
+ */
83
+ export function getRedFlagCategory(value) {
84
+ if (value < 30) {
85
+ return {
86
+ level: 'Low',
87
+ description: 'Low threat of Red Flag Warning conditions',
88
+ color: 'Green'
89
+ };
90
+ }
91
+ else if (value < 60) {
92
+ return {
93
+ level: 'Moderate',
94
+ description: 'Moderate threat of Red Flag Warning conditions',
95
+ color: 'Yellow'
96
+ };
97
+ }
98
+ else if (value < 80) {
99
+ return {
100
+ level: 'High',
101
+ description: 'High threat of Red Flag Warning conditions',
102
+ color: 'Orange'
103
+ };
104
+ }
105
+ else {
106
+ return {
107
+ level: 'Very High',
108
+ description: 'Very high threat - Red Flag Warning likely',
109
+ color: 'Red'
110
+ };
111
+ }
112
+ }
113
+ /**
114
+ * Get current fire weather value from gridpoint data series
115
+ * Returns the value for the current time period
116
+ */
117
+ export function getCurrentFireWeatherValue(dataSeries) {
118
+ if (!dataSeries || !dataSeries.values || dataSeries.values.length === 0) {
119
+ return null;
120
+ }
121
+ // Get the first value (most recent/current)
122
+ // NOAA gridpoint data is ordered with current/near-future values first
123
+ return dataSeries.values[0]?.value ?? null;
124
+ }
125
+ /**
126
+ * Format mixing height value
127
+ * Mixing height indicates how high smoke and pollutants can rise
128
+ * Higher is generally better for smoke dispersion
129
+ */
130
+ export function formatMixingHeight(heightFt) {
131
+ if (heightFt === null) {
132
+ return 'N/A';
133
+ }
134
+ if (heightFt < 1000) {
135
+ return `${Math.round(heightFt)} ft (very poor dispersion)`;
136
+ }
137
+ else if (heightFt < 3000) {
138
+ return `${Math.round(heightFt)} ft (poor dispersion)`;
139
+ }
140
+ else if (heightFt < 6000) {
141
+ return `${Math.round(heightFt)} ft (moderate dispersion)`;
142
+ }
143
+ else {
144
+ return `${Math.round(heightFt)} ft (good dispersion)`;
145
+ }
146
+ }
147
+ /**
148
+ * Interpret transport wind speed for fire behavior
149
+ * Transport winds carry smoke and can influence fire spread
150
+ */
151
+ export function interpretTransportWind(speedMph) {
152
+ if (speedMph === null) {
153
+ return 'N/A';
154
+ }
155
+ if (speedMph < 5) {
156
+ return `${Math.round(speedMph)} mph (light - poor smoke transport)`;
157
+ }
158
+ else if (speedMph < 15) {
159
+ return `${Math.round(speedMph)} mph (moderate smoke transport)`;
160
+ }
161
+ else if (speedMph < 25) {
162
+ return `${Math.round(speedMph)} mph (good smoke transport)`;
163
+ }
164
+ else {
165
+ return `${Math.round(speedMph)} mph (strong - rapid fire spread potential)`;
166
+ }
167
+ }
168
+ /**
169
+ * Determine fire weather context and why indices may not be available
170
+ * Provides user-friendly explanations for missing fire weather data
171
+ */
172
+ export function getFireWeatherContext(latitude, longitude, timestamp, hainesValue, grasslandValue, redFlagValue, humidity) {
173
+ const hasIndices = hainesValue !== null || grasslandValue !== null || redFlagValue !== null;
174
+ // Parse month from timestamp
175
+ const date = new Date(timestamp);
176
+ const month = date.getMonth() + 1; // 1-12
177
+ // Determine geographic region
178
+ const isWestern = longitude < -100; // Western US (higher fire risk regions)
179
+ const isSouthwest = latitude < 40 && longitude < -100; // Southwest US
180
+ const isCalifornia = latitude > 32 && latitude < 42 && longitude > -124 && longitude < -114;
181
+ const isSouthern = latitude < 35; // Southern states
182
+ // Determine seasonal fire risk
183
+ let seasonalRisk = 'Low';
184
+ let reason = '';
185
+ let explanatoryText = '';
186
+ if (hasIndices) {
187
+ // Indices are present - fire conditions warrant monitoring
188
+ seasonalRisk = 'Elevated';
189
+ reason = 'Fire conditions warrant monitoring';
190
+ explanatoryText = 'Current atmospheric conditions support potential fire weather concerns.';
191
+ }
192
+ else {
193
+ // Indices not present - determine why
194
+ // Check if it's winter (low fire season everywhere)
195
+ if (month >= 11 || month <= 3) {
196
+ seasonalRisk = 'Low';
197
+ reason = 'Winter/low fire season';
198
+ if (isCalifornia) {
199
+ // California can have winter fires (Santa Ana season)
200
+ explanatoryText = 'Out of peak fire season. Fire danger indices are calculated during elevated risk periods (typically spring-fall, or during Santa Ana wind events).';
201
+ }
202
+ else if (isSouthern) {
203
+ explanatoryText = 'Winter season with minimal fire risk. Fire danger indices are calculated during dry periods with elevated fire potential.';
204
+ }
205
+ else {
206
+ explanatoryText = 'Winter season with minimal fire risk due to cold temperatures, snow cover, or high humidity. Fire danger indices are calculated during dry, warm periods with elevated fire potential.';
207
+ }
208
+ }
209
+ else if (month >= 4 && month <= 10) {
210
+ // Fire season months - but indices still not present
211
+ if (humidity !== null && humidity !== undefined && humidity > 70) {
212
+ seasonalRisk = 'Low';
213
+ reason = 'High humidity/recent precipitation';
214
+ explanatoryText = 'Current conditions (high humidity, recent precipitation) do not support significant fire weather threats. Fire danger indices are calculated when atmospheric conditions favor fire growth.';
215
+ }
216
+ else if (isWestern || isSouthwest || isCalifornia) {
217
+ // Western US during fire season - indices should typically be present
218
+ seasonalRisk = 'Moderate';
219
+ reason = 'Favorable conditions';
220
+ explanatoryText = 'Current conditions do not meet thresholds for fire weather concerns. Fire danger indices are calculated during periods of low humidity, high temperatures, and strong winds.';
221
+ }
222
+ else {
223
+ // Eastern US during summer
224
+ seasonalRisk = 'Low';
225
+ reason = 'Regional/seasonal factors';
226
+ explanatoryText = 'Low regional fire risk. Fire danger indices are primarily calculated for western states and during periods of drought or extreme fire weather conditions.';
227
+ }
228
+ }
229
+ else {
230
+ // Shoulder season (early spring/late fall)
231
+ seasonalRisk = 'Low';
232
+ reason = 'Seasonal conditions';
233
+ explanatoryText = 'Current seasonal conditions do not support significant fire weather threats. Fire danger indices are calculated during periods of elevated fire risk.';
234
+ }
235
+ }
236
+ return {
237
+ hasIndices,
238
+ reason,
239
+ seasonalRisk,
240
+ explanatoryText
241
+ };
242
+ }
243
+ //# sourceMappingURL=fireWeather.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fireWeather.js","sourceRoot":"","sources":["../../src/utils/fireWeather.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,2BAA2B;YACxC,mBAAmB,EAAE,2GAA2G;YAChI,KAAK,EAAE,OAAO;SACf,CAAC;IACJ,CAAC;SAAM,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,gCAAgC;YAC7C,mBAAmB,EAAE,gHAAgH;YACrI,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;SAAM,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,4BAA4B;YACzC,mBAAmB,EAAE,0HAA0H;YAC/I,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,iCAAiC;YAC9C,mBAAmB,EAAE,yIAAyI;YAC9J,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,KAAa;IAK1D,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,8CAA8C;YAC3D,KAAK,EAAE,OAAO;SACf,CAAC;IACJ,CAAC;SAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,mDAAmD;YAChE,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;SAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,+CAA+C;YAC5D,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,oDAAoD;YACjE,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAK9C,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,2CAA2C;YACxD,KAAK,EAAE,OAAO;SACf,CAAC;IACJ,CAAC;SAAM,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,gDAAgD;YAC7D,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;SAAM,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,4CAA4C;YACzD,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,4CAA4C;YACzD,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAA+E;IACxH,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IAC5C,uEAAuE;IACvE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAuB;IACxD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,GAAG,IAAI,EAAE,CAAC;QACpB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC7D,CAAC;SAAM,IAAI,QAAQ,GAAG,IAAI,EAAE,CAAC;QAC3B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACxD,CAAC;SAAM,IAAI,QAAQ,GAAG,IAAI,EAAE,CAAC;QAC3B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAuB;IAC5D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACtE,CAAC;SAAM,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAClE,CAAC;SAAM,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAC9E,CAAC;AACH,CAAC;AAYD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,WAA0B,EAC1B,cAA6B,EAC7B,YAA2B,EAC3B,QAAwB;IAExB,MAAM,UAAU,GAAG,WAAW,KAAK,IAAI,IAAI,cAAc,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,CAAC;IAE5F,6BAA6B;IAC7B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO;IAE1C,8BAA8B;IAC9B,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,wCAAwC;IAC5E,MAAM,WAAW,GAAG,QAAQ,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe;IACtE,MAAM,YAAY,GAAG,QAAQ,GAAG,EAAE,IAAI,QAAQ,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,SAAS,GAAG,CAAC,GAAG,CAAC;IAC5F,MAAM,UAAU,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,kBAAkB;IAEpD,+BAA+B;IAC/B,IAAI,YAAY,GAA6C,KAAK,CAAC;IACnE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,eAAe,GAAG,EAAE,CAAC;IAEzB,IAAI,UAAU,EAAE,CAAC;QACf,2DAA2D;QAC3D,YAAY,GAAG,UAAU,CAAC;QAC1B,MAAM,GAAG,oCAAoC,CAAC;QAC9C,eAAe,GAAG,yEAAyE,CAAC;IAC9F,CAAC;SAAM,CAAC;QACN,sCAAsC;QAEtC,oDAAoD;QACpD,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9B,YAAY,GAAG,KAAK,CAAC;YACrB,MAAM,GAAG,wBAAwB,CAAC;YAElC,IAAI,YAAY,EAAE,CAAC;gBACjB,sDAAsD;gBACtD,eAAe,GAAG,oJAAoJ,CAAC;YACzK,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,eAAe,GAAG,2HAA2H,CAAC;YAChJ,CAAC;iBAAM,CAAC;gBACN,eAAe,GAAG,wLAAwL,CAAC;YAC7M,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;YACrC,qDAAqD;YACrD,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;gBACjE,YAAY,GAAG,KAAK,CAAC;gBACrB,MAAM,GAAG,oCAAoC,CAAC;gBAC9C,eAAe,GAAG,6LAA6L,CAAC;YAClN,CAAC;iBAAM,IAAI,SAAS,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;gBACpD,sEAAsE;gBACtE,YAAY,GAAG,UAAU,CAAC;gBAC1B,MAAM,GAAG,sBAAsB,CAAC;gBAChC,eAAe,GAAG,8KAA8K,CAAC;YACnM,CAAC;iBAAM,CAAC;gBACN,2BAA2B;gBAC3B,YAAY,GAAG,KAAK,CAAC;gBACrB,MAAM,GAAG,2BAA2B,CAAC;gBACrC,eAAe,GAAG,2JAA2J,CAAC;YAChL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,2CAA2C;YAC3C,YAAY,GAAG,KAAK,CAAC;YACrB,MAAM,GAAG,qBAAqB,CAAC;YAC/B,eAAe,GAAG,uJAAuJ,CAAC;QAC5K,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU;QACV,MAAM;QACN,YAAY;QACZ,eAAe;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Geographic utility functions for location detection and classification
3
+ */
4
+ /**
5
+ * Bounding box for a geographic region
6
+ */
7
+ interface BoundingBox {
8
+ minLat: number;
9
+ maxLat: number;
10
+ minLon: number;
11
+ maxLon: number;
12
+ }
13
+ /**
14
+ * Geographic region with bounding box and metadata
15
+ */
16
+ interface GeographicRegion {
17
+ name: string;
18
+ bbox: BoundingBox;
19
+ description?: string;
20
+ }
21
+ /**
22
+ * Check if coordinates are within the Great Lakes region
23
+ * @param latitude Latitude coordinate
24
+ * @param longitude Longitude coordinate
25
+ * @returns The Great Lake name if in region, null otherwise
26
+ */
27
+ export declare function getGreatLakeRegion(latitude: number, longitude: number): string | null;
28
+ /**
29
+ * Check if coordinates are within a major US coastal bay or large inland lake
30
+ * @param latitude Latitude coordinate
31
+ * @param longitude Longitude coordinate
32
+ * @returns The bay/lake name if in region, null otherwise
33
+ */
34
+ export declare function getMajorCoastalBayRegion(latitude: number, longitude: number): string | null;
35
+ /**
36
+ * Check if coordinates should use NOAA marine data (Great Lakes or major coastal bays)
37
+ * @param latitude Latitude coordinate
38
+ * @param longitude Longitude coordinate
39
+ * @returns Object with detection results
40
+ */
41
+ export declare function shouldUseNOAAMarine(latitude: number, longitude: number): {
42
+ useNOAA: boolean;
43
+ region: string | null;
44
+ source: 'great-lakes' | 'coastal-bay' | 'ocean';
45
+ };
46
+ /**
47
+ * Get a human-readable description of the marine region
48
+ * @param latitude Latitude coordinate
49
+ * @param longitude Longitude coordinate
50
+ * @returns Description string
51
+ */
52
+ export declare function getMarineRegionDescription(latitude: number, longitude: number): string;
53
+ /**
54
+ * Get all Great Lakes regions (for testing and documentation)
55
+ */
56
+ export declare function getGreatLakesRegions(): GeographicRegion[];
57
+ /**
58
+ * Get all major coastal bay regions (for testing and documentation)
59
+ */
60
+ export declare function getMajorCoastalBayRegions(): GeographicRegion[];
61
+ /**
62
+ * Approximate country/region detection from coordinates
63
+ * PRIVACY: Intentionally vague - only major regions for privacy
64
+ * ACCURACY: This is a ROUGH approximation with known inaccuracies:
65
+ * - Mexico, Caribbean, Central America -> OTHER
66
+ * - Some border regions may be misclassified
67
+ * - Alaska and Hawaii have special handling
68
+ *
69
+ * This is called OUTSIDE the analytics module to ensure coordinates
70
+ * never enter the analytics boundary. Trade-off: Privacy (no reverse geocoding)
71
+ * vs Accuracy (bounding boxes)
72
+ *
73
+ * @param lat Latitude (-90 to 90)
74
+ * @param lon Longitude (-180 to 180)
75
+ * @returns ISO 3166-1 alpha-2 region code (US, CA, EU, AP, SA, AF, OC, OTHER)
76
+ */
77
+ export declare function getCountryFromCoordinates(lat: number, lon: number): string;
78
+ export {};
79
+ //# sourceMappingURL=geography.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geography.d.ts","sourceRoot":"","sources":["../../src/utils/geography.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgID;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOrF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO3F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IACxE,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;CACjD,CA2BA;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQtF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAEzD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,gBAAgB,EAAE,CAE9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAgD1E"}