← Public packages
@kentcdodds/environment
Weather, air quality, sun/moon, and outdoor environment snapshots.
src/aqi.ts
69 lines · 1.7 KB · TypeScriptimport airQualityLookup from './air-quality.ts'
/** Default outdoor air-quality lookup location for Kent's home. */
export const HOME_AIR_QUALITY_LOCATION = 'Highland, UT'
export type AirQualityLookupParams = {
location?: string
latitude?: number
longitude?: number
date?: string
hour?: number | null
hourlyLimit?: number
}
export type AirQualitySummary = {
location: string
date: string
usAqi: number | null
category: string
europeanAqi: number | null
pm25: number | null
pm10: number | null
peakHour: string | null
summary: string
}
/** Full Open-Meteo air-quality lookup for a location or coordinates. */
export async function getAirQuality(params: AirQualityLookupParams = {}) {
return airQualityLookup(params)
}
/** Air-quality lookup for Kent's home location in Highland, UT. */
export async function getHomeAirQuality(
params: Omit<
AirQualityLookupParams,
'location' | 'latitude' | 'longitude'
> = {},
) {
return airQualityLookup({
location: HOME_AIR_QUALITY_LOCATION,
...params,
})
}
/** Compact AQI summary for briefings and automations. */
export async function summarizeAirQuality(
params: AirQualityLookupParams = {},
) {
const result = await airQualityLookup({
location: params.location ?? HOME_AIR_QUALITY_LOCATION,
latitude: params.latitude,
longitude: params.longitude,
date: params.date,
hour: params.hour,
hourlyLimit: params.hourlyLimit,
})
return {
location: result.location.displayName,
date: result.date,
usAqi: result.daily.maxUsAqi,
category: result.daily.maxUsCategory,
europeanAqi: result.daily.maxEuropeanAqi,
pm25: result.daily.avgPm25,
pm10: result.daily.avgPm10,
peakHour: result.daily.peakHour?.time ?? null,
summary: result.summary,
} satisfies AirQualitySummary
}