UNPKG

@siva-sub/mcp-public-transport

Version:

A Model Context Protocol server for Singapore transport data with real-time information and routing

186 lines (185 loc) 5.34 kB
/** * Enhanced LTA Service with comprehensive API integration * Dynamically integrates all LTA DataMall APIs for intelligent transport planning */ import { LTAService } from './lta.js'; import { CacheService } from './cache.js'; import { TaxiAvailability } from '../types/transport.js'; export interface TrafficIncident { type: string; latitude: number; longitude: number; message: string; severity?: 'low' | 'medium' | 'high'; affectedRoutes?: string[]; } export interface EstimatedTravelTime { name: string; direction: number; farEndPoint: string; startPoint: string; endPoint: string; estimatedTime: number; } export interface BusArrivalInfo { busStopCode: string; services: Array<{ serviceNo: string; operator: string; nextBus: { estimatedArrival: string; load: 'SEA' | 'SDA' | 'LSD'; feature: string; type: 'SD' | 'DD' | 'BD'; latitude?: string; longitude?: string; }; nextBus2?: any; nextBus3?: any; }>; } export interface PassengerVolume { originBusStop?: string; destinationBusStop?: string; originTrainStation?: string; destinationTrainStation?: string; totalTrips: number; timeOfDay: string; dayType: 'weekday' | 'weekend'; } export interface TrafficFlow { roadName: string; speedBand: number; minimumSpeed: number; maximumSpeed: number; location: { latitude: number; longitude: number; }; } export interface FacilityMaintenance { stationCode: string; stationName: string; affectedFacilities: string[]; startDate: string; endDate: string; description: string; } export interface FaultyTrafficLight { latitude: number; longitude: number; message: string; } export interface RoadWork { eventID: string; startDate: string; endDate: string; serviceDept: string; roadName: string; other: string; } export interface VMSSign { equipmentID: string; latitude: number; longitude: number; message: string; } export interface TaxiStand { taxiCode: string; latitude: number; longitude: number; bfa: string; ownership: string; type: string; name: string; } export interface RouteIntelligence { trafficConditions: TrafficIncident[]; estimatedTravelTimes: EstimatedTravelTime[]; busLoadFactors: Map<string, 'low' | 'medium' | 'high'>; facilityDisruptions: FacilityMaintenance[]; passengerVolumeInsights: PassengerVolume[]; taxiAvailability: TaxiAvailability[]; faultyTrafficLights: FaultyTrafficLight[]; roadWorks: RoadWork[]; vmsSigns: VMSSign[]; taxiStands: TaxiStand[]; routeRecommendations: string[]; } export declare class LTAEnhancedService extends LTAService { private cacheService; private readonly CACHE_DURATION; constructor(apiKey: string, cacheService: CacheService, requestTimeout?: number); /** * Make a request to LTA API (protected method access) */ protected makeRequest(endpoint: string, params?: any): Promise<any>; /** * Get comprehensive route intelligence for journey planning */ getRouteIntelligence(startLat: number, startLng: number, endLat: number, endLng: number, radius?: number): Promise<RouteIntelligence>; /** * Get traffic incidents in a specific area */ getTrafficIncidentsInArea(startLat: number, startLng: number, endLat: number, endLng: number, radius: number): Promise<TrafficIncident[]>; /** * Get estimated travel times for expressways */ getEstimatedTravelTimes(): Promise<EstimatedTravelTime[]>; /** * Get bus arrivals in a specific area */ getBusArrivalsInArea(lat: number, lng: number, radius: number): Promise<BusArrivalInfo[]>; /** * Get facility maintenance information */ getFacilityMaintenance(): Promise<FacilityMaintenance[]>; /** * Get passenger volume insights */ getPassengerVolumeInsights(): Promise<PassengerVolume[]>; /** * Get taxi availability in area */ getTaxiAvailabilityInArea(startLat: number, startLng: number, endLat: number, endLng: number): Promise<TaxiAvailability[]>; /** * Get faulty traffic lights information */ getFaultyTrafficLights(): Promise<FaultyTrafficLight[]>; /** * Get road works information */ getRoadWorks(): Promise<RoadWork[]>; /** * Get VMS (Variable Message Signs) information */ getVMSSigns(): Promise<VMSSign[]>; /** * Get Taxi Stands information */ getTaxiStands(): Promise<TaxiStand[]>; /** * Generate intelligent route recommendations */ private generateRouteRecommendations; /** * Assess incident severity based on message content */ private assessIncidentSeverity; /** * Extract affected routes from incident message */ private extractAffectedRoutes; /** * Check if coordinates are within specified area */ private isWithinArea; /** * Calculate distance between two coordinates */ private calculateDistance; /** * Generate passenger volume insights based on common patterns */ private generatePassengerVolumeInsights; }