refactor: optimize configuration and tool implementations

- 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
This commit is contained in:
jango-blockchained
2025-02-04 00:56:45 +01:00
parent 9a02bdaf11
commit bc1dc8278a
65 changed files with 7094 additions and 7675 deletions

View File

@@ -1,135 +1,162 @@
import { z } from 'zod';
import { z } from "zod";
// Test configuration schema
const testConfigSchema = z.object({
// Test Environment
TEST_PORT: z.number().default(3001),
TEST_HOST: z.string().default('http://localhost'),
TEST_WEBSOCKET_PORT: z.number().default(3002),
// Test Environment
TEST_PORT: z.number().default(3001),
TEST_HOST: z.string().default("http://localhost"),
TEST_WEBSOCKET_PORT: z.number().default(3002),
// Mock Authentication
TEST_JWT_SECRET: z.string().default('test_jwt_secret_key_that_is_at_least_32_chars'),
TEST_TOKEN: z.string().default('test_token_that_is_at_least_32_chars_long'),
TEST_INVALID_TOKEN: z.string().default('invalid_token'),
// Mock Authentication
TEST_JWT_SECRET: z
.string()
.default("test_jwt_secret_key_that_is_at_least_32_chars"),
TEST_TOKEN: z.string().default("test_token_that_is_at_least_32_chars_long"),
TEST_INVALID_TOKEN: z.string().default("invalid_token"),
// Mock Client Settings
TEST_CLIENT_IP: z.string().default('127.0.0.1'),
TEST_MAX_CLIENTS: z.number().default(10),
TEST_PING_INTERVAL: z.number().default(100),
TEST_CLEANUP_INTERVAL: z.number().default(200),
TEST_MAX_CONNECTION_AGE: z.number().default(1000),
// Mock Client Settings
TEST_CLIENT_IP: z.string().default("127.0.0.1"),
TEST_MAX_CLIENTS: z.number().default(10),
TEST_PING_INTERVAL: z.number().default(100),
TEST_CLEANUP_INTERVAL: z.number().default(200),
TEST_MAX_CONNECTION_AGE: z.number().default(1000),
// Mock Rate Limiting
TEST_RATE_LIMIT_WINDOW: z.number().default(60000), // 1 minute
TEST_RATE_LIMIT_MAX_REQUESTS: z.number().default(100),
TEST_RATE_LIMIT_WEBSOCKET: z.number().default(1000),
// Mock Rate Limiting
TEST_RATE_LIMIT_WINDOW: z.number().default(60000), // 1 minute
TEST_RATE_LIMIT_MAX_REQUESTS: z.number().default(100),
TEST_RATE_LIMIT_WEBSOCKET: z.number().default(1000),
// Mock Events
TEST_EVENT_TYPES: z.array(z.string()).default([
'state_changed',
'automation_triggered',
'script_executed',
'service_called'
// Mock Events
TEST_EVENT_TYPES: z
.array(z.string())
.default([
"state_changed",
"automation_triggered",
"script_executed",
"service_called",
]),
// Mock Entities
TEST_ENTITIES: z.array(z.object({
// Mock Entities
TEST_ENTITIES: z
.array(
z.object({
entity_id: z.string(),
state: z.string(),
attributes: z.record(z.any()),
last_changed: z.string(),
last_updated: z.string()
})).default([
{
entity_id: 'light.test_light',
state: 'on',
attributes: {
brightness: 255,
color_temp: 400
},
last_changed: new Date().toISOString(),
last_updated: new Date().toISOString()
last_updated: z.string(),
}),
)
.default([
{
entity_id: "light.test_light",
state: "on",
attributes: {
brightness: 255,
color_temp: 400,
},
{
entity_id: 'switch.test_switch',
state: 'off',
attributes: {},
last_changed: new Date().toISOString(),
last_updated: new Date().toISOString()
}
last_changed: new Date().toISOString(),
last_updated: new Date().toISOString(),
},
{
entity_id: "switch.test_switch",
state: "off",
attributes: {},
last_changed: new Date().toISOString(),
last_updated: new Date().toISOString(),
},
]),
// Mock Services
TEST_SERVICES: z.array(z.object({
// Mock Services
TEST_SERVICES: z
.array(
z.object({
domain: z.string(),
service: z.string(),
data: z.record(z.any())
})).default([
{
domain: 'light',
service: 'turn_on',
data: {
entity_id: 'light.test_light',
brightness: 255
}
data: z.record(z.any()),
}),
)
.default([
{
domain: "light",
service: "turn_on",
data: {
entity_id: "light.test_light",
brightness: 255,
},
{
domain: 'switch',
service: 'turn_off',
data: {
entity_id: 'switch.test_switch'
}
}
},
{
domain: "switch",
service: "turn_off",
data: {
entity_id: "switch.test_switch",
},
},
]),
// Mock Error Scenarios
TEST_ERROR_SCENARIOS: z.array(z.object({
// Mock Error Scenarios
TEST_ERROR_SCENARIOS: z
.array(
z.object({
type: z.string(),
message: z.string(),
code: z.number()
})).default([
{
type: 'authentication_error',
message: 'Invalid token',
code: 401
},
{
type: 'rate_limit_error',
message: 'Too many requests',
code: 429
},
{
type: 'validation_error',
message: 'Invalid request body',
code: 400
}
])
code: z.number(),
}),
)
.default([
{
type: "authentication_error",
message: "Invalid token",
code: 401,
},
{
type: "rate_limit_error",
message: "Too many requests",
code: 429,
},
{
type: "validation_error",
message: "Invalid request body",
code: 400,
},
]),
});
// Parse environment variables or use defaults
const parseTestConfig = () => {
const config = {
TEST_PORT: parseInt(process.env.TEST_PORT || '3001'),
TEST_HOST: process.env.TEST_HOST || 'http://localhost',
TEST_WEBSOCKET_PORT: parseInt(process.env.TEST_WEBSOCKET_PORT || '3002'),
TEST_JWT_SECRET: process.env.TEST_JWT_SECRET || 'test_jwt_secret_key_that_is_at_least_32_chars',
TEST_TOKEN: process.env.TEST_TOKEN || 'test_token_that_is_at_least_32_chars_long',
TEST_INVALID_TOKEN: process.env.TEST_INVALID_TOKEN || 'invalid_token',
TEST_CLIENT_IP: process.env.TEST_CLIENT_IP || '127.0.0.1',
TEST_MAX_CLIENTS: parseInt(process.env.TEST_MAX_CLIENTS || '10'),
TEST_PING_INTERVAL: parseInt(process.env.TEST_PING_INTERVAL || '100'),
TEST_CLEANUP_INTERVAL: parseInt(process.env.TEST_CLEANUP_INTERVAL || '200'),
TEST_MAX_CONNECTION_AGE: parseInt(process.env.TEST_MAX_CONNECTION_AGE || '1000'),
TEST_RATE_LIMIT_WINDOW: parseInt(process.env.TEST_RATE_LIMIT_WINDOW || '60000'),
TEST_RATE_LIMIT_MAX_REQUESTS: parseInt(process.env.TEST_RATE_LIMIT_MAX_REQUESTS || '100'),
TEST_RATE_LIMIT_WEBSOCKET: parseInt(process.env.TEST_RATE_LIMIT_WEBSOCKET || '1000'),
};
const config = {
TEST_PORT: parseInt(process.env.TEST_PORT || "3001"),
TEST_HOST: process.env.TEST_HOST || "http://localhost",
TEST_WEBSOCKET_PORT: parseInt(process.env.TEST_WEBSOCKET_PORT || "3002"),
TEST_JWT_SECRET:
process.env.TEST_JWT_SECRET ||
"test_jwt_secret_key_that_is_at_least_32_chars",
TEST_TOKEN:
process.env.TEST_TOKEN || "test_token_that_is_at_least_32_chars_long",
TEST_INVALID_TOKEN: process.env.TEST_INVALID_TOKEN || "invalid_token",
TEST_CLIENT_IP: process.env.TEST_CLIENT_IP || "127.0.0.1",
TEST_MAX_CLIENTS: parseInt(process.env.TEST_MAX_CLIENTS || "10"),
TEST_PING_INTERVAL: parseInt(process.env.TEST_PING_INTERVAL || "100"),
TEST_CLEANUP_INTERVAL: parseInt(process.env.TEST_CLEANUP_INTERVAL || "200"),
TEST_MAX_CONNECTION_AGE: parseInt(
process.env.TEST_MAX_CONNECTION_AGE || "1000",
),
TEST_RATE_LIMIT_WINDOW: parseInt(
process.env.TEST_RATE_LIMIT_WINDOW || "60000",
),
TEST_RATE_LIMIT_MAX_REQUESTS: parseInt(
process.env.TEST_RATE_LIMIT_MAX_REQUESTS || "100",
),
TEST_RATE_LIMIT_WEBSOCKET: parseInt(
process.env.TEST_RATE_LIMIT_WEBSOCKET || "1000",
),
};
return testConfigSchema.parse(config);
return testConfigSchema.parse(config);
};
// Export the validated test configuration
export const TEST_CONFIG = parseTestConfig();
// Export types
export type TestConfig = z.infer<typeof testConfigSchema>;
export type TestConfig = z.infer<typeof testConfigSchema>;