Spaces:
Running
Running
| // ===== KIMI SECURITY & VALIDATION CONFIGURATION ===== | |
| window.KIMI_SECURITY_CONFIG = { | |
| // Input validation limits | |
| MAX_MESSAGE_LENGTH: 2000, | |
| MAX_API_KEY_LENGTH: 200, | |
| MIN_API_KEY_LENGTH: 10, | |
| // Security settings | |
| API_KEY_PATTERNS: [ | |
| /^sk-or-v1-[a-zA-Z0-9]{16,}$/, // OpenRouter pattern (relaxed length) | |
| /^sk-[a-zA-Z0-9_\-]{16,}$/, // OpenAI and similar (relaxed) | |
| /^[a-zA-Z0-9_\-]{16,}$/ // Generic API key fallback | |
| ], | |
| // Cache settings | |
| CACHE_MAX_AGE: 300000, // 5 minutes | |
| CACHE_MAX_SIZE: 100, | |
| // Performance settings | |
| DEBOUNCE_DELAY: 300, | |
| BATCH_DELAY: 800, | |
| THROTTLE_LIMIT: 1000, | |
| // Error messages | |
| ERRORS: { | |
| INVALID_INPUT: "Invalid input provided", | |
| MESSAGE_TOO_LONG: "Message too long. Please keep it under {max} characters.", | |
| INVALID_API_KEY: "Invalid API key format", | |
| NETWORK_ERROR: "Network error. Please check your connection.", | |
| SYSTEM_ERROR: "System error occurred. Please try again." | |
| } | |
| }; | |
| // Validation utilities using the configuration | |
| window.KIMI_VALIDATORS = { | |
| validateMessage: message => { | |
| if (!message || typeof message !== "string") return { valid: false, error: "INVALID_INPUT" }; | |
| if (message.length > window.KIMI_SECURITY_CONFIG.MAX_MESSAGE_LENGTH) { | |
| return { | |
| valid: false, | |
| error: "MESSAGE_TOO_LONG", | |
| params: { max: window.KIMI_SECURITY_CONFIG.MAX_MESSAGE_LENGTH } | |
| }; | |
| } | |
| return { valid: true }; | |
| }, | |
| validateApiKey: key => { | |
| if (!key || typeof key !== "string") return false; | |
| if (key.length < window.KIMI_SECURITY_CONFIG.MIN_API_KEY_LENGTH) return false; | |
| if (key.length > window.KIMI_SECURITY_CONFIG.MAX_API_KEY_LENGTH) return false; | |
| return window.KIMI_SECURITY_CONFIG.API_KEY_PATTERNS.some(pattern => pattern.test(key)); | |
| }, | |
| validateSliderValue: (value, type) => { | |
| // Use centralized config from KIMI_CONFIG | |
| if (window.KIMI_CONFIG && window.KIMI_CONFIG.validate) { | |
| return window.KIMI_CONFIG.validate(value, type); | |
| } | |
| // Fallback if config not available | |
| const num = parseFloat(value); | |
| if (isNaN(num)) return { valid: false, value: 0 }; | |
| return { valid: true, value: num }; | |
| } | |
| }; | |
| window.KIMI_SECURITY_INITIALIZED = true; | |