UNPKG

ws-dottie

Version:

Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration

238 lines (179 loc) 11.2 kB
# WSF Terminals API The WSF Terminals API provides comprehensive access to Washington State Ferries terminal information, including basic terminal data, sailing space availability, terminal locations, wait times, and detailed terminal facilities. ## Overview This module provides access to the WSF Terminals API, which offers comprehensive information about Washington State Ferries terminals, including basic terminal data, sailing space availability, terminal locations, wait times, and detailed terminal facilities. ### Key Features | Feature | Description | Availability | |---------|-------------|--------------| | **Terminal Information** | Access basic terminal details and contact information | ✅ Available | | **Space Availability** | Monitor real-time parking and space availability | ✅ Available | | **Wait Time Monitoring** | Track current wait times and congestion | ✅ Available | | **Location Services** | Get terminal coordinates for mapping applications | ✅ Available | | **Facility Information** | Access detailed terminal amenities and services | ✅ Available | | **Real-time Updates** | Monitor space and wait time changes | ✅ Available | | **Transportation Planning** | Find transit connections to terminals | ✅ Available | | **Caching Strategy** | Coordinate data caching using cache flush dates | ✅ Available | | **Geographic Data** | Multiple zoom levels for GIS display applications | ✅ Available | | **Comprehensive Details** | Verbose terminal information for major terminals | ✅ Available | ### Data Update Frequency | Data Type | Update Frequency | Cache Strategy | Notes | |-----------|------------------|----------------|-------| | **Terminal Data** | Static | `WEEKLY_UPDATES` | Updated when terminal information changes | | **Space Availability** | Real-time | `MINUTE_UPDATES` | Updated continuously as space changes | | **Wait Times** | Real-time | `MINUTE_UPDATES` | Updated continuously as wait times change | ## WSF Documentation - **[WSF Terminals API Documentation](https://www.wsdot.wa.gov/ferries/api/)** - **[WSF Terminals API Help](https://www.wsdot.wa.gov/ferries/api/terminals/)** ## API Endpoints ### Endpoints Summary | Endpoint | Method | Description | Parameters | Returns | |----------|--------|-------------|------------|---------| | `cacheflushdate` | GET | Cache flush date for coordinating data caching | None | `TerminalsCacheFlushDate` | | `terminalbasics` | GET | Basic details for all terminals | None | `TerminalBasics[]` | | `terminalbasics/{TerminalID}` | GET | Basic details for specific terminal | `TerminalID` | `TerminalBasics` | | `terminallocations` | GET | Location details for all terminals | None | `TerminalLocation[]` | | `terminalsailingspace` | GET | Sailing space availability for all terminals | None | `TerminalSailingSpace[]` | | `terminalwaittimes` | GET | Wait times for all terminals | None | `TerminalWaitTimes[]` | | `terminalverbose` | GET | Detailed terminal facilities for all terminals | None | `TerminalVerbose[]` | ### Base URL ``` https://www.wsdot.wa.gov/ferries/api/terminals ``` ## Usage Examples ### Basic Usage ```typescript import { WsfTerminals } from 'ws-dottie'; // Get all terminal basics const terminals = await WsfTerminals.getTerminalBasics(); // Get specific terminal basics const terminal = await WsfTerminals.getTerminalBasicsByTerminalId({ terminalId: 7 }); // Get terminal sailing space const spaceData = await WsfTerminals.getTerminalSailingSpace(); // Get terminal wait times const waitTimes = await WsfTerminals.getTerminalWaitTimes(); // Get detailed terminal information const verboseTerminals = await WsfTerminals.getTerminalVerbose(); ``` ### Parameter Examples | Function | Parameters | Example | Description | |----------|------------|---------|-------------| | `getTerminalBasics` | None | `getTerminalBasics()` | Get basic details for all terminals | | `getTerminalBasicsByTerminalId` | `{ terminalId: number }` | `getTerminalBasicsByTerminalId({ terminalId: 7 })` | Get basic details for specific terminal | | `getTerminalSailingSpace` | None | `getTerminalSailingSpace()` | Get sailing space availability for all terminals | | `getTerminalWaitTimes` | None | `getTerminalWaitTimes()` | Get wait times for all terminals | ### Returns See Data Types below. Basics, locations, sailing space, wait times, and verbose endpoints return typed arrays; single‑terminal basics return a single `TerminalBasics` item. ### Common Use Cases ```typescript // Example 1: Display all terminal information const terminals = await WsfTerminals.getTerminalBasics(); terminals.forEach(terminal => { console.log(`${terminal.TerminalName}: ${terminal.TerminalAbbrev}`); }); // Example 2: Get specific terminal details const terminal = await WsfTerminals.getTerminalBasicsByTerminalId({ terminalId: 7 }); // Display detailed terminal information ``` ## React Integration For comprehensive React Query hooks, TanStack Query setup, error handling, and caching strategies, see the [API Reference](../API-REFERENCE.md) documentation. ### Available Hooks | Hook | Parameters | Description | Caching Strategy | |------|------------|-------------|------------------| | `useTerminalBasics` | None | Get basic details for all terminals | `WEEKLY_UPDATES` | | `useTerminalBasicsByTerminalId` | `{ terminalId: number }` | Get basic details for specific terminal | `WEEKLY_UPDATES` | | `useTerminalSailingSpace` | None | Get sailing space availability for all terminals | `MINUTE_UPDATES` | | `useTerminalWaitTimes` | None | Get wait times for all terminals | `MINUTE_UPDATES` | ### Basic Hook Usage ```typescript import { useTerminalBasics } from 'ws-dottie'; function TerminalsList() { const { data, isLoading, error } = useTerminalBasics(); if (isLoading) return <div>Loading terminals...</div>; if (error) return <div>Error: {error.message}</div>; return ( <div> {data?.map(terminal => ( <div key={terminal.TerminalID}> <h3>{terminal.TerminalName}</h3> <p>Abbreviation: {terminal.TerminalAbbrev}</p> <p>Description: {terminal.TerminalDescription}</p> </div> ))} </div> ); } ``` ## Data Types ### Type Summary | Type Name | Description | Key Properties | |-----------|-------------|----------------| | `TerminalBasics` | Basic terminal information | `TerminalID`, `TerminalName`, `TerminalAbbrev`, `TerminalDescription` | | `TerminalLocation` | Terminal location data | `TerminalID`, `Latitude`, `Longitude`, `ZoomLevel` | | `TerminalSailingSpace` | Sailing space availability | `TerminalID`, `SpaceAvailable`, `LastUpdated` | | `TerminalWaitTimes` | Terminal wait times | `TerminalID`, `WaitTime`, `LastUpdated` | ### Detailed Type Definitions ```typescript type TerminalBasics = { TerminalID: number; // Unique identifier for the terminal TerminalName: string; // Full name of the terminal TerminalAbbrev: string; // Abbreviated terminal name TerminalDescription: string; // Description of the terminal TerminalStatus: string; // Current status of the terminal }; type TerminalLocation = { TerminalID: number; // Unique identifier for the terminal Latitude: number; // Latitude coordinate of the terminal Longitude: number; // Longitude coordinate of the terminal ZoomLevel: number; // Recommended zoom level for mapping TerminalName: string; // Name of the terminal }; type TerminalSailingSpace = { TerminalID: number; // Unique identifier for the terminal SpaceAvailable: number; // Available sailing space LastUpdated: string; // Last update timestamp TerminalName: string; // Name of the terminal }; type TerminalWaitTimes = { TerminalID: number; // Unique identifier for the terminal WaitTime: number; // Current wait time in minutes LastUpdated: string; // Last update timestamp TerminalName: string; // Name of the terminal }; ``` ## Common Use Cases ### Use Case 1: Terminal Information Display **Scenario**: Display comprehensive terminal information for ferry travelers **Solution**: Use the `getTerminalBasics` function to show all terminal details and contact information ```typescript // Implementation example const terminals = await WsfTerminals.getTerminalBasics(); // Display terminal information for travelers ``` ### Use Case 2: Real-time Space and Wait Time Monitoring **Scenario**: Monitor real-time space availability and wait times for trip planning **Solution**: Use the `getTerminalSailingSpace` and `getTerminalWaitTimes` functions to display current conditions ```typescript // Implementation example const spaceData = await WsfTerminals.getTerminalSailingSpace(); const waitTimes = await WsfTerminals.getTerminalWaitTimes(); // Display real-time space availability and wait times ``` ## Performance & Caching This API uses the **WEEKLY_UPDATES** caching strategy for static data and **MINUTE_UPDATES** for real-time data. For detailed information about caching configuration, performance optimization, and advanced caching options, see the [Performance & Caching](../API-REFERENCE.md#performance--caching) section in the API Reference. | Caching Aspect | Configuration | Description | |----------------|---------------|-------------| | **Stale Time** | 7 days (static), 1 minute (real-time) | Data considered fresh for 7 days (static) or 1 minute (real-time) | | **Refetch Interval** | 7 days (static), 1 minute (real-time) | Automatically refetch data every 7 days (static) or 1 minute (real-time) | | **GC Time** | 14 days (static), 1 hour (real-time) | Keep unused data in cache for 14 days (static) or 1 hour (real-time) | | **Retry** | 5 attempts (static), 0 attempts (real-time) | Retry failed requests up to 5 times (static) or no retries (real-time) | ## Update Frequency Refer to Data Update Frequency near the top of this page for freshness guidance (real‑time for space/wait times; weekly for static terminal data). ## Common Patterns For information about data transformation, error handling, caching strategies, and other common patterns, see the [API Reference](../API-REFERENCE.md) documentation. ## References - **[Error Handling](../API-REFERENCE.md#error-handling)** - Comprehensive error handling patterns - **[Data Transformation](../API-REFERENCE.md#data-transformation)** - Automatic data conversion and filtering - **[React Hooks](../API-REFERENCE.md#react-hooks)** - Complete React integration guide - **[Performance & Caching](../API-REFERENCE.md#performance--caching)** - Advanced caching configuration - **[Testing Status](../API-REFERENCE.md#testing-status)** - E2E test completion and validation status - **[API Compliance](../API-REFERENCE.md#api-compliance)** - WSF API alignment verification