ws-dottie
Version:
Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration
1,358 lines (1,324 loc) • 162 kB
TypeScript
import { z } from 'zod';
import * as _tanstack_query_core from '@tanstack/query-core';
import * as _tanstack_react_query from '@tanstack/react-query';
/**
* @fileoverview WSDOT Date Validation for TanStack Query
*
* This module provides Zod schema validation for WSDOT date formats,
* including the specialized "/Date(timestamp)/" format used by WSDOT/WSF
* APIs and standard ISO-8601 dates. It handles both validation and
* transformation to JavaScript Date objects.
*/
/**
* WSDOT date validation and transformation schema
*
* This Zod schema handles both WSDOT's "/Date(timestamp)/" format and
* standard ISO-8601 dates. It validates the input format and transforms
* it to a JavaScript Date object for consistent handling.
*/
declare const zWsdotDate: () => z.ZodPipe<z.ZodString, z.ZodTransform<Date, string>>;
/**
* @fileoverview Simplified Shared Types for WS-Dottie
*
* Consolidated type definitions without over-engineering.
*/
/**
* Cache strategies for different data update frequencies
*
* These strategies define how frequently data should be refreshed based on
* the nature of the transportation data. Each strategy includes appropriate
* stale time, garbage collection time, and refetch intervals.
*/
type CacheStrategy = "REALTIME" | "FREQUENT" | "MODERATE" | "STATIC";
/**
* Logging verbosity levels for WS-Dottie
*
* Controls the amount of logging output during API operations.
* - none: No logging output
* - info: Basic information about API calls and results
* - debug: Detailed logging including performance metrics
*/
type LoggingMode = "none" | "info" | "debug";
/**
* Function type for fetching data from URLs
*
* This type defines the interface for fetch strategies that can retrieve
* data from URLs and return it as a string. Used by both JSONP and native
* fetch implementations.
*/
type FetchStrategy = (url: string) => Promise<string>;
/**
* Cache strategy configurations for different data update frequencies
*
* These strategies define how frequently data should be refreshed based on
* the nature of the transportation data. Each strategy includes appropriate
* stale time, garbage collection time, refetch intervals, and retry settings.
*
* The four core strategies cover all transportation API use cases:
* - REALTIME: For frequently updating data (5-second updates)
* - FREQUENT: For data that updates every few minutes (5-minute updates)
* - MODERATE: For data that updates hourly
* - STATIC: For rarely changing data (daily updates)
*/
declare const cacheStrategies: {
readonly REALTIME: {
readonly staleTime: number;
readonly gcTime: number;
readonly refetchInterval: number;
readonly retry: 2;
readonly retryDelay: number;
};
readonly FREQUENT: {
readonly staleTime: number;
readonly gcTime: number;
readonly refetchInterval: number;
readonly retry: 3;
readonly retryDelay: number;
};
readonly MODERATE: {
readonly staleTime: number;
readonly gcTime: number;
readonly refetchInterval: number;
readonly retry: 3;
readonly retryDelay: number;
};
readonly STATIC: {
readonly staleTime: number;
readonly gcTime: number;
readonly refetchInterval: number;
readonly retry: 2;
readonly retryDelay: number;
};
};
/**
* Creates TanStack Query options with the specified cache strategy
*
* This function creates a query options factory that can be used with
* TanStack Query hooks. It combines the API function, query key, and
* cache strategy to create properly configured query options.
*
* @template TInput - The input parameters type
* @template TOutput - The output response type
* @param apiFunction - The API function to call for data fetching
* @param queryKey - Base query key array (params will be appended)
* @param cacheStrategy - Cache strategy to use for this query
* @returns Function that accepts parameters and returns query options
* @example
* ```typescript
* const useScheduleQuery = createQueryOptions(
* getSchedule,
* ["wsf-schedule", "get-schedule"],
* "FREQUENT"
* );
* const queryOptions = useScheduleQuery({ terminalId: 1 });
* ```
*/
declare function createQueryOptions<TInput, TOutput>(apiFunction: (params: TInput) => Promise<TOutput>, queryKey: string[], cacheStrategy: CacheStrategy): (params: TInput) => _tanstack_query_core.OmitKeyof<_tanstack_react_query.UseQueryOptions<TOutput, Error, TOutput, (string | TInput)[]>, "queryFn"> & {
queryFn?: _tanstack_query_core.QueryFunction<TOutput, (string | TInput)[], never> | undefined;
} & {
queryKey: (string | TInput)[] & {
[dataTagSymbol]: TOutput;
[dataTagErrorSymbol]: Error;
};
};
/**
* @fileoverview URL Builder for WS-Dottie API Requests
*
* This module provides comprehensive URL building functionality for WS-Dottie API requests,
* including parameter encoding, template parameter replacement, API key injection,
* and proper URL construction for both WSDOT and WSF APIs.
*
* Key features:
* - Template parameter replacement (e.g., {terminalId} -> actual value)
* - Automatic date conversion to .NET format for WSDOT APIs
* - API key injection with correct parameter names per service
* - URL cleanup to remove empty parameters
* - Support for both WSDOT (/traffic/) and WSF (/ferries/) endpoints
*/
/**
* Builds a complete API URL with template parameter replacement
*
* This function constructs a complete URL for API requests by combining
* the base domain, endpoint path, and replacing template parameters in the URL.
* It handles template parameter replacement (e.g., {terminalId} -> actual value),
* automatic date conversion to string format, and URL cleanup.
*
* @param endpoint - The API endpoint path with optional template parameters (e.g., "/ferries/schedule/{terminalId}")
* @param params - Optional parameters for template replacement and query string construction
* @returns Complete URL object ready for further processing (API key injection)
* @example
* ```typescript
* buildUrlWithParams("/ferries/api/schedule/rest/schedule/{tripDate}/{routeId}", {
* tripDate: new Date("2024-01-01")
* routeId: 1,
* });
* // Returns: URL object with processed endpoint and parameters
* ```
*/
declare const buildUrlWithParams: (endpoint: string, params?: Record<string, unknown>) => string;
/**
* Injects the appropriate API key into a URL based on the service type
*
* This function determines whether the URL is for WSDOT or WSF API and injects
* the correct API key parameter name. WSDOT uses "accesscode" while WSF uses
* "apiaccesscode" as the parameter name.
*
* @param url - The URL object to inject the API key into
* @returns The same URL object with the API key parameter added
* @example
* ```typescript
* const url = new URL("/traffic/api/ferries/schedule", "http://www.wsdot.wa.gov");
* const urlWithKey = buildUrlWithApiKey(url);
* // URL now includes: ?accesscode=YOUR_API_KEY
* ```
*/
declare const buildUrlWithApiKey: (url: string) => string;
/**
* @fileoverview Environment Detection Utilities for WS-Dottie
*
* This module provides environment detection capabilities to determine
* the runtime environment (web browser, server, or test) and configure
* appropriate fetch strategies. It includes detection for test environments,
* web browsers, and JSONP forcing for testing purposes.
*/
/**
* Supported environment types for WS-Dottie
*
* Defines the three main runtime environments that WS-Dottie can operate in,
* each with different capabilities and constraints.
*/
type EnvironmentType = "web" | "server" | "test";
/**
* Detects if the code is running in a test environment
*
* This function checks for various indicators that suggest the code is
* running in a test environment, including NODE_ENV, VITEST, and Jest
* worker indicators.
*
* @returns True if running in a test environment, false otherwise
*/
declare const isTestEnvironment: () => boolean;
/**
* Detects if the code is running in a web browser environment
*
* This function checks for the presence of browser-specific globals
* (window and document) to determine if the code is running in a browser.
*
* @returns True if running in a web browser, false otherwise
*/
declare const isWebEnvironment: () => boolean;
/**
* Checks if JSONP should be forced for testing purposes
*
* This function checks the FORCE_JSONP environment variable to determine
* if JSONP should be used even in non-browser environments for testing.
*
* @returns True if JSONP should be forced, false otherwise
*/
declare const shouldForceJsonp: () => boolean;
/**
* Gets the current environment type
*
* This function determines the current runtime environment by checking
* test environment first, then web environment, defaulting to server.
*
* @returns The current environment type
*/
declare const getEnvironmentType: () => EnvironmentType;
/**
* @fileoverview Simple Endpoint System
*
* A simple, unified endpoint system that eliminates complexity and duplication.
*
* This module provides the core endpoint definition system for the WS-Dottie API
* library. It includes type definitions, factory functions, and discovery
* utilities that work together to create a consistent endpoint management
* system across all API modules.
*/
/**
* Simple endpoint definition interface for client files
*
* This interface defines the structure that client modules use to describe
* their API endpoints. It includes all the necessary information for
* validation, caching, and URL generation.
*/
interface EndpointDefinition<I, O> {
/** Unique identifier in format "api/function" */
id: string;
/** HTTP endpoint URL template */
endpoint: string;
/** Zod schema for input validation */
inputSchema: z.ZodSchema<I>;
/** Zod schema for output validation */
outputSchema: z.ZodSchema<O>;
/** Optional sample parameters for testing */
sampleParams?: Partial<I> | (() => Promise<Partial<I>>);
/** Cache strategy */
cacheStrategy: CacheStrategy;
}
/**
* Runtime endpoint interface with computed properties
*
* This interface extends EndpointDefinition with computed properties that are
* automatically generated by the defineEndpoint factory function. These
* properties include API group name, function name, and complete URL template.
*/
interface Endpoint<I, O> extends EndpointDefinition<I, O> {
/** API group name (computed from id) */
api: string;
/** Function name (computed from id) */
functionName: string;
/** Complete URL template with domain */
urlTemplate: string;
}
/**
* Type alias for an array of endpoints with unknown input/output types
*
* This type is used throughout the system when the specific input/output
* types are not known or needed, such as in discovery and testing functions.
*/
type Endpoints = Endpoint<unknown, unknown>[];
/**
* Type alias for endpoints grouped by API name
*
* This type represents the nested structure returned by discoverEndpoints(),
* where endpoints are organized by their API group name for easier
* organization and processing.
*/
type EndpointsByApi = Record<string, Endpoints>;
/**
* Creates a complete endpoint configuration object with computed properties
*
* This factory function takes a basic endpoint configuration and enriches it
* with computed properties like API group name, function name, and complete
* URL template. It automatically extracts the API and function names from
* the endpoint ID and combines the domain with the endpoint path.
*
* @template I - The input parameters type for the endpoint
* @template O - The output response type for the endpoint
* @param config - Basic endpoint configuration object
* @param config.id - Unique identifier in format "api/function"
* @param config.endpoint - HTTP endpoint URL template relative to base domain
* @param config.inputSchema - Zod schema for input parameter validation
* @param config.outputSchema - Zod schema for output response validation
* @param config.sampleParams - Optional sample parameters for testing
* @param config.cacheStrategy - Cache strategy for TanStack Query integration
* @returns Complete endpoint object with all computed properties
*/
declare function defineEndpoint<I, O>(config: {
id: string;
endpoint: string;
inputSchema: z.ZodSchema<I>;
outputSchema: z.ZodSchema<O>;
sampleParams?: Partial<I> | (() => Promise<Partial<I>>);
cacheStrategy: CacheStrategy;
}): Endpoint<I, O>;
declare const discoverEndpoints: () => EndpointsByApi;
/**
* Gets all endpoints as a flat array
*
* This is a convenience function that flattens the nested structure returned
* by discoverEndpoints() into a single array. Useful when you need to iterate
* over all endpoints regardless of their API grouping.
*
* @returns Array of all endpoints from all APIs
*/
declare const getAllEndpoints: () => Endpoints;
/**
* @fileoverview Core Fetching Logic for WS-Dottie
*
* This module provides the core data fetching functionality for WS-Dottie,
* including both validated (fetchZod) and unvalidated (fetchNative) APIs.
* It handles URL building, request execution, response parsing, and logging
* with automatic .NET date conversion for native fetch operations.
*/
/**
* Main data fetching API with Zod validation
*
* This function provides type-safe data fetching with both input and output
* validation using Zod schemas. It validates input parameters before making
* the request and validates the response data before returning it.
*
* @template TInput - The input parameters type
* @template TOutput - The output response type
* @param endpoint - Complete endpoint object containing schemas and configuration
* @param params - Optional input parameters to validate
* @param logMode - Optional logging mode
* @returns Promise resolving to validated response data
*/
declare const fetchZod: <TInput = never, TOutput = unknown>(endpoint: Endpoint<TInput, TOutput>, params?: TInput, logMode?: LoggingMode) => Promise<TOutput>;
/**
* Native fetch API with automatic .NET date conversion
*
* This function provides unvalidated access to Washington State transportation
* APIs with automatic conversion of .NET datetime strings to JavaScript Date
* objects. No Zod validation is performed on input or output, making it
* suitable for quick prototyping or when you need raw API access.
*
* @template TInput - The input parameters type
* @template TOutput - The output response type
* @param endpoint - Complete endpoint object containing configuration
* @param params - Optional input parameters
* @param logMode - Optional logging mode
* @returns Promise resolving to response data with .NET dates converted
*/
declare const fetchNative$1: <TInput = never, TOutput = unknown>(endpoint: Endpoint<TInput, TOutput>, params?: TInput, logMode?: LoggingMode) => Promise<TOutput>;
/**
* @fileoverview Fetch Strategies for WS-Dottie
*
* This module provides different fetch strategies for different runtime
* environments. It includes JSONP for browser environments (to handle CORS)
* and native fetch for server environments, with automatic strategy selection
* based on the current environment.
*/
/**
* Selects the appropriate fetch strategy based on environment
*
* This function automatically selects the best fetch strategy based on
* the current runtime environment:
* - Test environments: Native fetch (simpler for testing)
* - Web browsers: JSONP (bypasses CORS restrictions)
* - Server environments: Native fetch
* - Override: FORCE_JSONP=true for JSONP testing
*
* @returns The appropriate fetch strategy function
*/
declare const selectFetchStrategy: () => FetchStrategy;
/**
* JSONP fetch strategy for browser environments
*
* This strategy handles CORS restrictions by using JSONP callbacks instead
* of direct HTTP requests. It creates a script tag with a callback parameter
* and handles the response through a global callback function.
*
* @param url - The URL to fetch data from
* @returns Promise resolving to the response data as a JSON string
*/
declare const fetchJsonp: (url: string) => Promise<string>;
/**
* Native fetch strategy for server environments
*
* This strategy uses the standard fetch API available in Node.js and
* modern browsers. It performs standard HTTP requests and handles
* response status codes appropriately.
*
* @param url - The URL to fetch data from
* @returns Promise resolving to the response data as a string
* @throws Error if the response is not ok (status >= 400)
*/
declare const fetchNative: (url: string) => Promise<string>;
/**
* @fileoverview Simplified Error Handling for WS-Dottie
*
* This module provides streamlined error handling for WS-Dottie API operations,
* focusing on preserving actual error information while providing useful context.
* It includes a simple ApiError class that passes through real error messages
* while adding relevant context for debugging and logging.
*/
/**
* Context information for error reporting
*
* Contains additional context about errors that occurred during
* API operations, useful for debugging and error reporting.
*/
interface ErrorContext {
/** The URL that was being accessed when the error occurred */
url?: string;
/** HTTP status code if available */
status?: number;
/** The API endpoint that was being called */
endpoint?: string;
/** Timestamp when the error occurred */
timestamp: Date;
}
/**
* API error type for strongly-typed error handling
*
* A POJO (Plain Old JavaScript Object) that represents API errors with
* context information. This approach is more functional and aligns with
* modern TypeScript patterns while preserving the original error messages
* for better debugging.
*/
interface ApiError {
/** Error name for type identification */
readonly name: "ApiError";
/** Human-readable error message (preserves original error) */
readonly message: string;
/** HTTP status code if available */
readonly status?: number;
/** Additional context information about the error */
readonly context: ErrorContext;
}
/**
* Creates a standardized API error from various error types
*
* This function preserves the original error messages while adding useful
* context information. It handles Zod validation errors, network errors,
* and other common error scenarios by passing through the actual error
* information rather than trying to categorize or rewrite it.
*
* @param error - The original error to convert
* @param endpoint - The API endpoint where the error occurred
* @returns Standardized ApiError POJO
*/
declare const createApiError: (error: unknown, endpoint: string) => ApiError;
/**
* Type guard to check if an error is an ApiError
*
* @param error - The error to check
* @returns True if the error is an ApiError, false otherwise
*/
declare const isApiError: (error: unknown) => error is ApiError;
/**
* @fileoverview Configuration Management for WS-Dottie
*
* This module provides configuration management for WS-Dottie API operations,
* including API key and domain configuration with runtime modification
* capability. It supports environment variable configuration and runtime
* updates for different deployment scenarios.
*/
/**
* Configuration interface for WS-Dottie
*
* Defines the structure for WS-Dottie configuration including API key
* and domain settings.
*/
interface WsdotConfig {
/** WSDOT API access token for authentication */
apiKey: string;
/** Base domain for API requests */
domain: string;
}
/**
* Configuration manager object
*
* This object provides a convenient interface for accessing and
* modifying WS-Dottie configuration settings.
*/
declare const configManager: {
getApiKey: () => string;
getDomain: () => string;
setApiKey: (apiKey: string) => void;
setDomain: (domain: string) => void;
};
/**
* @fileoverview Date Utilities for WS-Dottie
*
* This module provides date conversion utilities specifically designed for
* handling WSDOT/WSF API date formats. It includes conversion from .NET
* datetime strings to JavaScript Date objects and various date formatting
* utilities for API requests and responses.
*/
/**
* Converts a WSDOT .NET timestamp string to a JavaScript Date object
*
* This function parses WSDOT's .NET datetime format ("/Date(timestamp)/")
* and converts it to a JavaScript Date object. It handles both positive
* and negative timestamps, as well as timezone offsets.
*
* The parsing logic:
* - Extracts timestamp from position 6 to 6 characters from the end
* - Handles timezone separators (+ or - after timestamp)
* - Validates the resulting timestamp number
*
* @param dateString - The WSDOT date string to convert
* @returns JavaScript Date object or null if parsing fails
* @example
* ```typescript
* wsdotDateTimeToJSDate("/Date(1757451301100-0700)/") // Returns Date object
* wsdotDateTimeToJSDate("/Date(-2208945600000-0800)/") // Returns Date object
* wsdotDateTimeToJSDate("invalid") // Returns null
* ```
*/
declare const wsdotDateTimeToJSDate: (dateString: string) => Date | null;
/**
* Converts a JavaScript Date to ISO date stamp (YYYY-MM-DD)
*
* This function formats a JavaScript Date object as an ISO date string
* in YYYY-MM-DD format, which is commonly used in API requests.
*
* @param date - The JavaScript Date object to convert
* @returns ISO date string in YYYY-MM-DD format
* @example
* ```typescript
* jsDateToYyyyMmDd(new Date(2024, 0, 15)) // Returns "2024-01-15"
* ```
*/
declare const jsDateToYyyyMmDd: (date: Date) => string;
/**
* Date helper functions for runtime evaluation
*
* These functions return Date objects when called, ensuring they are
* evaluated at runtime rather than build time. This is useful for
* generating dynamic dates in API requests and sample data.
*/
declare const datesHelper: {
/** Returns tomorrow's date */
readonly tomorrow: () => Date;
/** Returns the day after tomorrow's date */
readonly dayAfterTomorrow: () => Date;
/** Returns today's date */
readonly today: () => Date;
/** Returns yesterday's date */
readonly yesterday: () => Date;
/** Returns August 1, 2025 (start of month for sample data) */
readonly startOfMonth: () => Date;
/** Returns August 31, 2025 (end of month for sample data) */
readonly endOfMonth: () => Date;
};
/**
* @fileoverview Simplified Logging Utility for WS-Dottie
*
* This module provides a simplified logging interface for WS-Dottie with
* environment-aware debug logging and specialized API call logging.
* Focused on essential functionality used by the core library.
*/
/**
* Simple logging utility for WS-Dottie
*
* Provides basic logging functions with environment-aware debug logging.
* Debug logging is automatically disabled in production environments.
*/
declare const logger: {
/** Debug logging (disabled in production) */
debug: (message: string) => void;
/** General information logging */
info: (message: string) => void;
/** Warning message logging */
warn: (message: string) => void;
/** Error message logging */
error: (message: string) => void;
};
/**
* Logs API call information in a single line format
*
* Simplified API call logging for the core fetching functionality.
* Used only by fetchCore.ts for basic API operation monitoring.
*
* @param endpoint - The full API endpoint path (will extract endpoint name internally)
* @param params - Parameters being sent to the endpoint
*/
declare const logApiCall: (endpoint: string, params?: unknown) => void;
/**
* Logs API call results with performance metrics
*
* Simplified API result logging for the core fetching functionality.
* Provides basic performance metrics including duration and response size.
*
* @param jsonData - The parsed JSON response data (will calculate object count internally)
* @param startTime - The timestamp when the request started (will calculate duration internally)
* @param responseSize - Response size in bytes
*/
declare const logApiResults: (jsonData: unknown, startTime: number, responseSize: number) => void;
/**
* @module WSDOT — Border Crossings API
* @description Border crossing wait times and related metadata for WSDOT border crossings.
*
* Provides:
* - Current wait times for supported border crossings
* - Crossing metadata including location, direction, and names
*
* Data includes:
* - Crossing name, reported time (JS Date), estimated wait time (minutes)
* - Optional location details (coordinates, road name, milepost)
*
* @functions
* - getBorderCrossings: Returns an array of border crossing data
*
* @input
* - getBorderCrossings: {}
*
* @output
* - getBorderCrossings: BorderCrossings
* - BorderCrossingData fields:
* - CrossingName: Crossing name
* - Time: Report time (JS Date)
* - WaitTime: Estimated wait time in minutes
* - BorderCrossingLocation: Optional location details or null
* - BorderCrossingLocation fields:
* - Description: Location description
* - Direction: Direction of travel (nullable)
* - Latitude: Latitude in decimal degrees
* - Longitude: Longitude in decimal degrees
* - MilePost: Highway milepost
* - RoadName: Highway/road name
*
* @baseType
* - BorderCrossingData: Border crossing report with optional location
* - BorderCrossingLocation: Location details for a border crossing
*
* @cli
* - getBorderCrossings: node dist/cli.mjs getBorderCrossings
*
* @exampleResponse
* {
* "BorderCrossingLocation": {
* "Description": "I-5 General Purpose",
* "Direction": null,
* "Latitude": 49.004776,
* "Longitude": -122.756964,
* "MilePost": 0,
* "RoadName": "005"
* },
* "CrossingName": "I5",
* "Time": "2025-09-03T21:00:00.000Z",
* "WaitTime": 20
* }
*
* @see https://wsdot.wa.gov/traffic/api/Documentation/group___border_crossings.html
*/
/** Input schema for getBorderCrossings */
declare const borderCrossingsInput: z.ZodObject<{}, z.core.$strict>;
type BorderCrossingsInput = z.infer<typeof borderCrossingsInput>;
declare const getBorderCrossings: Endpoint<Record<string, never>, {
BorderCrossingLocation: {
Description: string | null;
RoadName: string | null;
Direction: string | null;
MilePost: number;
Latitude: number;
Longitude: number;
} | null;
CrossingName: string | null;
Time: Date;
WaitTime: number;
}[]>;
/**
* @module WSDOT — Bridge Clearances API
* @description Bridge height and clearance information across all WSDOT routes.
*
* Provides:
* - Vertical clearance maximum/minimum by bridge/structure for all routes
* - Crossing metadata, structure identifiers, and location
*
* Data includes:
* - Structure IDs, route/location metadata, clearances (feet/inches), update timestamps (JS Date)
*
* @functions
* - getBridgeClearances: Returns all bridge clearance data
*
* @input
* - getBridgeClearances: {}
*
* @output
* - getBridgeClearances: BridgeDataGISArray
* - BridgeDataGIS fields:
* - APILastUpdate: API last update time (JS Date)
* - BridgeNumber: Bridge number (nullable)
* - ControlEntityGuid: Control entity GUID
* - CrossingDescription: Crossing description (nullable)
* - CrossingLocationId: Crossing location identifier
* - CrossingRecordGuid: Crossing record GUID
* - InventoryDirection: Inventory direction (nullable)
* - Latitude: Latitude in decimal degrees
* - LocationGuid: Location GUID
* - Longitude: Longitude in decimal degrees
* - RouteDate: Route date (JS Date)
* - SRMP: State Route Mile Post
* - SRMPAheadBackIndicator: Ahead/back indicator (nullable)
* - StateRouteID: State route identifier (nullable)
* - StateStructureId: State structure identifier (nullable)
* - VerticalClearanceMaximumFeetInch: Max clearance in feet/inches (nullable)
* - VerticalClearanceMaximumInches: Max clearance in inches
* - VerticalClearanceMinimumFeetInch: Min clearance in feet/inches (nullable)
* - VerticalClearanceMinimumInches: Min clearance in inches
*
* @baseType
* - BridgeDataGIS: Bridge clearance record
*
* @cli
* - getBridgeClearances: node dist/cli.mjs getBridgeClearances
*
* @exampleResponse
* {
* "APILastUpdate": "2025-09-03T10:30:02.200Z",
* "BridgeNumber": "5/629A",
* "ControlEntityGuid": "88ba5341-b39c-43c9-95a5-bc9584b2d798",
* "CrossingDescription": "I-5 RAMPS UNDER BROADWAY AVE",
* "CrossingLocationId": 6192,
* "CrossingRecordGuid": "9b764b55-9fc1-4448-8b0b-3f35b83d6f5f",
* "InventoryDirection": "I",
* "Latitude": 47.961343,
* "LocationGuid": "dad9f2c9-ae79-4efb-8f3e-587e402e0f80",
* "Longitude": -122.200516,
* "RouteDate": "2016-12-31T08:00:00.000Z",
* "SRMP": 0,
* "SRMPAheadBackIndicator": "A",
* "StateRouteID": "005S119195",
* "StateStructureId": "0003842B",
* "VerticalClearanceMaximumFeetInch": "14 ft 5 in",
* "VerticalClearanceMaximumInches": 173,
* "VerticalClearanceMinimumFeetInch": "14 ft 1 in",
* "VerticalClearanceMinimumInches": 169
* }
*
* @see https://wsdot.wa.gov/traffic/api/Documentation/class_clearance.html
*/
/** Input schema for getBridgeClearances */
declare const bridgeClearancesInput: z.ZodObject<{}, z.core.$strict>;
type BridgeClearancesInput = z.infer<typeof bridgeClearancesInput>;
/**
* @module WSDOT — Bridge Clearances API
* @description Bridge height and clearance information by WSDOT route.
*
* Provides:
* - Vertical clearance maximum/minimum by bridge/structure for a specific route
* - Crossing metadata, structure identifiers, and location
*
* Data includes:
* - Structure IDs, route/location metadata, clearances (feet/inches), update timestamps (JS Date)
*
* @functions
* - getBridgeClearancesByRoute: Returns bridge clearance data for a specific route
*
* @input
* - getBridgeClearancesByRoute:
* - route: WSDOT route string (e.g., "005")
*
* @output
* - getBridgeClearancesByRoute: BridgeDataGISArray
* - BridgeDataGIS fields:
* - APILastUpdate: API last update time (JS Date)
* - BridgeNumber: Bridge number (nullable)
* - ControlEntityGuid: Control entity GUID
* - CrossingDescription: Crossing description (nullable)
* - CrossingLocationId: Crossing location identifier
* - CrossingRecordGuid: Crossing record GUID
* - InventoryDirection: Inventory direction (nullable)
* - Latitude: Latitude in decimal degrees
* - LocationGuid: Location GUID
* - Longitude: Longitude in decimal degrees
* - RouteDate: Route date (JS Date)
* - SRMP: State Route Mile Post
* - SRMPAheadBackIndicator: Ahead/back indicator (nullable)
* - StateRouteID: State route identifier (nullable)
* - StateStructureId: State structure identifier (nullable)
* - VerticalClearanceMaximumFeetInch: Max clearance in feet/inches (nullable)
* - VerticalClearanceMaximumInches: Max clearance in inches
* - VerticalClearanceMinimumFeetInch: Min clearance in feet/inches (nullable)
* - VerticalClearanceMinimumInches: Min clearance in inches
*
* @baseType
* - BridgeDataGIS: Bridge clearance record
*
* @cli
* - getBridgeClearancesByRoute: node dist/cli.mjs getBridgeClearancesByRoute '{"route": "005"}'
*
* @exampleResponse
* {
* "APILastUpdate": "2025-09-03T10:30:02.200Z",
* "BridgeNumber": "5/629A",
* "ControlEntityGuid": "88ba5341-b39c-43c9-95a5-bc9584b2d798",
* "CrossingDescription": "I-5 RAMPS UNDER BROADWAY AVE",
* "CrossingLocationId": 6192,
* "CrossingRecordGuid": "9b764b55-9fc1-4448-8b0b-3f35b83d6f5f",
* "InventoryDirection": "I",
* "Latitude": 47.961343,
* "LocationGuid": "dad9f2c9-ae79-4efb-8f3e-587e402e0f80",
* "Longitude": -122.200516,
* "RouteDate": "2016-12-31T08:00:00.000Z",
* "SRMP": 0,
* "SRMPAheadBackIndicator": "A",
* "StateRouteID": "005S119195",
* "StateStructureId": "0003842B",
* "VerticalClearanceMaximumFeetInch": "14 ft 5 in",
* "VerticalClearanceMaximumInches": 173,
* "VerticalClearanceMinimumFeetInch": "14 ft 1 in",
* "VerticalClearanceMinimumInches": 169
* }
*
* @see https://wsdot.wa.gov/traffic/api/Documentation/class_clearance.html
*/
/** Input schema for getBridgeClearancesByRoute */
declare const bridgeClearancesByRouteInput: z.ZodObject<{
route: z.ZodString;
}, z.core.$strip>;
type BridgeClearancesByRouteInput = z.infer<typeof bridgeClearancesByRouteInput>;
declare const getBridgeClearances: Endpoint<Record<string, never>, {
APILastUpdate: Date;
BridgeNumber: string | null;
ControlEntityGuid: string;
CrossingDescription: string | null;
CrossingLocationId: number;
CrossingRecordGuid: string;
InventoryDirection: "I" | "D" | "B" | "i" | "d" | "b" | null;
Latitude: number;
LocationGuid: string;
Longitude: number;
RouteDate: Date;
SRMP: number;
SRMPAheadBackIndicator: string | null;
StateRouteID: string | null;
StateStructureId: string | null;
VerticalClearanceMaximumFeetInch: string | null;
VerticalClearanceMaximumInches: number;
VerticalClearanceMinimumFeetInch: string | null;
VerticalClearanceMinimumInches: number;
}[]>;
declare const getBridgeClearancesByRoute: Endpoint<{
route: string;
}, {
APILastUpdate: Date;
BridgeNumber: string | null;
ControlEntityGuid: string;
CrossingDescription: string | null;
CrossingLocationId: number;
CrossingRecordGuid: string;
InventoryDirection: "I" | "D" | "B" | "i" | "d" | "b" | null;
Latitude: number;
LocationGuid: string;
Longitude: number;
RouteDate: Date;
SRMP: number;
SRMPAheadBackIndicator: string | null;
StateRouteID: string | null;
StateStructureId: string | null;
VerticalClearanceMaximumFeetInch: string | null;
VerticalClearanceMaximumInches: number;
VerticalClearanceMinimumFeetInch: string | null;
VerticalClearanceMinimumInches: number;
}[]>;
/**
* @module WSDOT — Commercial Vehicle Restrictions API
* @description Commercial vehicle bridge/load restrictions and related metadata.
*
* Provides:
* - Statewide commercial vehicle restrictions (no UniqueID)
* - Locations, dates, load limits, and descriptive metadata
*
* Data includes:
* - Restriction types and comments, bridge/route identifiers, dates (JS Date), roadway location
*
* @functions
* - getCommercialVehicleRestrictions: Returns commercial vehicle restrictions (no IDs)
*
* @input
* - getCommercialVehicleRestrictions: {}
*
* @output
* - getCommercialVehicleRestrictions: CommercialVehicleRestrictions
* - CommercialVehicleRestriction fields:
* - BLMaxAxle: BL maximum axle weight (nullable)
* - BridgeName: Bridge name
* - BridgeNumber: Bridge number
* - CL8MaxAxle: CL-8 maximum axle weight (nullable)
* - DateEffective: Effective date (JS Date)
* - DateExpires: Expiration date (JS Date)
* - DatePosted: Date posted (JS Date)
* - EndRoadwayLocation: End location information
* - IsDetourAvailable: Whether detour is available
* - IsExceptionsAllowed: Whether exceptions are allowed
* - IsPermanentRestriction: Whether restriction is permanent
* - IsWarning: Whether warning only
* - LocationDescription: Location description
* - LocationName: Location name
* - RestrictionComment: Restriction comment
* - RestrictionType: Restriction type code
* - State: State code
* - StateRouteID: State route identifier
* - VehicleType: Vehicle type description
* - CommercialVehicleRestrictionRoadwayLocation fields:
* - Description: Location description (nullable)
* - Direction: Direction (nullable)
* - Latitude: Latitude in decimal degrees
* - Longitude: Longitude in decimal degrees
* - MilePost: Highway milepost
* - RoadName: Highway/road name
*
* @baseType
* - CommercialVehicleRestriction: Restriction record
* - CommercialVehicleRestrictionRoadwayLocation: Roadway location details
*
* @cli
* - getCommercialVehicleRestrictions: node dist/cli.mjs getCommercialVehicleRestrictions
*
* @exampleResponse
* {
* "BLMaxAxle": 20000,
* "BridgeName": "Teanaway River",
* "BridgeNumber": "10/142",
* "CL8MaxAxle": 20000,
* "DateEffective": "2011-10-18T07:00:00.000Z",
* "DateExpires": "2075-12-31T08:00:00.000Z",
* "DatePosted": "2011-10-18T22:12:00.000Z",
* "EndRoadwayLocation": {
* "Description": null,
* "Direction": "Both",
* "Latitude": 0,
* "Longitude": 0,
* "MilePost": 0,
* "RoadName": "SR 10"
* },
* "IsDetourAvailable": false,
* "IsExceptionsAllowed": false,
* "IsPermanentRestriction": false,
* "IsWarning": false,
* "LocationDescription": "SR 10, MP 89.33 both directions-20,000 lbs limitation",
* "LocationName": "1.3 E Jct SR 970",
* "RestrictionComment": "BL =20,000 lbs, CL-8 =20,000 lbs, SA = 40,000 lbs.",
* "RestrictionType": 0,
* "State": "WA",
* "StateRouteID": "10",
* "VehicleType": ""
* }
*
* @see https://wsdot.wa.gov/traffic/api/Documentation/group___commercial_vehicle.html
*/
/** Input schema for getCommercialVehicleRestrictions */
declare const commercialVehicleRestrictionsInput: z.ZodObject<{}, z.core.$strict>;
type CommercialVehicleRestrictionsInput = z.infer<typeof commercialVehicleRestrictionsInput>;
/**
* @module WSDOT — Commercial Vehicle Restrictions API (With ID)
* @description Commercial vehicle bridge/load restrictions and related metadata with UniqueID.
*
* Provides:
* - Statewide commercial vehicle restrictions including UniqueID
* - Locations, dates, load limits, and descriptive metadata
*
* Data includes:
* - Restriction types and comments, bridge/route identifiers, dates (JS Date), roadway location
* - UniqueID for each restriction
*
* @functions
* - getCommercialVehicleRestrictionsWithId: Returns restrictions including UniqueID
*
* @input
* - getCommercialVehicleRestrictionsWithId: {}
*
* @output
* - getCommercialVehicleRestrictionsWithId: CommercialVehicleRestrictionsWithId
* - CommercialVehicleRestrictionWithId fields:
* - BLMaxAxle: BL maximum axle weight (nullable)
* - BridgeName: Bridge name
* - BridgeNumber: Bridge number
* - CL8MaxAxle: CL-8 maximum axle weight (nullable)
* - DateEffective: Effective date (JS Date)
* - DateExpires: Expiration date (JS Date)
* - DatePosted: Date posted (JS Date)
* - EndRoadwayLocation: End location information
* - IsDetourAvailable: Whether detour is available
* - IsExceptionsAllowed: Whether exceptions are allowed
* - IsPermanentRestriction: Whether restriction is permanent
* - IsWarning: Whether warning only
* - LocationDescription: Location description
* - LocationName: Location name
* - RestrictionComment: Restriction comment
* - RestrictionType: Restriction type code
* - State: State code
* - StateRouteID: State route identifier
* - VehicleType: Vehicle type description
* - UniqueID: Unique restriction identifier
* - CommercialVehicleRestrictionRoadwayLocation fields:
* - Description: Location description (nullable)
* - Direction: Direction (nullable)
* - Latitude: Latitude in decimal degrees
* - Longitude: Longitude in decimal degrees
* - MilePost: Highway milepost
* - RoadName: Highway/road name
*
* @baseType
* - CommercialVehicleRestrictionWithId: Restriction record with UniqueID
* - CommercialVehicleRestrictionRoadwayLocation: Roadway location details
*
* @cli
* - getCommercialVehicleRestrictionsWithId: node dist/cli.mjs getCommercialVehicleRestrictionsWithId
*
* @exampleResponse
* {
* "BLMaxAxle": 20000,
* "BridgeName": "Teanaway River",
* "BridgeNumber": "10/142",
* "CL8MaxAxle": 20000,
* "DateEffective": "2011-10-18T07:00:00.000Z",
* "DateExpires": "2075-12-31T08:00:00.000Z",
* "DatePosted": "2011-10-18T22:12:00.000Z",
* "EndRoadwayLocation": {
* "Description": null,
* "Direction": "Both",
* "Latitude": 0,
* "Longitude": 0,
* "MilePost": 0,
* "RoadName": "SR 10"
* },
* "IsDetourAvailable": false,
* "IsExceptionsAllowed": false,
* "IsPermanentRestriction": false,
* "IsWarning": false,
* "LocationDescription": "SR 10, MP 89.33 both directions-20,000 lbs limitation",
* "LocationName": "1.3 E Jct SR 970",
* "RestrictionComment": "BL =20,000 lbs, CL-8 =20,000 lbs, SA = 40,000 lbs.",
* "RestrictionType": 0,
* "State": "WA",
* "StateRouteID": "10",
* "VehicleType": "",
* "UniqueID": "B-WA-010-1"
* }
*
* @see https://wsdot.wa.gov/traffic/api/Documentation/group___commercial_vehicle.html
*/
/** Input schema for getCommercialVehicleRestrictionsWithId */
declare const commercialVehicleRestrictionsWithIdInput: z.ZodObject<{}, z.core.$strict>;
type CommercialVehicleRestrictionsWithIdInput = z.infer<typeof commercialVehicleRestrictionsWithIdInput>;
declare const getCommercialVehicleRestrictions: Endpoint<Record<string, never>, {
BLMaxAxle: number | null;
BridgeName: string | null;
BridgeNumber: string | null;
CL8MaxAxle: number | null;
DateEffective: Date;
DateExpires: Date;
DatePosted: Date;
EndRoadwayLocation: {
Description: string | null;
RoadName: string | null;
Direction: string | null;
MilePost: number;
Latitude: number;
Longitude: number;
} | null;
IsDetourAvailable: boolean;
IsExceptionsAllowed: boolean;
IsPermanentRestriction: boolean;
IsWarning: boolean;
Latitude: number;
LocationDescription: string | null;
LocationName: string | null;
Longitude: number;
MaximumGrossVehicleWeightInPounds: number | null;
RestrictionComment: string | null;
RestrictionHeightInInches: number | null;
RestrictionLengthInInches: number | null;
RestrictionType: 0 | 1;
RestrictionWeightInPounds: number | null;
RestrictionWidthInInches: number | null;
SAMaxAxle: number | null;
StartRoadwayLocation: {
Description: string | null;
RoadName: string | null;
Direction: string | null;
MilePost: number;
Latitude: number;
Longitude: number;
} | null;
State: string | null;
StateRouteID: string | null;
TDMaxAxle: number | null;
VehicleType: string | null;
UniqueID?: string | undefined;
}[]>;
declare const getCommercialVehicleRestrictionsWithId: Endpoint<Record<string, never>, {
BLMaxAxle: number | null;
BridgeName: string | null;
BridgeNumber: string | null;
CL8MaxAxle: number | null;
DateEffective: Date;
DateExpires: Date;
DatePosted: Date;
EndRoadwayLocation: {
Description: string | null;
RoadName: string | null;
Direction: string | null;
MilePost: number;
Latitude: number;
Longitude: number;
} | null;
IsDetourAvailable: boolean;
IsExceptionsAllowed: boolean;
IsPermanentRestriction: boolean;
IsWarning: boolean;
Latitude: number;
LocationDescription: string | null;
LocationName: string | null;
Longitude: number;
MaximumGrossVehicleWeightInPounds: number | null;
RestrictionComment: string | null;
RestrictionHeightInInches: number | null;
RestrictionLengthInInches: number | null;
RestrictionType: 0 | 1;
RestrictionWeightInPounds: number | null;
RestrictionWidthInInches: number | null;
SAMaxAxle: number | null;
StartRoadwayLocation: {
Description: string | null;
RoadName: string | null;
Direction: string | null;
MilePost: number;
Latitude: number;
Longitude: number;
} | null;
State: string | null;
StateRouteID: string | null;
TDMaxAxle: number | null;
VehicleType: string | null;
UniqueID: string | null;
}[]>;
/**
* @module WSDOT — Highway Alerts API
* @description Single highway alert by ID including construction, incidents, and travel impacts.
*
* Provides:
* - Single alert by ID
*
* Data includes:
* - Alert identifiers, categories, status, headline/extended descriptions, start/end times (JS Date), roadway locations
*
* @functions
* - getAlert: Returns a single alert by ID
*
* @input
* - getAlert:
* - AlertID: Alert identifier
*
* @output
* - getAlert: HighwayAlert
* - HighwayAlert fields:
* - AlertID: Alert identifier
* - County: County name (nullable)
* - EndRoadwayLocation: End location details
* - EndTime: End time (JS Date, nullable)
* - EventCategory: Event category
* - EventStatus: Event status
* - ExtendedDescription: Extended description (nullable)
* - HeadlineDescription: Headline description
* - LastUpdatedTime: Last update time (JS Date)
* - Priority: Priority
* - Region: Region name
* - StartRoadwayLocation: Start location details
* - StartTime: Start time (JS Date)
* - HighwayAlertRoadwayLocation fields:
* - Description: Location description (nullable)
* - Direction: Direction (nullable)
* - Latitude: Latitude (may be 0 when not available)
* - Longitude: Longitude (may be 0 when not available)
* - MilePost: Highway milepost (may be 0 when not available)
* - RoadName: Highway/road name (nullable)
*
* @baseType
* - HighwayAlert: Highway alert record
* - HighwayAlertRoadwayLocation: Roadway location details
*
* @cli
* - getAlert: node dist/cli.mjs getAlert '{"AlertID": 1}'
*
* @exampleResponse
* {
* "AlertID": 661208,
* "County": null,
* "EndRoadwayLocation": {
* "Description": null,
* "Direction": "S",
* "Latitude": 47.578503696,
* "Longitude": -122.174652622,
* "MilePost": 11,
* "RoadName": "405"
* },
* "EndTime": "2025-09-05T12:00:00.000Z",
* "EventCategory": "Construction",
* "EventStatus": "Open",
* "ExtendedDescription": "",
* "HeadlineDescription": "Up to two lanes of southbound I-405 from milepost 12 to milepost 11 will be closed nighty, 9 p.m. Tuesday, Sept. 2 – 5 a.m. Friday, Sept. 5.",
* "LastUpdatedTime": "2025-08-29T19:35:05.540Z",
* "Priority": "Low",
* "Region": "Northwest",
* "StartRoadwayLocation": {
* "Description": null,
* "Direction": "S",
* "Latitude": 47.591955273,
* "Longitude": -122.181281785,
* "MilePost": 12,
* "RoadName": "405"
* },
* "StartTime": "2025-09-02T07:00:00.000Z"
* }
*
* @see https://wsdot.wa.gov/traffic/api/Documentation/group___highway_alerts.html
*/
/** Input schema for getAlert */
declare const alertInput: z.ZodObject<{
AlertID: z.ZodNumber;
}, z.core.$strip>;
type AlertInput = z.infer<typeof alertInput>;
/**
* @module WSDOT — Highway Alerts API
* @description Active highway alerts including construction, incidents, and travel impacts.
*
* Provides:
* - All active alerts
*
* Data includes:
* - Alert identifiers, categories, status, headline/extended descriptions, start/end times (JS Date), roadway locations
*
* @functions
* - getAlerts: Returns all active alerts
*
* @input
* - getAlerts: {}
*
* @output
* - getAlerts: HighwayAlerts
* - HighwayAlert fields:
* - AlertID: Alert identifier
* - County: County name (nullable)
* - EndRoadwayLocation: End location details
* - EndTime: End time (JS Date, nullable)
* - EventCategory: Event category
* - EventStatus: Event status
* - ExtendedDescription: Extended description (nullable)
* - HeadlineDescription: Headline description
* - LastUpdatedTime: Last update time (JS Date)
* - Priority: Priority
* - Region: Region name
* - StartRoadwayLocation: Start location details
* - StartTime: Start time (JS Date)
* - HighwayAlertRoadwayLocation fields:
* - Description: Location description (nullable)
* - Direction: Direction (nullable)
* - Latitude: Latitude (may be 0 when not available)
* - Longitude: Longitude (may be 0 when not available)
* - MilePost: Highway milepost (may be 0 when not available)
* - RoadName: Highway/road name (nullable)
*
* @baseType
* - HighwayAlert: Highway alert record
* - HighwayAlertRoadwayLocation: Roadway location details
*
* @cli
* - getAlerts: node dist/cli.mjs getAlerts
*
* @exampleResponse
* {
* "AlertID": 661208,
* "County": null,
* "EndRoadwayLocation": {
* "Description": null,
* "Direction": "S",
* "Latitude": 47.578503696,
* "Longitude": -122.174652622,
* "MilePost": 11,
* "RoadName": "405"
* },
* "EndTime": "2025-09-05T12:00:00.000Z",
* "EventCategory": "Construction",
* "EventStatus": "Open",
* "ExtendedDescription": "",
* "HeadlineDescription": "Up to two lanes of southbound I-405 from milepost 12 to milepost 11 will be closed nighty, 9 p.m. Tuesday, Sept. 2 – 5 a.m. Friday, Sept. 5.",
* "LastUpdatedTime": "2025-08-29T19:35:05.540Z",
* "Priority": "Low",
* "Region": "Northwest",
* "StartRoadwayLocation": {
* "Description": null,
* "Direction": "S",
* "Latitude": 47.591955273,
* "Longitude": -122.181281785,
* "MilePost": 12,
* "RoadName": "405"
* },
* "StartTime": "2025-09-02T07:00:00.000Z"
* }
*
* @see https://wsdot.wa.gov/traffic/api/Documentation/group___highway_alerts.html
*/
/** Input schema for getAlerts */
declare const alertsInput: z.ZodObject<{}, z.core.$strict>;
type AlertsInput = z.infer<typeof alertsInput>;
/**
* @module WSDO