@siva-sub/mcp-public-transport
Version:
A Model Context Protocol server for Singapore transport data with real-time information and routing
68 lines (67 loc) • 3.39 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadEnvironment = loadEnvironment;
const zod_1 = require("zod");
const dotenv_1 = __importDefault(require("dotenv"));
dotenv_1.default.config();
const ConfigSchema = zod_1.z.object({
// Existing configs
ltaAccountKey: zod_1.z.string().min(1, 'LTA_ACCOUNT_KEY is required'),
cacheDuration: zod_1.z.coerce.number().default(300),
logLevel: zod_1.z.enum(['debug', 'info', 'warn', 'error']).default('info'),
maxWalkDistance: zod_1.z.coerce.number().default(1000),
enableCrowdPrediction: zod_1.z.coerce.boolean().default(true),
enableCostOptimization: zod_1.z.coerce.boolean().default(true),
requestTimeout: zod_1.z.coerce.number().default(30000), // Increased for OneMap API
maxConcurrentRequests: zod_1.z.coerce.number().default(10),
// OneMap authentication configs (required for routing)
oneMapEmail: zod_1.z.string().email('ONEMAP_EMAIL must be a valid email address'),
oneMapPassword: zod_1.z.string().min(1, 'ONEMAP_PASSWORD is required'),
enableFuzzySearch: zod_1.z.coerce.boolean().default(true),
maxSearchResults: zod_1.z.coerce.number().default(10),
searchTimeout: zod_1.z.coerce.number().default(5000),
enableAutoComplete: zod_1.z.coerce.boolean().default(true),
enableLocationCaching: zod_1.z.coerce.boolean().default(true),
locationCacheDuration: zod_1.z.coerce.number().default(3600),
// Testing and maintenance
enableApiTesting: zod_1.z.coerce.boolean().default(false),
skipTrafficApis: zod_1.z.coerce.boolean().default(false),
});
function loadEnvironment() {
try {
const config = ConfigSchema.parse({
// Existing configs
ltaAccountKey: process.env.LTA_ACCOUNT_KEY,
cacheDuration: process.env.CACHE_DURATION,
logLevel: process.env.LOG_LEVEL,
maxWalkDistance: process.env.MAX_WALK_DISTANCE,
enableCrowdPrediction: process.env.ENABLE_CROWD_PREDICTION,
enableCostOptimization: process.env.ENABLE_COST_OPTIMIZATION,
requestTimeout: process.env.REQUEST_TIMEOUT,
maxConcurrentRequests: process.env.MAX_CONCURRENT_REQUESTS,
// New location intelligence configs
oneMapEmail: process.env.ONEMAP_EMAIL,
oneMapPassword: process.env.ONEMAP_PASSWORD,
enableFuzzySearch: process.env.ENABLE_FUZZY_SEARCH,
maxSearchResults: process.env.MAX_SEARCH_RESULTS,
searchTimeout: process.env.SEARCH_TIMEOUT,
enableAutoComplete: process.env.ENABLE_AUTO_COMPLETE,
enableLocationCaching: process.env.ENABLE_LOCATION_CACHING,
locationCacheDuration: process.env.LOCATION_CACHE_DURATION,
// Testing and maintenance
enableApiTesting: process.env.ENABLE_API_TESTING,
skipTrafficApis: process.env.SKIP_TRAFFIC_APIS,
});
return config;
}
catch (error) {
if (error instanceof zod_1.z.ZodError) {
const issues = error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ');
throw new Error(`Environment configuration error: ${issues}`);
}
throw error;
}
}