- Standardized error handling across tool implementations - Improved return type consistency for tool execution results - Simplified configuration parsing and type definitions - Enhanced type safety for various configuration schemas - Cleaned up and normalized tool response structures - Updated SSE and event subscription tool implementations
99 lines
2.8 KiB
TypeScript
99 lines
2.8 KiB
TypeScript
import { config } from "dotenv";
|
|
import { resolve } from "path";
|
|
|
|
// Load environment variables based on NODE_ENV
|
|
const envFile =
|
|
process.env.NODE_ENV === "production"
|
|
? ".env"
|
|
: process.env.NODE_ENV === "test"
|
|
? ".env.test"
|
|
: ".env.development";
|
|
|
|
console.log(`Loading environment from ${envFile}`);
|
|
config({ path: resolve(process.cwd(), envFile) });
|
|
|
|
// Home Assistant Configuration
|
|
export const HASS_CONFIG = {
|
|
HOST: process.env.HASS_HOST || "http://homeassistant.local:8123",
|
|
TOKEN: process.env.HASS_TOKEN,
|
|
SOCKET_URL:
|
|
process.env.HASS_SOCKET_URL ||
|
|
"ws://homeassistant.local:8123/api/websocket",
|
|
BASE_URL: process.env.HASS_HOST || "http://homeassistant.local:8123",
|
|
SOCKET_TOKEN: process.env.HASS_TOKEN,
|
|
};
|
|
|
|
// Server Configuration
|
|
export const SERVER_CONFIG = {
|
|
PORT: parseInt(process.env.PORT || "3000", 10),
|
|
NODE_ENV: process.env.NODE_ENV || "development",
|
|
DEBUG: process.env.DEBUG === "true",
|
|
LOG_LEVEL: process.env.LOG_LEVEL || "info",
|
|
};
|
|
|
|
// AI Configuration
|
|
export const AI_CONFIG = {
|
|
PROCESSOR_TYPE: process.env.PROCESSOR_TYPE || "claude",
|
|
OPENAI_API_KEY: process.env.OPENAI_API_KEY,
|
|
};
|
|
|
|
// Rate Limiting Configuration
|
|
export const RATE_LIMIT_CONFIG = {
|
|
REGULAR: parseInt(process.env.RATE_LIMIT_REGULAR || "100", 10),
|
|
WEBSOCKET: parseInt(process.env.RATE_LIMIT_WEBSOCKET || "1000", 10),
|
|
};
|
|
|
|
// Security Configuration
|
|
export const SECURITY_CONFIG = {
|
|
JWT_SECRET:
|
|
process.env.JWT_SECRET || "default_secret_key_change_in_production",
|
|
CORS_ORIGINS: (
|
|
process.env.CORS_ORIGINS || "http://localhost:3000,http://localhost:8123"
|
|
)
|
|
.split(",")
|
|
.map((origin) => origin.trim()),
|
|
};
|
|
|
|
// Test Configuration
|
|
export const TEST_CONFIG = {
|
|
HASS_HOST: process.env.TEST_HASS_HOST || "http://localhost:8123",
|
|
HASS_TOKEN: process.env.TEST_HASS_TOKEN || "test_token",
|
|
HASS_SOCKET_URL:
|
|
process.env.TEST_HASS_SOCKET_URL || "ws://localhost:8123/api/websocket",
|
|
PORT: parseInt(process.env.TEST_PORT || "3001", 10),
|
|
};
|
|
|
|
// Mock Configuration (for testing)
|
|
export const MOCK_CONFIG = {
|
|
SERVICES: process.env.MOCK_SERVICES === "true",
|
|
RESPONSES_DIR: process.env.MOCK_RESPONSES_DIR || "__tests__/mock-responses",
|
|
};
|
|
|
|
// Validate required configuration
|
|
function validateConfig() {
|
|
const missingVars: string[] = [];
|
|
|
|
if (!HASS_CONFIG.TOKEN) missingVars.push("HASS_TOKEN");
|
|
if (!SECURITY_CONFIG.JWT_SECRET) missingVars.push("JWT_SECRET");
|
|
|
|
if (missingVars.length > 0) {
|
|
throw new Error(
|
|
`Missing required environment variables: ${missingVars.join(", ")}`,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Export configuration validation
|
|
export const validateConfiguration = validateConfig;
|
|
|
|
// Export all configurations as a single object
|
|
export const AppConfig = {
|
|
HASS: HASS_CONFIG,
|
|
SERVER: SERVER_CONFIG,
|
|
AI: AI_CONFIG,
|
|
RATE_LIMIT: RATE_LIMIT_CONFIG,
|
|
SECURITY: SECURITY_CONFIG,
|
|
TEST: TEST_CONFIG,
|
|
MOCK: MOCK_CONFIG,
|
|
};
|