@jablum/weather-mcp 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1319 -0
- package/dist/analytics/anonymizer.d.ts +37 -0
- package/dist/analytics/anonymizer.d.ts.map +1 -0
- package/dist/analytics/anonymizer.js +112 -0
- package/dist/analytics/anonymizer.js.map +1 -0
- package/dist/analytics/collector.d.ts +72 -0
- package/dist/analytics/collector.d.ts.map +1 -0
- package/dist/analytics/collector.js +282 -0
- package/dist/analytics/collector.js.map +1 -0
- package/dist/analytics/config.d.ts +15 -0
- package/dist/analytics/config.d.ts.map +1 -0
- package/dist/analytics/config.js +172 -0
- package/dist/analytics/config.js.map +1 -0
- package/dist/analytics/index.d.ts +8 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +7 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/middleware.d.ts +33 -0
- package/dist/analytics/middleware.d.ts.map +1 -0
- package/dist/analytics/middleware.js +99 -0
- package/dist/analytics/middleware.js.map +1 -0
- package/dist/analytics/transport.d.ts +11 -0
- package/dist/analytics/transport.d.ts.map +1 -0
- package/dist/analytics/transport.js +92 -0
- package/dist/analytics/transport.js.map +1 -0
- package/dist/analytics/types.d.ts +74 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +6 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/config/api.d.ts +30 -0
- package/dist/config/api.d.ts.map +1 -0
- package/dist/config/api.js +32 -0
- package/dist/config/api.js.map +1 -0
- package/dist/config/cache.d.ts +31 -0
- package/dist/config/cache.d.ts.map +1 -0
- package/dist/config/cache.js +108 -0
- package/dist/config/cache.js.map +1 -0
- package/dist/config/displayThresholds.d.ts +83 -0
- package/dist/config/displayThresholds.d.ts.map +1 -0
- package/dist/config/displayThresholds.js +83 -0
- package/dist/config/displayThresholds.js.map +1 -0
- package/dist/config/tools.d.ts +44 -0
- package/dist/config/tools.d.ts.map +1 -0
- package/dist/config/tools.js +269 -0
- package/dist/config/tools.js.map +1 -0
- package/dist/errors/ApiError.d.ts +62 -0
- package/dist/errors/ApiError.d.ts.map +1 -0
- package/dist/errors/ApiError.js +171 -0
- package/dist/errors/ApiError.js.map +1 -0
- package/dist/handlers/airQualityHandler.d.ts +11 -0
- package/dist/handlers/airQualityHandler.d.ts.map +1 -0
- package/dist/handlers/airQualityHandler.js +154 -0
- package/dist/handlers/airQualityHandler.js.map +1 -0
- package/dist/handlers/alertsHandler.d.ts +11 -0
- package/dist/handlers/alertsHandler.d.ts.map +1 -0
- package/dist/handlers/alertsHandler.js +98 -0
- package/dist/handlers/alertsHandler.js.map +1 -0
- package/dist/handlers/currentConditionsHandler.d.ts +13 -0
- package/dist/handlers/currentConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/currentConditionsHandler.js +296 -0
- package/dist/handlers/currentConditionsHandler.js.map +1 -0
- package/dist/handlers/forecastHandler.d.ts +16 -0
- package/dist/handlers/forecastHandler.d.ts.map +1 -0
- package/dist/handlers/forecastHandler.js +454 -0
- package/dist/handlers/forecastHandler.js.map +1 -0
- package/dist/handlers/historicalWeatherHandler.d.ts +12 -0
- package/dist/handlers/historicalWeatherHandler.d.ts.map +1 -0
- package/dist/handlers/historicalWeatherHandler.js +188 -0
- package/dist/handlers/historicalWeatherHandler.js.map +1 -0
- package/dist/handlers/lightningHandler.d.ts +14 -0
- package/dist/handlers/lightningHandler.d.ts.map +1 -0
- package/dist/handlers/lightningHandler.js +258 -0
- package/dist/handlers/lightningHandler.js.map +1 -0
- package/dist/handlers/locationHandler.d.ts +12 -0
- package/dist/handlers/locationHandler.d.ts.map +1 -0
- package/dist/handlers/locationHandler.js +149 -0
- package/dist/handlers/locationHandler.js.map +1 -0
- package/dist/handlers/marineConditionsHandler.d.ts +13 -0
- package/dist/handlers/marineConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/marineConditionsHandler.js +270 -0
- package/dist/handlers/marineConditionsHandler.js.map +1 -0
- package/dist/handlers/riverConditionsHandler.d.ts +11 -0
- package/dist/handlers/riverConditionsHandler.d.ts.map +1 -0
- package/dist/handlers/riverConditionsHandler.js +176 -0
- package/dist/handlers/riverConditionsHandler.js.map +1 -0
- package/dist/handlers/savedLocationsHandler.d.ts +50 -0
- package/dist/handlers/savedLocationsHandler.d.ts.map +1 -0
- package/dist/handlers/savedLocationsHandler.js +397 -0
- package/dist/handlers/savedLocationsHandler.js.map +1 -0
- package/dist/handlers/statusHandler.d.ts +12 -0
- package/dist/handlers/statusHandler.d.ts.map +1 -0
- package/dist/handlers/statusHandler.js +115 -0
- package/dist/handlers/statusHandler.js.map +1 -0
- package/dist/handlers/weatherImageryHandler.d.ts +14 -0
- package/dist/handlers/weatherImageryHandler.d.ts.map +1 -0
- package/dist/handlers/weatherImageryHandler.js +143 -0
- package/dist/handlers/weatherImageryHandler.js.map +1 -0
- package/dist/handlers/wildfireHandler.d.ts +11 -0
- package/dist/handlers/wildfireHandler.d.ts.map +1 -0
- package/dist/handlers/wildfireHandler.js +186 -0
- package/dist/handlers/wildfireHandler.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +735 -0
- package/dist/index.js.map +1 -0
- package/dist/services/blitzortung.d.ts +67 -0
- package/dist/services/blitzortung.d.ts.map +1 -0
- package/dist/services/blitzortung.js +475 -0
- package/dist/services/blitzortung.js.map +1 -0
- package/dist/services/geocoding.d.ts +57 -0
- package/dist/services/geocoding.d.ts.map +1 -0
- package/dist/services/geocoding.js +393 -0
- package/dist/services/geocoding.js.map +1 -0
- package/dist/services/locationStore.d.ts +62 -0
- package/dist/services/locationStore.d.ts.map +1 -0
- package/dist/services/locationStore.js +201 -0
- package/dist/services/locationStore.js.map +1 -0
- package/dist/services/ncei.d.ts +61 -0
- package/dist/services/ncei.d.ts.map +1 -0
- package/dist/services/ncei.js +126 -0
- package/dist/services/ncei.js.map +1 -0
- package/dist/services/nifc.d.ts +44 -0
- package/dist/services/nifc.d.ts.map +1 -0
- package/dist/services/nifc.js +159 -0
- package/dist/services/nifc.js.map +1 -0
- package/dist/services/noaa.d.ts +161 -0
- package/dist/services/noaa.d.ts.map +1 -0
- package/dist/services/noaa.js +681 -0
- package/dist/services/noaa.js.map +1 -0
- package/dist/services/nominatim.d.ts +62 -0
- package/dist/services/nominatim.d.ts.map +1 -0
- package/dist/services/nominatim.js +254 -0
- package/dist/services/nominatim.js.map +1 -0
- package/dist/services/openmeteo.d.ts +189 -0
- package/dist/services/openmeteo.d.ts.map +1 -0
- package/dist/services/openmeteo.js +936 -0
- package/dist/services/openmeteo.js.map +1 -0
- package/dist/services/rainviewer.d.ts +37 -0
- package/dist/services/rainviewer.d.ts.map +1 -0
- package/dist/services/rainviewer.js +115 -0
- package/dist/services/rainviewer.js.map +1 -0
- package/dist/types/imagery.d.ts +82 -0
- package/dist/types/imagery.d.ts.map +1 -0
- package/dist/types/imagery.js +6 -0
- package/dist/types/imagery.js.map +1 -0
- package/dist/types/lightning.d.ts +89 -0
- package/dist/types/lightning.d.ts.map +1 -0
- package/dist/types/lightning.js +6 -0
- package/dist/types/lightning.js.map +1 -0
- package/dist/types/noaa.d.ts +535 -0
- package/dist/types/noaa.d.ts.map +1 -0
- package/dist/types/noaa.js +5 -0
- package/dist/types/noaa.js.map +1 -0
- package/dist/types/nominatim.d.ts +72 -0
- package/dist/types/nominatim.d.ts.map +1 -0
- package/dist/types/nominatim.js +6 -0
- package/dist/types/nominatim.js.map +1 -0
- package/dist/types/openmeteo.d.ts +583 -0
- package/dist/types/openmeteo.d.ts.map +1 -0
- package/dist/types/openmeteo.js +6 -0
- package/dist/types/openmeteo.js.map +1 -0
- package/dist/types/savedLocations.d.ts +58 -0
- package/dist/types/savedLocations.d.ts.map +1 -0
- package/dist/types/savedLocations.js +5 -0
- package/dist/types/savedLocations.js.map +1 -0
- package/dist/types/wildfire.d.ts +83 -0
- package/dist/types/wildfire.d.ts.map +1 -0
- package/dist/types/wildfire.js +5 -0
- package/dist/types/wildfire.js.map +1 -0
- package/dist/utils/airQuality.d.ts +54 -0
- package/dist/utils/airQuality.d.ts.map +1 -0
- package/dist/utils/airQuality.js +251 -0
- package/dist/utils/airQuality.js.map +1 -0
- package/dist/utils/cache.d.ts +69 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +164 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/distance.d.ts +25 -0
- package/dist/utils/distance.d.ts.map +1 -0
- package/dist/utils/distance.js +40 -0
- package/dist/utils/distance.js.map +1 -0
- package/dist/utils/fireWeather.d.ts +76 -0
- package/dist/utils/fireWeather.d.ts.map +1 -0
- package/dist/utils/fireWeather.js +243 -0
- package/dist/utils/fireWeather.js.map +1 -0
- package/dist/utils/geography.d.ts +79 -0
- package/dist/utils/geography.d.ts.map +1 -0
- package/dist/utils/geography.js +266 -0
- package/dist/utils/geography.js.map +1 -0
- package/dist/utils/geohash.d.ts +62 -0
- package/dist/utils/geohash.d.ts.map +1 -0
- package/dist/utils/geohash.js +146 -0
- package/dist/utils/geohash.js.map +1 -0
- package/dist/utils/locationResolver.d.ts +34 -0
- package/dist/utils/locationResolver.d.ts.map +1 -0
- package/dist/utils/locationResolver.js +120 -0
- package/dist/utils/locationResolver.js.map +1 -0
- package/dist/utils/logger.d.ts +75 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +153 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/marine.d.ts +59 -0
- package/dist/utils/marine.d.ts.map +1 -0
- package/dist/utils/marine.js +215 -0
- package/dist/utils/marine.js.map +1 -0
- package/dist/utils/normals.d.ts +86 -0
- package/dist/utils/normals.d.ts.map +1 -0
- package/dist/utils/normals.js +223 -0
- package/dist/utils/normals.js.map +1 -0
- package/dist/utils/snow.d.ts +45 -0
- package/dist/utils/snow.d.ts.map +1 -0
- package/dist/utils/snow.js +144 -0
- package/dist/utils/snow.js.map +1 -0
- package/dist/utils/temperatureConversion.d.ts +12 -0
- package/dist/utils/temperatureConversion.d.ts.map +1 -0
- package/dist/utils/temperatureConversion.js +17 -0
- package/dist/utils/temperatureConversion.js.map +1 -0
- package/dist/utils/timezone.d.ts +56 -0
- package/dist/utils/timezone.d.ts.map +1 -0
- package/dist/utils/timezone.js +167 -0
- package/dist/utils/timezone.js.map +1 -0
- package/dist/utils/units.d.ts +69 -0
- package/dist/utils/units.d.ts.map +1 -0
- package/dist/utils/units.js +158 -0
- package/dist/utils/units.js.map +1 -0
- package/dist/utils/validation.d.ts +89 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +177 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/utils/version.d.ts +15 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +24 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,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":"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"}
|
|
@@ -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"}
|