Provides types for the US National Weather Service's forecast API and a helpful URI builder.
Relevant websites:
And, the endpoint:
Motivation
TypeScript makes building API requests more straightforward.
Installation
pnpm install @paxperscientiam/national-weather-service-api.ts
or ...
npm install @paxperscientiam/national-weather-service-api.ts
or ...
yarn add @paxperscientiam/national-weather-service-api.ts
Importing
import {
NWS
} from "@paxperscientiam/national-weather-service-api.ts"
const {
NWS
} = require("@paxperscientiam/national-weather-service-api.ts")
Under the hood
For example, say you want to make a request to the "Alerts" endpoint of the NWS forecast API (I.E. https://api.weather.gov/alerts). This endpoint accepts URL queries.
Here's the interface for those parameters:
declare namespace NWSDataAPI {
namespace Alerts {
export interface IQuery {
active?: Parameters.IActive;
start?: Parameters.IStart;
end?: Parameters.IEnd;
status?: Parameters.IStatus;
message_type?: Parameters.IMessageType;
event?: Parameters.IEvent;
code?: Parameters.ICode;
region_type?: Parameters.IRegionType;
point?: Parameters.IPoint;
region?: Parameters.IRegion;
area?: Parameters.IArea;
zone?: Parameters.IZone;
urgency?: Parameters.IUrgency;
severity?: Parameters.ISeverity;
certainty?: Parameters.ICertainty;
limit?: Parameters.ILimit;
cursor?: Parameters.ICursor;
}
namespace Parameters {
export type IActive = boolean;
export type IArea = ("AL" | "AK" | "AS" | "AR" | "AZ" | "CA" | "CO" | "CT" | "DE" | "DC" | "FL" | "GA" | "GU" | "HI" | "ID" | "IL" | "IN" | "IA" | "KS" | "KY" | "LA" | "ME" | "MD" | "MA" | "MI" | "MN" | "MS" | "MO" | "MT" | "NE" | "NV" | "NH" | "NJ" | "NM" | "NY" | "NC" | "ND" | "OH" | "OK" | "OR" | "PA" | "PR" | "RI" | "SC" | "SD" | "TN" | "TX" | "UT" | "VT" | "VI" | "VA" | "WA" | "WV" | "WI" | "WY" | "PZ" | "PK" | "PH" | "PS" | "PM" | "AN" | "AM" | "GM" | "LS" | "LM" | "LH" | "LC" | "LE" | "LO")[];
export type ICertainty = ("unknown" | "unlikely" | "possible" | "likely" | "observed")[];
export type ICode = string [];
export type ICursor = string;
export type IEnd = string;
export type IEvent = string [];
export type ILimit = number;
export type IMessageType = ("alert" | "update" | "cancel")[];
export type IPoint = string;
export type IRegion = ("AL" | "AT" | "GL" | "GM" | "PA" | "PI")[];
export type IRegionType = "land" | "marine";
export type ISeverity = ("unknown" | "minor" | "moderate" | "severe" | "extreme")[];
export type IStart = string;
export type IStatus = ("actual" | "exercise" | "system" | "test" | "draft")[];
export type IUrgency = ("unknown" | "past" | "future" | "expected" | "immediate")[];
export type IZone = string [];
}
namespace Responses {
export type IDefault = Components.Responses.IError;
}
}
The exposed class is NWS
. The method corresponding to the https://api.weather.gov/alerts endpoint looks like this:
export class NWS {
private domain: string = "https://api.weather.gov"
private query: any
private pathString: string = ""
constructor() {
return this
}
AlertsService(query?: NWSDataAPI.Alerts.IQuery) {
if (query) {
this.query = query
}
this.pathString = `/alerts`
return this
}
Example
With all this said, here's how you might use this:
import { NWS } from "@paxperscientiam/national-weather-service-api.ts"
const nws = new NWS()
const alerts = nws.AlertsService({
active: true,
})
const url = alerts.buildURI()
Humans