@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
TypeScript
/**
* 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;
}