UNPKG

@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
"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; } }