# NWS Wrapper

This is a Node.js package that provides a simple API for accessing data from the National Weather Service (NWS) API.
[![npm version](https://img.shields.io/badge/nws--wrapper-v1.0.0-green)](https://npm.im/lua-print)
[![license](https://img.shields.io/badge/license-ISC-green)](https://npm.im/lua-print)
## Installation

To install this package, run the following command:
`
npm install nws-wrapper
`

## Usage

### `getPointData(lat, lon)`

This function retrieves the point data for a given latitude and longitude. It returns a Promise that resolves to an object containing the following properties:

- `id`: the URL of the API endpoint for this point
- `type`: the type of the API endpoint for this point
- `geometry`: an object containing the latitude and longitude of this point
- `properties`: an object containing various properties of this point, including the forecast URL, the forecast grid URL, and the observation URL

Default response:

```json
{
  "id": "https://api.weather.gov/points/38.7845,-77.0888",
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [
      -77.0888,
      38.7845
    ]
  },
  "properties": {
    "cwa": "LWX",
    "forecastOffice": "https://api.weather.gov/offices/LWX",
    "gridX": 57,
    "gridY": 74,
    "forecast": "https://api.weather.gov/gridpoints/LWX/57,74/forecast",
    "forecastHourly": "https://api.weather.gov/gridpoints/LWX/57,74/forecast/hourly",
    "forecastGridData": "https://api.weather.gov/gridpoints/LWX/57,74",
    "observationStations": "https://api.weather.gov/gridpoints/LWX/57,74/stations",
    "relativeLocation": {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          -77.091138,
          38.790957
        ]
      },
      "properties": {
        "city": "Merrifield",
        "state": "VA",
        "distance": {
          "value": 3032.8744011284,
          "unitCode": "unit:m"
        },
        "bearing": {
          "value": 82,
          "unitCode": "unit:degrees_true"
        }
      }
    },
    "forecastZone": "https://api.weather.gov/zones/forecast/VAZ052",
    "county": "https://api.weather.gov/zones/county/VAC059",
    "fireWeatherZone": "https://api.weather.gov/zones/fire/VAZ052",
    "timeZone": "America/New_York",
    "radarStation": "KLWX"
  }
}
```
Example usage:

```js
const { getPointData } = require('nws-wrapper');

getPointData(40.7128, -74.0060)
  .then(pointData => {
    console.log(pointData);
  })
  .catch(error => {
    console.error(error);
  });
```
### `getGrid(lat, lon)`
This function retrieves the grid coordinates for a given latitude and longitude. It returns a Promise that resolves to a string containing the grid coordinates in the format "x,y".

Default response:
```js
const { getGrid } = require('nws-wrapper');

getGrid(40.7128, -74.0060)
  .then(grid => {
    console.log(grid);
  })
  .catch(error => {
    console.error(error);
  });
```
### `checkWeatherWarnings(latitude, longitude)`
This function checks for active weather warnings for a given latitude and longitude. It returns a Promise that resolves to an array of objects containing the following properties:

descr: the description of the weather warning
hl: the headline of the weather warning
If there are no active weather warnings, it returns a string indicating that there are no active weather warnings.

Default response:
`
"No active weather warnings found for this location."
`
Example usage:


```js
const { checkWeatherWarnings } = require('nws-wrapper');

checkWeatherWarnings(40.7128, -74.0060)
  .then(warnings => {
    console.log(warnings);
  })
  .catch(error => {
    console.error(error);
  });
  ```
### `checkKeyword(headline)`
This function checks if a given headline contains any of the keywords used for weather warnings. It returns a string containing the keywords found, separated by commas. If no keywords are found, it returns the string "NONE".

Default response:

`
"NONE"
`
Example usage:

```js
const { checkKeyword } = require('nws-wrapper');

const headline = "Winter Storm Warning in effect";
const keywords = checkKeyword(headline);

console.log(keywords);
```
### `getRadarSingle(office)`
This function retrieves the URL of a single-frame radar image for a given NWS office. It returns a string containing the URL.

Default response:

```js
"undefined"
```
Example usage:

```js
const { getRadarSingle, getRadarStation } = require('nws-wrapper');

const radarStation = await getRadarStation(40.7128, -74.0060);
const radarUrl = getRadarSingle(radarStation);
console.log(radarUrl);
```

### `getRadarLoop(office)`
This function retrieves the URL of a animated radar image for a given NWS office. It returns a string containing the URL.

Default response:

```js
"undefined"
```
Example usage:

```js
const { getRadarLoop, getRadarStation } = require('nws-wrapper');

const radarStation = await getRadarStation(40.7128, -74.0060);
const radarUrl = getRadarLoop(radarStation);
console.log(radarUrl);
```

### `getNWSOffice(lat, lon)`
This function retrieves the NWS Office for a given latitude and longitude. It returns a Promise that resolves to a string containing the NWS office in the format “NWS” (NWS being the office ID).

Default response:

```js
"undefined"
```
Example usage:

```js
const { getNWSOffice } = require('nws-wrapper');

const nwsOffice = await getNWSOffice(40.7128, -74.0060);
console.log(nwsOffice);
```

### `getRadarStation(lat, lon)`
This function retrieves the radar station for a given latitude and longitude.. It returns a string containing the radar station ID.

Default response:

```js
"undefined"
```
Example usage:

```js
const { getRadarStation } = require('nws-wrapper');

const radarStation = await getRadarStation(40.7128, -74.0060);
console.log(radarStation);
```

### Thanks for reading!